{
  "version": 3,
  "sources": ["../../../node_modules/@superset-ui/embedded-sdk/lib/const.js", "../../../node_modules/@superset-ui/switchboard/lib/switchboard.js", "../../../node_modules/@superset-ui/switchboard/lib/index.js", "../../../node_modules/jwt-decode/lib/atob.js", "../../../node_modules/jwt-decode/lib/base64_url_decode.js", "../../../node_modules/jwt-decode/lib/index.js", "../../../node_modules/jwt-decode/lib/index.cjs.js", "../../../node_modules/@superset-ui/embedded-sdk/lib/guestTokenRefresh.js", "../../../node_modules/@superset-ui/embedded-sdk/lib/index.js", "../../../node_modules/html5-qrcode/third_party/zxing-js.umd.js", "../../../node_modules/tom-select/src/contrib/microevent.ts", "../../../node_modules/tom-select/src/contrib/microplugin.ts", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/regex.js", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/strings.js", "../../../node_modules/tom-select/node_modules/@orchidjs/unicode-variants/dist/esm/index.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/dist/esm/utils.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/dist/esm/sifter.js", "../../../node_modules/tom-select/node_modules/@orchidjs/sifter/lib/utils.ts", "../../../node_modules/tom-select/src/vanilla.ts", "../../../node_modules/tom-select/src/contrib/highlight.ts", "../../../node_modules/tom-select/src/constants.ts", "../../../node_modules/tom-select/src/defaults.ts", "../../../node_modules/tom-select/src/utils.ts", "../../../node_modules/tom-select/src/getSettings.ts", "../../../node_modules/tom-select/src/tom-select.ts", "../../../node_modules/tom-select/src/plugins/change_listener/plugin.ts", "../../../node_modules/tom-select/src/plugins/checkbox_options/plugin.ts", "../../../node_modules/tom-select/src/plugins/clear_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/drag_drop/plugin.ts", "../../../node_modules/tom-select/src/plugins/dropdown_header/plugin.ts", "../../../node_modules/tom-select/src/plugins/caret_position/plugin.ts", "../../../node_modules/tom-select/src/plugins/dropdown_input/plugin.ts", "../../../node_modules/tom-select/src/plugins/input_autogrow/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_backspace_delete/plugin.ts", "../../../node_modules/tom-select/src/plugins/no_active_items/plugin.ts", "../../../node_modules/tom-select/src/plugins/optgroup_columns/plugin.ts", "../../../node_modules/tom-select/src/plugins/remove_button/plugin.ts", "../../../node_modules/tom-select/src/plugins/restore_on_backspace/plugin.ts", "../../../node_modules/tom-select/src/plugins/virtual_scroll/plugin.ts", "../../../node_modules/tom-select/src/tom-select.complete.ts", "../../../node_modules/flatpickr/dist/flatpickr.js", "../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/flowbite/dist/webpack:/webpack/universalModuleDefinition", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/modifiers/index.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/flowbite/dist/webpack:/node_modules/@popperjs/core/lib/index.js", "../../../node_modules/flowbite/dist/webpack:/src/components/accordion/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/carousel/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/clipboard/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/collapse/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/dial/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/dismiss/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/drawer/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/dropdown/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/input-counter/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/modal/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/popover/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/tabs/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/components/tooltip/index.ts", "../../../node_modules/flowbite/dist/webpack:/src/dom/events.ts", "../../../node_modules/flowbite/dist/webpack:/src/dom/instances.ts", "../../../node_modules/flowbite/dist/webpack:/webpack/bootstrap", "../../../node_modules/flowbite/dist/webpack:/webpack/runtime/define property getters", "../../../node_modules/flowbite/dist/webpack:/webpack/runtime/hasOwnProperty shorthand", "../../../node_modules/flowbite/dist/webpack:/webpack/runtime/make namespace object", "../../../node_modules/flowbite/dist/webpack:/src/index.turbo.ts", "../../../node_modules/jquery/dist/jquery.js", "../../../node_modules/sifter/sifter.js", "../../../node_modules/microplugin/src/microplugin.js", "../../../node_modules/selectize/dist/js/selectize.js", "../../../node_modules/moment/moment.js", "../../../node_modules/moment-timezone/moment-timezone.js", "../../../node_modules/moment-timezone/index.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.mjs", "../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.mjs", "../../../node_modules/date-fns/locale/en-US/_lib/formatLong.mjs", "../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.mjs", "../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.mjs", "../../../node_modules/date-fns/locale/en-US/_lib/localize.mjs", "../../../node_modules/date-fns/locale/_lib/buildMatchFn.mjs", "../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.mjs", "../../../node_modules/date-fns/locale/en-US/_lib/match.mjs", "../../../node_modules/date-fns/locale/en-US.mjs", "../../../node_modules/date-fns/_lib/defaultOptions.mjs", "../../../node_modules/date-fns/constants.mjs", "../../../node_modules/date-fns/toDate.mjs", "../../../node_modules/date-fns/startOfDay.mjs", "../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.mjs", "../../../node_modules/date-fns/differenceInCalendarDays.mjs", "../../../node_modules/date-fns/constructFrom.mjs", "../../../node_modules/date-fns/startOfYear.mjs", "../../../node_modules/date-fns/getDayOfYear.mjs", "../../../node_modules/date-fns/startOfWeek.mjs", "../../../node_modules/date-fns/startOfISOWeek.mjs", "../../../node_modules/date-fns/getISOWeekYear.mjs", "../../../node_modules/date-fns/startOfISOWeekYear.mjs", "../../../node_modules/date-fns/getISOWeek.mjs", "../../../node_modules/date-fns/getWeekYear.mjs", "../../../node_modules/date-fns/startOfWeekYear.mjs", "../../../node_modules/date-fns/getWeek.mjs", "../../../node_modules/date-fns/_lib/addLeadingZeros.mjs", "../../../node_modules/date-fns/_lib/format/lightFormatters.mjs", "../../../node_modules/date-fns/_lib/format/formatters.mjs", "../../../node_modules/date-fns/_lib/format/longFormatters.mjs", "../../../node_modules/date-fns/_lib/protectedTokens.mjs", "../../../node_modules/date-fns/isDate.mjs", "../../../node_modules/date-fns/isValid.mjs", "../../../node_modules/date-fns/format.mjs", "../../../node_modules/date-fns-tz/dist/esm/_lib/tzTokenizeDate/index.js", "../../../node_modules/date-fns-tz/dist/esm/_lib/newDateUTC/index.js", "../../../node_modules/date-fns-tz/dist/esm/_lib/tzParseTimezone/index.js", "../../../node_modules/date-fns-tz/dist/esm/format/formatters/index.js", "../../../node_modules/date-fns-tz/dist/esm/_lib/getTimezoneOffsetInMilliseconds/index.js", "../../../node_modules/date-fns-tz/dist/esm/_lib/tzPattern/index.js", "../../../node_modules/date-fns-tz/dist/esm/toDate/index.js", "../../../node_modules/date-fns-tz/dist/esm/toZonedTime/index.js", "../../javascript/utils/chart.js", "../../../node_modules/@kurkle/color/dist/color.esm.js", "../../../node_modules/chart.js/src/helpers/helpers.core.ts", "../../../node_modules/chart.js/src/helpers/helpers.math.ts", "../../../node_modules/chart.js/src/helpers/helpers.collection.ts", "../../../node_modules/chart.js/src/helpers/helpers.extras.ts", "../../../node_modules/chart.js/src/helpers/helpers.easing.ts", "../../../node_modules/chart.js/src/helpers/helpers.color.ts", "../../../node_modules/chart.js/src/core/core.animations.defaults.js", "../../../node_modules/chart.js/src/core/core.layouts.defaults.js", "../../../node_modules/chart.js/src/helpers/helpers.intl.ts", "../../../node_modules/chart.js/src/core/core.ticks.js", "../../../node_modules/chart.js/src/core/core.scale.defaults.js", "../../../node_modules/chart.js/src/core/core.defaults.js", "../../../node_modules/chart.js/src/helpers/helpers.canvas.ts", "../../../node_modules/chart.js/src/helpers/helpers.options.ts", "../../../node_modules/chart.js/src/helpers/helpers.config.ts", "../../../node_modules/chart.js/src/helpers/helpers.curve.ts", "../../../node_modules/chart.js/src/helpers/helpers.dom.ts", "../../../node_modules/chart.js/src/helpers/helpers.interpolation.ts", "../../../node_modules/chart.js/src/helpers/helpers.rtl.ts", "../../../node_modules/chart.js/src/helpers/helpers.segment.js", "../../../node_modules/chart.js/src/core/core.animator.js", "../../../node_modules/chart.js/src/core/core.animation.js", "../../../node_modules/chart.js/src/core/core.animations.js", "../../../node_modules/chart.js/src/core/core.datasetController.js", "../../../node_modules/chart.js/src/controllers/controller.bar.js", "../../../node_modules/chart.js/src/controllers/controller.bubble.js", "../../../node_modules/chart.js/src/controllers/controller.doughnut.js", "../../../node_modules/chart.js/src/controllers/controller.line.js", "../../../node_modules/chart.js/src/controllers/controller.polarArea.js", "../../../node_modules/chart.js/src/controllers/controller.pie.js", "../../../node_modules/chart.js/src/controllers/controller.radar.js", "../../../node_modules/chart.js/src/controllers/controller.scatter.js", "../../../node_modules/chart.js/src/core/core.adapters.ts", "../../../node_modules/chart.js/src/core/core.interaction.js", "../../../node_modules/chart.js/src/core/core.layouts.js", "../../../node_modules/chart.js/src/platform/platform.base.js", "../../../node_modules/chart.js/src/platform/platform.basic.js", "../../../node_modules/chart.js/src/platform/platform.dom.js", "../../../node_modules/chart.js/src/platform/index.js", "../../../node_modules/chart.js/src/core/core.element.ts", "../../../node_modules/chart.js/src/core/core.scale.autoskip.js", "../../../node_modules/chart.js/src/core/core.scale.js", "../../../node_modules/chart.js/src/core/core.typedRegistry.js", "../../../node_modules/chart.js/src/core/core.registry.js", "../../../node_modules/chart.js/src/core/core.plugins.js", "../../../node_modules/chart.js/src/core/core.config.js", "../../../node_modules/chart.js/src/core/core.controller.js", "../../../node_modules/chart.js/src/elements/element.arc.ts", "../../../node_modules/chart.js/src/elements/element.line.js", "../../../node_modules/chart.js/src/elements/element.point.ts", "../../../node_modules/chart.js/src/elements/element.bar.js", "../../../node_modules/chart.js/src/plugins/plugin.colors.ts", "../../../node_modules/chart.js/src/plugins/plugin.decimation.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.segment.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.helper.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.options.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.stack.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/simpleArc.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.target.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/filler.drawing.js", "../../../node_modules/chart.js/src/plugins/plugin.filler/index.js", "../../../node_modules/chart.js/src/plugins/plugin.legend.js", "../../../node_modules/chart.js/src/plugins/plugin.title.js", "../../../node_modules/chart.js/src/plugins/plugin.subtitle.js", "../../../node_modules/chart.js/src/plugins/plugin.tooltip.js", "../../../node_modules/chart.js/src/scales/scale.category.js", "../../../node_modules/chart.js/src/scales/scale.linearbase.js", "../../../node_modules/chart.js/src/scales/scale.linear.js", "../../../node_modules/chart.js/src/scales/scale.logarithmic.js", "../../../node_modules/chart.js/src/scales/scale.radialLinear.js", "../../../node_modules/chart.js/src/scales/scale.time.js", "../../../node_modules/chart.js/src/scales/scale.timeseries.js", "../../../node_modules/chart.js/src/index.ts", "../../../node_modules/chart.js/auto/auto.js", "../../../node_modules/date-fns/addDays.mjs", "../../../node_modules/date-fns/addMonths.mjs", "../../../node_modules/date-fns/addMilliseconds.mjs", "../../../node_modules/date-fns/addHours.mjs", "../../../node_modules/date-fns/addMinutes.mjs", "../../../node_modules/date-fns/addQuarters.mjs", "../../../node_modules/date-fns/addSeconds.mjs", "../../../node_modules/date-fns/addWeeks.mjs", "../../../node_modules/date-fns/addYears.mjs", "../../../node_modules/date-fns/compareAsc.mjs", "../../../node_modules/date-fns/differenceInCalendarMonths.mjs", "../../../node_modules/date-fns/differenceInCalendarYears.mjs", "../../../node_modules/date-fns/differenceInDays.mjs", "../../../node_modules/date-fns/_lib/getRoundingMethod.mjs", "../../../node_modules/date-fns/differenceInMilliseconds.mjs", "../../../node_modules/date-fns/differenceInHours.mjs", "../../../node_modules/date-fns/differenceInMinutes.mjs", "../../../node_modules/date-fns/endOfDay.mjs", "../../../node_modules/date-fns/endOfMonth.mjs", "../../../node_modules/date-fns/isLastDayOfMonth.mjs", "../../../node_modules/date-fns/differenceInMonths.mjs", "../../../node_modules/date-fns/differenceInQuarters.mjs", "../../../node_modules/date-fns/differenceInSeconds.mjs", "../../../node_modules/date-fns/differenceInWeeks.mjs", "../../../node_modules/date-fns/differenceInYears.mjs", "../../../node_modules/date-fns/startOfMinute.mjs", "../../../node_modules/date-fns/startOfQuarter.mjs", "../../../node_modules/date-fns/startOfMonth.mjs", "../../../node_modules/date-fns/endOfYear.mjs", "../../../node_modules/date-fns/endOfHour.mjs", "../../../node_modules/date-fns/endOfWeek.mjs", "../../../node_modules/date-fns/endOfMinute.mjs", "../../../node_modules/date-fns/endOfQuarter.mjs", "../../../node_modules/date-fns/endOfSecond.mjs", "../../../node_modules/date-fns/getDefaultOptions.mjs", "../../../node_modules/date-fns/getISODay.mjs", "../../../node_modules/date-fns/transpose.mjs", "../../../node_modules/date-fns/parse/_lib/Setter.mjs", "../../../node_modules/date-fns/parse/_lib/Parser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/EraParser.mjs", "../../../node_modules/date-fns/parse/_lib/constants.mjs", "../../../node_modules/date-fns/parse/_lib/utils.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/YearParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/QuarterParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/MonthParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.mjs", "../../../node_modules/date-fns/setWeek.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.mjs", "../../../node_modules/date-fns/setISOWeek.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/DateParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.mjs", "../../../node_modules/date-fns/setDay.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/DayParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/LocalDayParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.mjs", "../../../node_modules/date-fns/setISODay.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/ISODayParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/AMPMParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/MinuteParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/SecondParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.mjs", "../../../node_modules/date-fns/parse/_lib/parsers.mjs", "../../../node_modules/date-fns/parse.mjs", "../../../node_modules/date-fns/startOfHour.mjs", "../../../node_modules/date-fns/startOfSecond.mjs", "../../../node_modules/date-fns/parseISO.mjs", "../../../node_modules/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js", "../../javascript/controllers/charts_controller.js", "../../javascript/controllers/drag_drop_controller.js", "../../javascript/controllers/reports_controller.js", "../../javascript/controllers/shelter_setup_controller.js", "../../javascript/controllers/superset_dashboard_controller.js", "../../javascript/controllers/tabs_controller.js", "../../javascript/controllers/flash_controller.js", "../../javascript/controllers/vconn_assembly_setup_controller.js", "../../javascript/controllers/replacement_controller.js", "../../../node_modules/src/core.ts", "../../../node_modules/src/strings.ts", "../../../node_modules/src/utils.ts", "../../../node_modules/src/zxing-html5-qrcode-decoder.ts", "../../../node_modules/src/native-bar-code-detector.ts", "../../../node_modules/src/code-decoder.ts", "../../../node_modules/src/camera/core-impl.ts", "../../../node_modules/src/camera/factories.ts", "../../../node_modules/src/camera/retriever.ts", "../../../node_modules/src/state-manager.ts", "../../../node_modules/src/html5-qrcode.ts", "../../../node_modules/src/image-assets.ts", "../../../node_modules/src/storage.ts", "../../../node_modules/src/ui.ts", "../../../node_modules/src/camera/permissions.ts", "../../../node_modules/src/ui/scanner/scan-type-selector.ts", "../../../node_modules/src/ui/scanner/base.ts", "../../../node_modules/src/ui/scanner/torch-button.ts", "../../../node_modules/src/ui/scanner/file-selection-ui.ts", "../../../node_modules/src/ui/scanner/camera-selection-ui.ts", "../../../node_modules/src/ui/scanner/camera-zoom-ui.ts", "../../../node_modules/src/html5-qrcode-scanner.ts", "../../javascript/controllers/qr_scanner_controller.js", "../../javascript/controllers/drive_integration_controller.js", "../../javascript/controllers/workorders_controller.js", "../../../node_modules/flowbite/src/dom/events.ts", "../../../node_modules/flowbite/src/dom/instances.ts", "../../../node_modules/flowbite/src/components/accordion/index.ts", "../../../node_modules/flowbite/src/components/collapse/index.ts", "../../../node_modules/flowbite/src/components/carousel/index.ts", "../../../node_modules/flowbite/src/components/dismiss/index.ts", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/format.js", "../../../node_modules/@popperjs/core/lib/utils/validateModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/uniqueBy.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/flowbite/src/components/dropdown/index.ts", "../../../node_modules/flowbite/src/components/modal/index.ts", "../../../node_modules/flowbite/src/components/drawer/index.ts", "../../../node_modules/flowbite/src/components/tabs/index.ts", "../../../node_modules/flowbite/src/components/tooltip/index.ts", "../../../node_modules/flowbite/src/components/popover/index.ts", "../../../node_modules/flowbite/src/components/dial/index.ts", "../../../node_modules/flowbite/src/components/input-counter/index.ts", "../../../node_modules/flowbite/src/components/clipboard/index.ts", "../../../node_modules/flowbite/src/components/index.ts", "../../../node_modules/flowbite/src/index.ts", "../../javascript/controllers/carousel_controller.js", "../../javascript/controllers/field_qa_controller.js", "../../javascript/controllers/shelter_test_suite_controller.js", "../../javascript/controllers/redirect_qr_support_controller.js", "../../javascript/controllers/toggle_controller.js", "../../javascript/controllers/toplight_controls_controller.js", "../../javascript/controllers/dropdown_controller.js", "../../javascript/controllers/pdu_controls_controller.js", "../../javascript/controllers/workorder_comments_controller.js", "../../javascript/controllers/heartbeats_controller.js", "../../javascript/controllers/workorder_uploads_controller.js", "../../javascript/controllers/workorders_carousel_controller.js", "../../javascript/controllers/pair_shelter_controller.js", "../../javascript/controllers/custom_datepicker_controller.js", "../../javascript/controllers/shelter_selector_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/form_submissions.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js", "../../javascript/application.js", "../../javascript/utils/load_fancy_selects.js", "../../../node_modules/tranzito_utils_js/dist/time_parser.js", "../../../node_modules/tranzito_utils_js/utils/period_select.js", "../../../node_modules/tranzito_utils_js/dist/period_selector.js", "../../../node_modules/tranzito_utils_js/dist/pagination.js", "../../../node_modules/tranzito_utils_js/dist/dropdown_period_selector.js", "../../javascript/utils/location_card_templates.js", "../../javascript/utils/location_popup_templates.js"],
  "sourcesContent": ["\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.IFRAME_COMMS_MESSAGE_TYPE = exports.DASHBOARD_UI_FILTER_CONFIG_URL_PARAM_KEY = void 0;\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nconst IFRAME_COMMS_MESSAGE_TYPE = \"__embedded_comms__\";\nexports.IFRAME_COMMS_MESSAGE_TYPE = IFRAME_COMMS_MESSAGE_TYPE;\nconst DASHBOARD_UI_FILTER_CONFIG_URL_PARAM_KEY = {\n  visible: \"show_filters\",\n  expanded: \"expand_filters\"\n};\nexports.DASHBOARD_UI_FILTER_CONFIG_URL_PARAM_KEY = DASHBOARD_UI_FILTER_CONFIG_URL_PARAM_KEY;", "(function () {var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;enterModule && enterModule(module);})();var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {return a;};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Each message we send on the channel specifies an action we want the other side to cooperate with.\nvar Actions;(function (Actions) {Actions[\"GET\"] = \"get\";Actions[\"REPLY\"] = \"reply\";Actions[\"EMIT\"] = \"emit\";Actions[\"ERROR\"] = \"error\";})(Actions || (Actions = {}));\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction isGet(message) {\n  return message.switchboardAction === Actions.GET;\n}\n\n\n\n\n\n\n\nfunction isReply(message) {\n  return message.switchboardAction === Actions.REPLY;\n}\n\n\n\n\n\n\n\nfunction isEmit(message) {\n  return message.switchboardAction === Actions.EMIT;\n}\n\n\n\n\n\n\n\nfunction isError(message) {\n  return message.switchboardAction === Actions.ERROR;\n}\n\n/**\n * A utility for communications between an iframe and its parent, used by the Superset embedded SDK.\n * This builds useful patterns on top of the basic functionality offered by MessageChannel.\n *\n * Both windows instantiate a Switchboard, passing in their MessagePorts.\n * Calling methods on the switchboard causes messages to be sent through the channel.\n */\nexport class Switchboard {\n\n\n\n\n\n\n  // used to make unique ids\n\n\n\n\n\n\n  constructor(params) {this.port = void 0;this.name = '';this.methods = {};this.incrementor = 1;this.debugMode = void 0;this.isInitialised = void 0;\n    if (!params) {\n      return;\n    }\n    this.init(params);\n  }\n\n  init(params) {\n    if (this.isInitialised) {\n      this.logError('already initialized');\n      return;\n    }\n\n    const { port, name = 'switchboard', debug = false } = params;\n\n    this.port = port;\n    this.name = name;\n    this.debugMode = debug;\n\n    port.addEventListener('message', async (event) => {\n      this.log('message received', event);\n      const message = event.data;\n      if (isGet(message)) {\n        // find the method, call it, and reply with the result\n        this.port.postMessage(await this.getMethodResult(message));\n      } else if (isEmit(message)) {\n        const { method, args } = message;\n        // Find the method and call it, but no result necessary.\n        // Should this multicast to a set of listeners?\n        // Maybe, but that requires writing a bunch more code\n        // and I haven't found a need for it yet.\n        const executor = this.methods[method];\n        if (executor) {\n          executor(args);\n        }\n      }\n    });\n\n    this.isInitialised = true;\n  }\n\n  async getMethodResult(_ref)\n\n\n\n  {let { messageId, method, args } = _ref;\n    const executor = this.methods[method];\n    if (executor == null) {\n      return {\n        switchboardAction: Actions.ERROR,\n        messageId,\n        error: `[${this.name}] Method \"${method}\" is not defined` };\n\n    }\n    try {\n      const result = await executor(args);\n      return {\n        switchboardAction: Actions.REPLY,\n        messageId,\n        result };\n\n    } catch (err) {\n      this.logError(err);\n      return {\n        switchboardAction: Actions.ERROR,\n        messageId,\n        error: `[${this.name}] Method \"${method}\" threw an error` };\n\n    }\n  }\n\n  /**\n   * Defines a method that can be \"called\" from the other side by sending an event.\n   */\n  defineMethod(methodName, executor) {\n    this.methods[methodName] = executor;\n  }\n\n  /**\n   * Calls a method registered on the other side, and returns the result.\n   *\n   * How this is accomplished:\n   * This switchboard sends a \"get\" message over the channel describing which method to call with which arguments.\n   * The other side's switchboard finds a method with that name, and calls it with the arguments.\n   * It then packages up the returned value into a \"reply\" message, sending it back to us across the channel.\n   * This switchboard has attached a listener on the channel, which will resolve with the result when a reply is detected.\n   *\n   * Instead of an arguments list, arguments are supplied as a map.\n   *\n   * @param method the name of the method to call\n   * @param args arguments that will be supplied. Must be serializable, no functions or other nonense.\n   * @returns whatever is returned from the method\n   */\n  get(method, args) {if (args === void 0) {args = undefined;}\n    return new Promise((resolve, reject) => {\n      if (!this.isInitialised) {\n        reject(new Error('Switchboard not initialised'));\n        return;\n      }\n      // In order to \"call a method\" on the other side of the port,\n      // we will send a message with a unique id\n      const messageId = this.getNewMessageId();\n      // attach a new listener to our port, and remove it when we get a response\n      const listener = (event) => {\n        const message = event.data;\n        if (message.messageId !== messageId) return;\n        this.port.removeEventListener('message', listener);\n        if (isReply(message)) {\n          resolve(message.result);\n        } else {\n          const errStr = isError(message) ?\n          message.error :\n          'Unexpected response message';\n          reject(new Error(errStr));\n        }\n      };\n      this.port.addEventListener('message', listener);\n      this.port.start();\n      const message = {\n        switchboardAction: Actions.GET,\n        method,\n        messageId,\n        args };\n\n      this.port.postMessage(message);\n    });\n  }\n\n  /**\n   * Emit calls a method on the other side just like get does.\n   * But emit doesn't wait for a response, it just sends and forgets.\n   *\n   * @param method\n   * @param args\n   */\n  emit(method, args) {if (args === void 0) {args = undefined;}\n    if (!this.isInitialised) {\n      this.logError('Switchboard not initialised');\n      return;\n    }\n    const message = {\n      switchboardAction: Actions.EMIT,\n      method,\n      args };\n\n    this.port.postMessage(message);\n  }\n\n  start() {\n    if (!this.isInitialised) {\n      this.logError('Switchboard not initialised');\n      return;\n    }\n    this.port.start();\n  }\n\n  log() {\n    if (this.debugMode) {for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}\n      console.debug(`[${this.name}]`, ...args);\n    }\n  }\n\n  logError() {for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {args[_key2] = arguments[_key2];}\n    console.error(`[${this.name}]`, ...args);\n  }\n\n  getNewMessageId() {\n    // eslint-disable-next-line no-plusplus\n    return `m_${this.name}_${this.incrementor++}`;\n  } // @ts-ignore\n  __reactstandin__regenerateByEval(key, code) {// @ts-ignore\n    this[key] = eval(code);}}const _default =\nnew Switchboard();export default _default;;(function () {var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;if (!reactHotLoader) {return;}reactHotLoader.register(isGet, \"isGet\", \"/Users/ville/apple/apache-superset/superset-frontend/packages/superset-ui-switchboard/src/switchboard.ts\");reactHotLoader.register(isReply, \"isReply\", \"/Users/ville/apple/apache-superset/superset-frontend/packages/superset-ui-switchboard/src/switchboard.ts\");reactHotLoader.register(isEmit, \"isEmit\", \"/Users/ville/apple/apache-superset/superset-frontend/packages/superset-ui-switchboard/src/switchboard.ts\");reactHotLoader.register(isError, \"isError\", \"/Users/ville/apple/apache-superset/superset-frontend/packages/superset-ui-switchboard/src/switchboard.ts\");reactHotLoader.register(Switchboard, \"Switchboard\", \"/Users/ville/apple/apache-superset/superset-frontend/packages/superset-ui-switchboard/src/switchboard.ts\");reactHotLoader.register(_default, \"default\", \"/Users/ville/apple/apache-superset/superset-frontend/packages/superset-ui-switchboard/src/switchboard.ts\");})();;(function () {var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;leaveModule && leaveModule(module);})();", "(function () {var enterModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.enterModule : undefined;enterModule && enterModule(module);})();var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {return a;}; /*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n\nimport Switchboard from './switchboard';\n\nexport * from './switchboard';const _default =\nSwitchboard;export default _default;;(function () {var reactHotLoader = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default : undefined;if (!reactHotLoader) {return;}reactHotLoader.register(_default, \"default\", \"/Users/ville/apple/apache-superset/superset-frontend/packages/superset-ui-switchboard/src/index.ts\");})();;(function () {var leaveModule = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.leaveModule : undefined;leaveModule && leaveModule(module);})();", "/**\n * The code was extracted from:\n * https://github.com/davidchambers/Base64.js\n */\n\nvar chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\nfunction InvalidCharacterError(message) {\n    this.message = message;\n}\n\nInvalidCharacterError.prototype = new Error();\nInvalidCharacterError.prototype.name = \"InvalidCharacterError\";\n\nfunction polyfill(input) {\n    var str = String(input).replace(/=+$/, \"\");\n    if (str.length % 4 == 1) {\n        throw new InvalidCharacterError(\n            \"'atob' failed: The string to be decoded is not correctly encoded.\"\n        );\n    }\n    for (\n        // initialize result and counters\n        var bc = 0, bs, buffer, idx = 0, output = \"\";\n        // get next character\n        (buffer = str.charAt(idx++));\n        // character found in table? initialize bit storage and add its ascii value;\n        ~buffer &&\n        ((bs = bc % 4 ? bs * 64 + buffer : buffer),\n            // and if not first of each 4 characters,\n            // convert the first 8 bits to one ascii character\n            bc++ % 4) ?\n        (output += String.fromCharCode(255 & (bs >> ((-2 * bc) & 6)))) :\n        0\n    ) {\n        // try to find character in table (0-63, not found => -1)\n        buffer = chars.indexOf(buffer);\n    }\n    return output;\n}\n\nexport default (typeof window !== \"undefined\" &&\n    window.atob &&\n    window.atob.bind(window)) ||\npolyfill;", "import atob from \"./atob\";\n\nfunction b64DecodeUnicode(str) {\n    return decodeURIComponent(\n        atob(str).replace(/(.)/g, function(m, p) {\n            var code = p.charCodeAt(0).toString(16).toUpperCase();\n            if (code.length < 2) {\n                code = \"0\" + code;\n            }\n            return \"%\" + code;\n        })\n    );\n}\n\nexport default function(str) {\n    var output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    switch (output.length % 4) {\n        case 0:\n            break;\n        case 2:\n            output += \"==\";\n            break;\n        case 3:\n            output += \"=\";\n            break;\n        default:\n            throw \"Illegal base64url string!\";\n    }\n\n    try {\n        return b64DecodeUnicode(output);\n    } catch (err) {\n        return atob(output);\n    }\n}", "\"use strict\";\n\nimport base64_url_decode from \"./base64_url_decode\";\n\nexport function InvalidTokenError(message) {\n    this.message = message;\n}\n\nInvalidTokenError.prototype = new Error();\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\n\nexport default function(token, options) {\n    if (typeof token !== \"string\") {\n        throw new InvalidTokenError(\"Invalid token specified\");\n    }\n\n    options = options || {};\n    var pos = options.header === true ? 0 : 1;\n    try {\n        return JSON.parse(base64_url_decode(token.split(\".\")[pos]));\n    } catch (e) {\n        throw new InvalidTokenError(\"Invalid token specified: \" + e.message);\n    }\n}", "import jwtDecode, { InvalidTokenError } from \"./index\";\n\nconst wrapper = jwtDecode;\nwrapper.default = jwtDecode;\nwrapper.InvalidTokenError = InvalidTokenError;\nexport default wrapper;", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.REFRESH_TIMING_BUFFER_MS = exports.MIN_REFRESH_WAIT_MS = exports.DEFAULT_TOKEN_EXP_MS = void 0;\nexports.getGuestTokenRefreshTiming = getGuestTokenRefreshTiming;\n\nvar _jwtDecode = _interopRequireDefault(require(\"jwt-decode\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nconst REFRESH_TIMING_BUFFER_MS = 5000; // refresh guest token early to avoid failed superset requests\n\nexports.REFRESH_TIMING_BUFFER_MS = REFRESH_TIMING_BUFFER_MS;\nconst MIN_REFRESH_WAIT_MS = 10000; // avoid blasting requests as fast as the cpu can handle\n\nexports.MIN_REFRESH_WAIT_MS = MIN_REFRESH_WAIT_MS;\nconst DEFAULT_TOKEN_EXP_MS = 300000; // (5 min) used only when parsing guest token exp fails\n// when do we refresh the guest token?\n\nexports.DEFAULT_TOKEN_EXP_MS = DEFAULT_TOKEN_EXP_MS;\n\nfunction getGuestTokenRefreshTiming(currentGuestToken) {\n  const parsedJwt = (0, _jwtDecode.default)(currentGuestToken); // if exp is int, it is in seconds, but Date() takes milliseconds\n\n  const exp = new Date(/[^0-9\\.]/g.test(parsedJwt.exp) ? parsedJwt.exp : parseFloat(parsedJwt.exp) * 1000);\n  const isValidDate = exp.toString() !== 'Invalid Date';\n  const ttl = isValidDate ? Math.max(MIN_REFRESH_WAIT_MS, exp.getTime() - Date.now()) : DEFAULT_TOKEN_EXP_MS;\n  return ttl - REFRESH_TIMING_BUFFER_MS;\n}", "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.embedDashboard = embedDashboard;\n\nvar _const = require(\"./const\");\n\nvar _switchboard = require(\"@superset-ui/switchboard\");\n\nvar _guestTokenRefresh = require(\"./guestTokenRefresh\");\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements.  See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership.  The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License.  You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied.  See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n// We can swap this out for the actual switchboard package once it gets published\n\n/**\n * Embeds a Superset dashboard into the page using an iframe.\n */\nasync function embedDashboard(_ref) {\n  let {\n    id,\n    supersetDomain,\n    mountPoint,\n    fetchGuestToken,\n    dashboardUiConfig,\n    debug = false\n  } = _ref;\n\n  function log() {\n    if (debug) {\n      for (var _len = arguments.length, info = new Array(_len), _key = 0; _key < _len; _key++) {\n        info[_key] = arguments[_key];\n      }\n\n      console.debug(`[superset-embedded-sdk][dashboard ${id}]`, ...info);\n    }\n  }\n\n  log('embedding');\n\n  if (supersetDomain.endsWith(\"/\")) {\n    supersetDomain = supersetDomain.slice(0, -1);\n  }\n\n  function calculateConfig() {\n    let configNumber = 0;\n\n    if (dashboardUiConfig) {\n      if (dashboardUiConfig.hideTitle) {\n        configNumber += 1;\n      }\n\n      if (dashboardUiConfig.hideTab) {\n        configNumber += 2;\n      }\n\n      if (dashboardUiConfig.hideChartControls) {\n        configNumber += 8;\n      }\n    }\n\n    return configNumber;\n  }\n\n  async function mountIframe() {\n    return new Promise(resolve => {\n      const iframe = document.createElement('iframe');\n      const dashboardConfig = dashboardUiConfig ? `?uiConfig=${calculateConfig()}` : \"\";\n      const filterConfig = dashboardUiConfig?.filters || {};\n      const filterConfigKeys = Object.keys(filterConfig);\n      const filterConfigUrlParams = filterConfigKeys.length > 0 ? \"&\" + filterConfigKeys.map(key => _const.DASHBOARD_UI_FILTER_CONFIG_URL_PARAM_KEY[key] + '=' + filterConfig[key]).join('&') : \"\"; // set up the iframe's sandbox configuration\n\n      iframe.sandbox.add(\"allow-same-origin\"); // needed for postMessage to work\n\n      iframe.sandbox.add(\"allow-scripts\"); // obviously the iframe needs scripts\n\n      iframe.sandbox.add(\"allow-presentation\"); // for fullscreen charts\n\n      iframe.sandbox.add(\"allow-downloads\"); // for downloading charts as image\n\n      iframe.sandbox.add(\"allow-forms\"); // for forms to submit\n\n      iframe.sandbox.add(\"allow-popups\"); // for exporting charts as csv\n      // add these if it turns out we need them:\n      // iframe.sandbox.add(\"allow-top-navigation\");\n      // add the event listener before setting src, to be 100% sure that we capture the load event\n\n      iframe.addEventListener('load', () => {\n        // MessageChannel allows us to send and receive messages smoothly between our window and the iframe\n        // See https://developer.mozilla.org/en-US/docs/Web/API/Channel_Messaging_API\n        const commsChannel = new MessageChannel();\n        const ourPort = commsChannel.port1;\n        const theirPort = commsChannel.port2; // Send one of the message channel ports to the iframe to initialize embedded comms\n        // See https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage\n        // we know the content window isn't null because we are in the load event handler.\n\n        iframe.contentWindow.postMessage({\n          type: _const.IFRAME_COMMS_MESSAGE_TYPE,\n          handshake: \"port transfer\"\n        }, supersetDomain, [theirPort]);\n        log('sent message channel to the iframe'); // return our port from the promise\n\n        resolve(new _switchboard.Switchboard({\n          port: ourPort,\n          name: 'superset-embedded-sdk',\n          debug\n        }));\n      });\n      iframe.src = `${supersetDomain}/embedded/${id}${dashboardConfig}${filterConfigUrlParams}`; //@ts-ignore\n\n      mountPoint.replaceChildren(iframe);\n      log('placed the iframe');\n    });\n  }\n\n  const [guestToken, ourPort] = await Promise.all([fetchGuestToken(), mountIframe()]);\n  ourPort.emit('guestToken', {\n    guestToken\n  });\n  log('sent guest token');\n\n  async function refreshGuestToken() {\n    const newGuestToken = await fetchGuestToken();\n    ourPort.emit('guestToken', {\n      guestToken: newGuestToken\n    });\n    setTimeout(refreshGuestToken, (0, _guestTokenRefresh.getGuestTokenRefreshTiming)(newGuestToken));\n  }\n\n  setTimeout(refreshGuestToken, (0, _guestTokenRefresh.getGuestTokenRefreshTiming)(guestToken));\n\n  function unmount() {\n    log('unmounting'); //@ts-ignore\n\n    mountPoint.replaceChildren();\n  }\n\n  const getScrollSize = () => ourPort.get('getScrollSize');\n\n  const getDashboardPermalink = anchor => ourPort.get('getDashboardPermalink', {\n    anchor\n  });\n\n  const getActiveTabs = () => ourPort.get('getActiveTabs');\n\n  return {\n    getScrollSize,\n    unmount,\n    getDashboardPermalink,\n    getActiveTabs\n  };\n}", "(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ZXing = {}));\n}(this, (function (exports) { 'use strict';\n\n    function isNullOrUndefined(obj) {\n        return obj === null || obj === undefined;\n    }\n\n    /*\n     * Copyright 2008 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /* global Reflect, Promise */\n\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\n    function __extends(d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    }\n\n    function fixProto(target, prototype) {\n        var setPrototypeOf = Object.setPrototypeOf;\n        setPrototypeOf ? setPrototypeOf(target, prototype) : (target.__proto__ = prototype);\n    }\n\n    function fixStack(target, fn) {\n        if (fn === void 0) {\n            fn = target.constructor;\n        }\n        var captureStackTrace = Error.captureStackTrace;\n        captureStackTrace && captureStackTrace(target, fn);\n    }\n\n    var CustomError = (function (_super) {\n        __extends(CustomError, _super);\n        function CustomError(message) {\n            var _newTarget = this.constructor;\n            var _this = _super.call(this, message) || this;\n            Object.defineProperty(_this, 'name', {\n                value: _newTarget.name,\n                enumerable: false\n            });\n            fixProto(_this, _newTarget.prototype);\n            fixStack(_this);\n            return _this;\n        }\n        \n        return CustomError;\n    })(Error);\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class Exception extends CustomError {\n        /**\n         * Allows Exception to be constructed directly\n         * with some message and prototype definition.\n         */\n        constructor(message = undefined) {\n            super(message);\n            this.message = message;\n        }\n        getKind() {\n            const ex = this.constructor;\n            return ex.kind;\n        }\n    }\n    /**\n     * It's typed as string so it can be extended and overriden.\n     */\n    Exception.kind = 'Exception';\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ArgumentException extends Exception {\n    }\n    ArgumentException.kind = 'ArgumentException';\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class IllegalArgumentException extends Exception {\n    }\n    IllegalArgumentException.kind = 'IllegalArgumentException';\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    class BinaryBitmap {\n        constructor(binarizer) {\n            this.binarizer = binarizer;\n            if (binarizer === null) {\n                throw new IllegalArgumentException('Binarizer must be non-null.');\n            }\n        }\n        /**\n         * @return The width of the bitmap.\n         */\n        getWidth() {\n            return this.binarizer.getWidth();\n        }\n        /**\n         * @return The height of the bitmap.\n         */\n        getHeight() {\n            return this.binarizer.getHeight();\n        }\n        /**\n         * Converts one row of luminance data to 1 bit data. May actually do the conversion, or return\n         * cached data. Callers should assume this method is expensive and call it as seldom as possible.\n         * This method is intended for decoding 1D barcodes and may choose to apply sharpening.\n         *\n         * @param y The row to fetch, which must be in [0, bitmap height)\n         * @param row An optional preallocated array. If null or too small, it will be ignored.\n         *            If used, the Binarizer will call BitArray.clear(). Always use the returned object.\n         * @return The array of bits for this row (true means black).\n         * @throws NotFoundException if row can't be binarized\n         */\n        getBlackRow(y /*int*/, row) {\n            return this.binarizer.getBlackRow(y, row);\n        }\n        /**\n         * Converts a 2D array of luminance data to 1 bit. As above, assume this method is expensive\n         * and do not call it repeatedly. This method is intended for decoding 2D barcodes and may or\n         * may not apply sharpening. Therefore, a row from this matrix may not be identical to one\n         * fetched using getBlackRow(), so don't mix and match between them.\n         *\n         * @return The 2D array of bits for the image (true means black).\n         * @throws NotFoundException if image can't be binarized to make a matrix\n         */\n        getBlackMatrix() {\n            // The matrix is created on demand the first time it is requested, then cached. There are two\n            // reasons for this:\n            // 1. This work will never be done if the caller only installs 1D Reader objects, or if a\n            //    1D Reader finds a barcode before the 2D Readers run.\n            // 2. This work will only be done once even if the caller installs multiple 2D Readers.\n            if (this.matrix === null || this.matrix === undefined) {\n                this.matrix = this.binarizer.getBlackMatrix();\n            }\n            return this.matrix;\n        }\n        /**\n         * @return Whether this bitmap can be cropped.\n         */\n        isCropSupported() {\n            return this.binarizer.getLuminanceSource().isCropSupported();\n        }\n        /**\n         * Returns a new object with cropped image data. Implementations may keep a reference to the\n         * original data rather than a copy. Only callable if isCropSupported() is true.\n         *\n         * @param left The left coordinate, which must be in [0,getWidth())\n         * @param top The top coordinate, which must be in [0,getHeight())\n         * @param width The width of the rectangle to crop.\n         * @param height The height of the rectangle to crop.\n         * @return A cropped version of this object.\n         */\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            const newSource = this.binarizer.getLuminanceSource().crop(left, top, width, height);\n            return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n        }\n        /**\n         * @return Whether this bitmap supports counter-clockwise rotation.\n         */\n        isRotateSupported() {\n            return this.binarizer.getLuminanceSource().isRotateSupported();\n        }\n        /**\n         * Returns a new object with rotated image data by 90 degrees counterclockwise.\n         * Only callable if {@link #isRotateSupported()} is true.\n         *\n         * @return A rotated version of this object.\n         */\n        rotateCounterClockwise() {\n            const newSource = this.binarizer.getLuminanceSource().rotateCounterClockwise();\n            return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n        }\n        /**\n         * Returns a new object with rotated image data by 45 degrees counterclockwise.\n         * Only callable if {@link #isRotateSupported()} is true.\n         *\n         * @return A rotated version of this object.\n         */\n        rotateCounterClockwise45() {\n            const newSource = this.binarizer.getLuminanceSource().rotateCounterClockwise45();\n            return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n        }\n        /*@Override*/\n        toString() {\n            try {\n                return this.getBlackMatrix().toString();\n            }\n            catch (e /*: NotFoundException*/) {\n                return '';\n            }\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ChecksumException extends Exception {\n        static getChecksumInstance() {\n            return new ChecksumException();\n        }\n    }\n    ChecksumException.kind = 'ChecksumException';\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This class hierarchy provides a set of methods to convert luminance data to 1 bit data.\n     * It allows the algorithm to vary polymorphically, for example allowing a very expensive\n     * thresholding technique for servers and a fast one for mobile. It also permits the implementation\n     * to vary, e.g. a JNI version for Android and a Java fallback version for other platforms.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class Binarizer {\n        constructor(source) {\n            this.source = source;\n        }\n        getLuminanceSource() {\n            return this.source;\n        }\n        getWidth() {\n            return this.source.getWidth();\n        }\n        getHeight() {\n            return this.source.getHeight();\n        }\n    }\n\n    class System {\n        // public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)\n        /**\n         * Makes a copy of a array.\n         */\n        static arraycopy(src, srcPos, dest, destPos, length) {\n            // TODO: better use split or set?\n            while (length--) {\n                dest[destPos++] = src[srcPos++];\n            }\n        }\n        /**\n         * Returns the current time in milliseconds.\n         */\n        static currentTimeMillis() {\n            return Date.now();\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class IndexOutOfBoundsException extends Exception {\n    }\n    IndexOutOfBoundsException.kind = 'IndexOutOfBoundsException';\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException {\n        constructor(index = undefined, message = undefined) {\n            super(message);\n            this.index = index;\n            this.message = message;\n        }\n    }\n    ArrayIndexOutOfBoundsException.kind = 'ArrayIndexOutOfBoundsException';\n\n    class Arrays {\n        /**\n         * Assigns the specified int value to each element of the specified array\n         * of ints.\n         *\n         * @param a the array to be filled\n         * @param val the value to be stored in all elements of the array\n         */\n        static fill(a, val) {\n            for (let i = 0, len = a.length; i < len; i++)\n                a[i] = val;\n        }\n        /**\n         * Assigns the specified int value to each element of the specified\n         * range of the specified array of ints.  The range to be filled\n         * extends from index {@code fromIndex}, inclusive, to index\n         * {@code toIndex}, exclusive.  (If {@code fromIndex==toIndex}, the\n         * range to be filled is empty.)\n         *\n         * @param a the array to be filled\n         * @param fromIndex the index of the first element (inclusive) to be\n         *        filled with the specified value\n         * @param toIndex the index of the last element (exclusive) to be\n         *        filled with the specified value\n         * @param val the value to be stored in all elements of the array\n         * @throws IllegalArgumentException if {@code fromIndex > toIndex}\n         * @throws ArrayIndexOutOfBoundsException if {@code fromIndex < 0} or\n         *         {@code toIndex > a.length}\n         */\n        static fillWithin(a, fromIndex, toIndex, val) {\n            Arrays.rangeCheck(a.length, fromIndex, toIndex);\n            for (let i = fromIndex; i < toIndex; i++)\n                a[i] = val;\n        }\n        /**\n         * Checks that {@code fromIndex} and {@code toIndex} are in\n         * the range and throws an exception if they aren't.\n         */\n        static rangeCheck(arrayLength, fromIndex, toIndex) {\n            if (fromIndex > toIndex) {\n                throw new IllegalArgumentException('fromIndex(' + fromIndex + ') > toIndex(' + toIndex + ')');\n            }\n            if (fromIndex < 0) {\n                throw new ArrayIndexOutOfBoundsException(fromIndex);\n            }\n            if (toIndex > arrayLength) {\n                throw new ArrayIndexOutOfBoundsException(toIndex);\n            }\n        }\n        static asList(...args) {\n            return args;\n        }\n        static create(rows, cols, value) {\n            let arr = Array.from({ length: rows });\n            return arr.map(x => Array.from({ length: cols }).fill(value));\n        }\n        static createInt32Array(rows, cols, value) {\n            let arr = Array.from({ length: rows });\n            return arr.map(x => Int32Array.from({ length: cols }).fill(value));\n        }\n        static equals(first, second) {\n            if (!first) {\n                return false;\n            }\n            if (!second) {\n                return false;\n            }\n            if (!first.length) {\n                return false;\n            }\n            if (!second.length) {\n                return false;\n            }\n            if (first.length !== second.length) {\n                return false;\n            }\n            for (let i = 0, length = first.length; i < length; i++) {\n                if (first[i] !== second[i]) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        static hashCode(a) {\n            if (a === null) {\n                return 0;\n            }\n            let result = 1;\n            for (const element of a) {\n                result = 31 * result + element;\n            }\n            return result;\n        }\n        static fillUint8Array(a, value) {\n            for (let i = 0; i !== a.length; i++) {\n                a[i] = value;\n            }\n        }\n        static copyOf(original, newLength) {\n            return original.slice(0, newLength);\n        }\n        static copyOfUint8Array(original, newLength) {\n            if (original.length <= newLength) {\n                const newArray = new Uint8Array(newLength);\n                newArray.set(original);\n                return newArray;\n            }\n            return original.slice(0, newLength);\n        }\n        static copyOfRange(original, from, to) {\n            const newLength = to - from;\n            const copy = new Int32Array(newLength);\n            System.arraycopy(original, from, copy, 0, newLength);\n            return copy;\n        }\n        /*\n        * Returns the index of of the element in a sorted array or (-n-1) where n is the insertion point\n        * for the new element.\n        * Parameters:\n        *     ar - A sorted array\n        *     el - An element to search for\n        *     comparator - A comparator function. The function takes two arguments: (a, b) and returns:\n        *        a negative number  if a is less than b;\n        *        0 if a is equal to b;\n        *        a positive number of a is greater than b.\n        * The array may contain duplicate elements. If there are more than one equal elements in the array,\n        * the returned value can be the index of any one of the equal elements.\n        *\n        * http://jsfiddle.net/aryzhov/pkfst550/\n        */\n        static binarySearch(ar, el, comparator) {\n            if (undefined === comparator) {\n                comparator = Arrays.numberComparator;\n            }\n            let m = 0;\n            let n = ar.length - 1;\n            while (m <= n) {\n                const k = (n + m) >> 1;\n                const cmp = comparator(el, ar[k]);\n                if (cmp > 0) {\n                    m = k + 1;\n                }\n                else if (cmp < 0) {\n                    n = k - 1;\n                }\n                else {\n                    return k;\n                }\n            }\n            return -m - 1;\n        }\n        static numberComparator(a, b) {\n            return a - b;\n        }\n    }\n\n    /**\n     * Ponyfill for Java's Integer class.\n     */\n    class Integer {\n        static numberOfTrailingZeros(i) {\n            let y;\n            if (i === 0)\n                return 32;\n            let n = 31;\n            y = i << 16;\n            if (y !== 0) {\n                n -= 16;\n                i = y;\n            }\n            y = i << 8;\n            if (y !== 0) {\n                n -= 8;\n                i = y;\n            }\n            y = i << 4;\n            if (y !== 0) {\n                n -= 4;\n                i = y;\n            }\n            y = i << 2;\n            if (y !== 0) {\n                n -= 2;\n                i = y;\n            }\n            return n - ((i << 1) >>> 31);\n        }\n        static numberOfLeadingZeros(i) {\n            // HD, Figure 5-6\n            if (i === 0) {\n                return 32;\n            }\n            let n = 1;\n            if (i >>> 16 === 0) {\n                n += 16;\n                i <<= 16;\n            }\n            if (i >>> 24 === 0) {\n                n += 8;\n                i <<= 8;\n            }\n            if (i >>> 28 === 0) {\n                n += 4;\n                i <<= 4;\n            }\n            if (i >>> 30 === 0) {\n                n += 2;\n                i <<= 2;\n            }\n            n -= i >>> 31;\n            return n;\n        }\n        static toHexString(i) {\n            return i.toString(16);\n        }\n        static toBinaryString(intNumber) {\n            return String(parseInt(String(intNumber), 2));\n        }\n        // Returns the number of one-bits in the two's complement binary representation of the specified int value. This function is sometimes referred to as the population count.\n        // Returns:\n        // the number of one-bits in the two's complement binary representation of the specified int value.\n        static bitCount(i) {\n            // HD, Figure 5-2\n            i = i - ((i >>> 1) & 0x55555555);\n            i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);\n            i = (i + (i >>> 4)) & 0x0f0f0f0f;\n            i = i + (i >>> 8);\n            i = i + (i >>> 16);\n            return i & 0x3f;\n        }\n        static truncDivision(dividend, divisor) {\n            return Math.trunc(dividend / divisor);\n        }\n        /**\n         * Converts A string to an integer.\n         * @param s A string to convert into a number.\n         * @param radix A value between 2 and 36 that specifies the base of the number in numString. If this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal. All other strings are considered decimal.\n         */\n        static parseInt(num, radix = undefined) {\n            return parseInt(num, radix);\n        }\n    }\n    Integer.MIN_VALUE_32_BITS = -2147483648;\n    Integer.MAX_VALUE = Number.MAX_SAFE_INTEGER;\n\n    /**\n     * <p>A simple, fast array of bits, represented compactly by an array of ints internally.</p>\n     *\n     * @author Sean Owen\n     */\n    class BitArray /*implements Cloneable*/ {\n        // For testing only\n        constructor(size /*int*/, bits) {\n            if (undefined === size) {\n                this.size = 0;\n                this.bits = new Int32Array(1);\n            }\n            else {\n                this.size = size;\n                if (undefined === bits || null === bits) {\n                    this.bits = BitArray.makeArray(size);\n                }\n                else {\n                    this.bits = bits;\n                }\n            }\n        }\n        getSize() {\n            return this.size;\n        }\n        getSizeInBytes() {\n            return Math.floor((this.size + 7) / 8);\n        }\n        ensureCapacity(size /*int*/) {\n            if (size > this.bits.length * 32) {\n                const newBits = BitArray.makeArray(size);\n                System.arraycopy(this.bits, 0, newBits, 0, this.bits.length);\n                this.bits = newBits;\n            }\n        }\n        /**\n         * @param i bit to get\n         * @return true iff bit i is set\n         */\n        get(i /*int*/) {\n            return (this.bits[Math.floor(i / 32)] & (1 << (i & 0x1F))) !== 0;\n        }\n        /**\n         * Sets bit i.\n         *\n         * @param i bit to set\n         */\n        set(i /*int*/) {\n            this.bits[Math.floor(i / 32)] |= 1 << (i & 0x1F);\n        }\n        /**\n         * Flips bit i.\n         *\n         * @param i bit to set\n         */\n        flip(i /*int*/) {\n            this.bits[Math.floor(i / 32)] ^= 1 << (i & 0x1F);\n        }\n        /**\n         * @param from first bit to check\n         * @return index of first bit that is set, starting from the given index, or size if none are set\n         *  at or beyond this given index\n         * @see #getNextUnset(int)\n         */\n        getNextSet(from /*int*/) {\n            const size = this.size;\n            if (from >= size) {\n                return size;\n            }\n            const bits = this.bits;\n            let bitsOffset = Math.floor(from / 32);\n            let currentBits = bits[bitsOffset];\n            // mask off lesser bits first\n            currentBits &= ~((1 << (from & 0x1F)) - 1);\n            const length = bits.length;\n            while (currentBits === 0) {\n                if (++bitsOffset === length) {\n                    return size;\n                }\n                currentBits = bits[bitsOffset];\n            }\n            const result = (bitsOffset * 32) + Integer.numberOfTrailingZeros(currentBits);\n            return result > size ? size : result;\n        }\n        /**\n         * @param from index to start looking for unset bit\n         * @return index of next unset bit, or {@code size} if none are unset until the end\n         * @see #getNextSet(int)\n         */\n        getNextUnset(from /*int*/) {\n            const size = this.size;\n            if (from >= size) {\n                return size;\n            }\n            const bits = this.bits;\n            let bitsOffset = Math.floor(from / 32);\n            let currentBits = ~bits[bitsOffset];\n            // mask off lesser bits first\n            currentBits &= ~((1 << (from & 0x1F)) - 1);\n            const length = bits.length;\n            while (currentBits === 0) {\n                if (++bitsOffset === length) {\n                    return size;\n                }\n                currentBits = ~bits[bitsOffset];\n            }\n            const result = (bitsOffset * 32) + Integer.numberOfTrailingZeros(currentBits);\n            return result > size ? size : result;\n        }\n        /**\n         * Sets a block of 32 bits, starting at bit i.\n         *\n         * @param i first bit to set\n         * @param newBits the new value of the next 32 bits. Note again that the least-significant bit\n         * corresponds to bit i, the next-least-significant to i+1, and so on.\n         */\n        setBulk(i /*int*/, newBits /*int*/) {\n            this.bits[Math.floor(i / 32)] = newBits;\n        }\n        /**\n         * Sets a range of bits.\n         *\n         * @param start start of range, inclusive.\n         * @param end end of range, exclusive\n         */\n        setRange(start /*int*/, end /*int*/) {\n            if (end < start || start < 0 || end > this.size) {\n                throw new IllegalArgumentException();\n            }\n            if (end === start) {\n                return;\n            }\n            end--; // will be easier to treat this as the last actually set bit -- inclusive\n            const firstInt = Math.floor(start / 32);\n            const lastInt = Math.floor(end / 32);\n            const bits = this.bits;\n            for (let i = firstInt; i <= lastInt; i++) {\n                const firstBit = i > firstInt ? 0 : start & 0x1F;\n                const lastBit = i < lastInt ? 31 : end & 0x1F;\n                // Ones from firstBit to lastBit, inclusive\n                const mask = (2 << lastBit) - (1 << firstBit);\n                bits[i] |= mask;\n            }\n        }\n        /**\n         * Clears all bits (sets to false).\n         */\n        clear() {\n            const max = this.bits.length;\n            const bits = this.bits;\n            for (let i = 0; i < max; i++) {\n                bits[i] = 0;\n            }\n        }\n        /**\n         * Efficient method to check if a range of bits is set, or not set.\n         *\n         * @param start start of range, inclusive.\n         * @param end end of range, exclusive\n         * @param value if true, checks that bits in range are set, otherwise checks that they are not set\n         * \n         * @return true iff all bits are set or not set in range, according to value argument\n         * @throws IllegalArgumentException if end is less than start or the range is not contained in the array\n         */\n        isRange(start /*int*/, end /*int*/, value) {\n            if (end < start || start < 0 || end > this.size) {\n                throw new IllegalArgumentException();\n            }\n            if (end === start) {\n                return true; // empty range matches\n            }\n            end--; // will be easier to treat this as the last actually set bit -- inclusive\n            const firstInt = Math.floor(start / 32);\n            const lastInt = Math.floor(end / 32);\n            const bits = this.bits;\n            for (let i = firstInt; i <= lastInt; i++) {\n                const firstBit = i > firstInt ? 0 : start & 0x1F;\n                const lastBit = i < lastInt ? 31 : end & 0x1F;\n                // Ones from firstBit to lastBit, inclusive\n                const mask = (2 << lastBit) - (1 << firstBit) & 0xFFFFFFFF;\n                // TYPESCRIPTPORT: & 0xFFFFFFFF added to discard anything after 32 bits, as ES has 53 bits\n                // Return false if we're looking for 1s and the masked bits[i] isn't all 1s (is: that,\n                // equals the mask, or we're looking for 0s and the masked portion is not all 0s\n                if ((bits[i] & mask) !== (value ? mask : 0)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        appendBit(bit) {\n            this.ensureCapacity(this.size + 1);\n            if (bit) {\n                this.bits[Math.floor(this.size / 32)] |= 1 << (this.size & 0x1F);\n            }\n            this.size++;\n        }\n        /**\n         * Appends the least-significant bits, from value, in order from most-significant to\n         * least-significant. For example, appending 6 bits from 0x000001E will append the bits\n         * 0, 1, 1, 1, 1, 0 in that order.\n         *\n         * @param value {@code int} containing bits to append\n         * @param numBits bits from value to append\n         */\n        appendBits(value /*int*/, numBits /*int*/) {\n            if (numBits < 0 || numBits > 32) {\n                throw new IllegalArgumentException('Num bits must be between 0 and 32');\n            }\n            this.ensureCapacity(this.size + numBits);\n            // const appendBit = this.appendBit;\n            for (let numBitsLeft = numBits; numBitsLeft > 0; numBitsLeft--) {\n                this.appendBit(((value >> (numBitsLeft - 1)) & 0x01) === 1);\n            }\n        }\n        appendBitArray(other) {\n            const otherSize = other.size;\n            this.ensureCapacity(this.size + otherSize);\n            // const appendBit = this.appendBit;\n            for (let i = 0; i < otherSize; i++) {\n                this.appendBit(other.get(i));\n            }\n        }\n        xor(other) {\n            if (this.size !== other.size) {\n                throw new IllegalArgumentException('Sizes don\\'t match');\n            }\n            const bits = this.bits;\n            for (let i = 0, length = bits.length; i < length; i++) {\n                // The last int could be incomplete (i.e. not have 32 bits in\n                // it) but there is no problem since 0 XOR 0 == 0.\n                bits[i] ^= other.bits[i];\n            }\n        }\n        /**\n         *\n         * @param bitOffset first bit to start writing\n         * @param array array to write into. Bytes are written most-significant byte first. This is the opposite\n         *  of the internal representation, which is exposed by {@link #getBitArray()}\n         * @param offset position in array to start writing\n         * @param numBytes how many bytes to write\n         */\n        toBytes(bitOffset /*int*/, array, offset /*int*/, numBytes /*int*/) {\n            for (let i = 0; i < numBytes; i++) {\n                let theByte = 0;\n                for (let j = 0; j < 8; j++) {\n                    if (this.get(bitOffset)) {\n                        theByte |= 1 << (7 - j);\n                    }\n                    bitOffset++;\n                }\n                array[offset + i] = /*(byte)*/ theByte;\n            }\n        }\n        /**\n         * @return underlying array of ints. The first element holds the first 32 bits, and the least\n         *         significant bit is bit 0.\n         */\n        getBitArray() {\n            return this.bits;\n        }\n        /**\n         * Reverses all bits in the array.\n         */\n        reverse() {\n            const newBits = new Int32Array(this.bits.length);\n            // reverse all int's first\n            const len = Math.floor((this.size - 1) / 32);\n            const oldBitsLen = len + 1;\n            const bits = this.bits;\n            for (let i = 0; i < oldBitsLen; i++) {\n                let x = bits[i];\n                x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1);\n                x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2);\n                x = ((x >> 4) & 0x0f0f0f0f) | ((x & 0x0f0f0f0f) << 4);\n                x = ((x >> 8) & 0x00ff00ff) | ((x & 0x00ff00ff) << 8);\n                x = ((x >> 16) & 0x0000ffff) | ((x & 0x0000ffff) << 16);\n                newBits[len - i] = /*(int)*/ x;\n            }\n            // now correct the int's if the bit size isn't a multiple of 32\n            if (this.size !== oldBitsLen * 32) {\n                const leftOffset = oldBitsLen * 32 - this.size;\n                let currentInt = newBits[0] >>> leftOffset;\n                for (let i = 1; i < oldBitsLen; i++) {\n                    const nextInt = newBits[i];\n                    currentInt |= nextInt << (32 - leftOffset);\n                    newBits[i - 1] = currentInt;\n                    currentInt = nextInt >>> leftOffset;\n                }\n                newBits[oldBitsLen - 1] = currentInt;\n            }\n            this.bits = newBits;\n        }\n        static makeArray(size /*int*/) {\n            return new Int32Array(Math.floor((size + 31) / 32));\n        }\n        /*@Override*/\n        equals(o) {\n            if (!(o instanceof BitArray)) {\n                return false;\n            }\n            const other = o;\n            return this.size === other.size && Arrays.equals(this.bits, other.bits);\n        }\n        /*@Override*/\n        hashCode() {\n            return 31 * this.size + Arrays.hashCode(this.bits);\n        }\n        /*@Override*/\n        toString() {\n            let result = '';\n            for (let i = 0, size = this.size; i < size; i++) {\n                if ((i & 0x07) === 0) {\n                    result += ' ';\n                }\n                result += this.get(i) ? 'X' : '.';\n            }\n            return result;\n        }\n        /*@Override*/\n        clone() {\n            return new BitArray(this.size, this.bits.slice());\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * Encapsulates a type of hint that a caller may pass to a barcode reader to help it\n     * more quickly or accurately decode it. It is up to implementations to decide what,\n     * if anything, to do with the information that is supplied.\n     *\n     * @author Sean Owen\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @see Reader#decode(BinaryBitmap,java.util.Map)\n     */\n    var DecodeHintType;\n    (function (DecodeHintType) {\n        /**\n         * Unspecified, application-specific hint. Maps to an unspecified {@link Object}.\n         */\n        DecodeHintType[DecodeHintType[\"OTHER\"] = 0] = \"OTHER\"; /*(Object.class)*/\n        /**\n         * Image is a pure monochrome image of a barcode. Doesn't matter what it maps to;\n         * use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"PURE_BARCODE\"] = 1] = \"PURE_BARCODE\"; /*(Void.class)*/\n        /**\n         * Image is known to be of one of a few possible formats.\n         * Maps to a {@link List} of {@link BarcodeFormat}s.\n         */\n        DecodeHintType[DecodeHintType[\"POSSIBLE_FORMATS\"] = 2] = \"POSSIBLE_FORMATS\"; /*(List.class)*/\n        /**\n         * Spend more time to try to find a barcode; optimize for accuracy, not speed.\n         * Doesn't matter what it maps to; use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"TRY_HARDER\"] = 3] = \"TRY_HARDER\"; /*(Void.class)*/\n        /**\n         * Specifies what character encoding to use when decoding, where applicable (type String)\n         */\n        DecodeHintType[DecodeHintType[\"CHARACTER_SET\"] = 4] = \"CHARACTER_SET\"; /*(String.class)*/\n        /**\n         * Allowed lengths of encoded data -- reject anything else. Maps to an {@code Int32Array}.\n         */\n        DecodeHintType[DecodeHintType[\"ALLOWED_LENGTHS\"] = 5] = \"ALLOWED_LENGTHS\"; /*(Int32Array.class)*/\n        /**\n         * Assume Code 39 codes employ a check digit. Doesn't matter what it maps to;\n         * use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"ASSUME_CODE_39_CHECK_DIGIT\"] = 6] = \"ASSUME_CODE_39_CHECK_DIGIT\"; /*(Void.class)*/\n        /**\n         * Assume the barcode is being processed as a GS1 barcode, and modify behavior as needed.\n         * For example this affects FNC1 handling for Code 128 (aka GS1-128). Doesn't matter what it maps to;\n         * use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"ASSUME_GS1\"] = 7] = \"ASSUME_GS1\"; /*(Void.class)*/\n        /**\n         * If true, return the start and end digits in a Codabar barcode instead of stripping them. They\n         * are alpha, whereas the rest are numeric. By default, they are stripped, but this causes them\n         * to not be. Doesn't matter what it maps to; use {@link Boolean#TRUE}.\n         */\n        DecodeHintType[DecodeHintType[\"RETURN_CODABAR_START_END\"] = 8] = \"RETURN_CODABAR_START_END\"; /*(Void.class)*/\n        /**\n         * The caller needs to be notified via callback when a possible {@link ResultPoint}\n         * is found. Maps to a {@link ResultPointCallback}.\n         */\n        DecodeHintType[DecodeHintType[\"NEED_RESULT_POINT_CALLBACK\"] = 9] = \"NEED_RESULT_POINT_CALLBACK\"; /*(ResultPointCallback.class)*/\n        /**\n         * Allowed extension lengths for EAN or UPC barcodes. Other formats will ignore this.\n         * Maps to an {@code Int32Array} of the allowed extension lengths, for example [2], [5], or [2, 5].\n         * If it is optional to have an extension, do not set this hint. If this is set,\n         * and a UPC or EAN barcode is found but an extension is not, then no result will be returned\n         * at all.\n         */\n        DecodeHintType[DecodeHintType[\"ALLOWED_EAN_EXTENSIONS\"] = 10] = \"ALLOWED_EAN_EXTENSIONS\"; /*(Int32Array.class)*/\n        // End of enumeration values.\n        /**\n         * Data type the hint is expecting.\n         * Among the possible values the {@link Void} stands out as being used for\n         * hints that do not expect a value to be supplied (flag hints). Such hints\n         * will possibly have their value ignored, or replaced by a\n         * {@link Boolean#TRUE}. Hint suppliers should probably use\n         * {@link Boolean#TRUE} as directed by the actual hint documentation.\n         */\n        // private valueType: Class<?>\n        // DecodeHintType(valueType: Class<?>) {\n        //   this.valueType = valueType\n        // }\n        // public getValueType(): Class<?> {\n        //   return valueType\n        // }\n    })(DecodeHintType || (DecodeHintType = {}));\n    var DecodeHintType$1 = DecodeHintType;\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class FormatException extends Exception {\n        static getFormatInstance() {\n            return new FormatException();\n        }\n    }\n    FormatException.kind = 'FormatException';\n\n    /*import java.util.HashMap;*/\n    /*import java.util.Map;*/\n    var CharacterSetValueIdentifiers;\n    (function (CharacterSetValueIdentifiers) {\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp437\"] = 0] = \"Cp437\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_1\"] = 1] = \"ISO8859_1\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_2\"] = 2] = \"ISO8859_2\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_3\"] = 3] = \"ISO8859_3\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_4\"] = 4] = \"ISO8859_4\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_5\"] = 5] = \"ISO8859_5\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_6\"] = 6] = \"ISO8859_6\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_7\"] = 7] = \"ISO8859_7\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_8\"] = 8] = \"ISO8859_8\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_9\"] = 9] = \"ISO8859_9\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_10\"] = 10] = \"ISO8859_10\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_11\"] = 11] = \"ISO8859_11\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_13\"] = 12] = \"ISO8859_13\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_14\"] = 13] = \"ISO8859_14\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_15\"] = 14] = \"ISO8859_15\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ISO8859_16\"] = 15] = \"ISO8859_16\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"SJIS\"] = 16] = \"SJIS\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1250\"] = 17] = \"Cp1250\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1251\"] = 18] = \"Cp1251\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1252\"] = 19] = \"Cp1252\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Cp1256\"] = 20] = \"Cp1256\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"UnicodeBigUnmarked\"] = 21] = \"UnicodeBigUnmarked\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"UTF8\"] = 22] = \"UTF8\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"ASCII\"] = 23] = \"ASCII\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"Big5\"] = 24] = \"Big5\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"GB18030\"] = 25] = \"GB18030\";\n        CharacterSetValueIdentifiers[CharacterSetValueIdentifiers[\"EUC_KR\"] = 26] = \"EUC_KR\";\n    })(CharacterSetValueIdentifiers || (CharacterSetValueIdentifiers = {}));\n    /**\n     * Encapsulates a Character Set ECI, according to \"Extended Channel Interpretations\" 5.3.1.1\n     * of ISO 18004.\n     *\n     * @author Sean Owen\n     */\n    class CharacterSetECI {\n        constructor(valueIdentifier, valuesParam, name, ...otherEncodingNames) {\n            this.valueIdentifier = valueIdentifier;\n            this.name = name;\n            if (typeof valuesParam === 'number') {\n                this.values = Int32Array.from([valuesParam]);\n            }\n            else {\n                this.values = valuesParam;\n            }\n            this.otherEncodingNames = otherEncodingNames;\n            CharacterSetECI.VALUE_IDENTIFIER_TO_ECI.set(valueIdentifier, this);\n            CharacterSetECI.NAME_TO_ECI.set(name, this);\n            const values = this.values;\n            for (let i = 0, length = values.length; i !== length; i++) {\n                const v = values[i];\n                CharacterSetECI.VALUES_TO_ECI.set(v, this);\n            }\n            for (const otherName of otherEncodingNames) {\n                CharacterSetECI.NAME_TO_ECI.set(otherName, this);\n            }\n        }\n        // CharacterSetECI(value: number /*int*/) {\n        //   this(new Int32Array {value})\n        // }\n        // CharacterSetECI(value: number /*int*/, String... otherEncodingNames) {\n        //   this.values = new Int32Array {value}\n        //   this.otherEncodingNames = otherEncodingNames\n        // }\n        // CharacterSetECI(values: Int32Array, String... otherEncodingNames) {\n        //   this.values = values\n        //   this.otherEncodingNames = otherEncodingNames\n        // }\n        getValueIdentifier() {\n            return this.valueIdentifier;\n        }\n        getName() {\n            return this.name;\n        }\n        getValue() {\n            return this.values[0];\n        }\n        /**\n         * @param value character set ECI value\n         * @return {@code CharacterSetECI} representing ECI of given value, or null if it is legal but\n         *   unsupported\n         * @throws FormatException if ECI value is invalid\n         */\n        static getCharacterSetECIByValue(value /*int*/) {\n            if (value < 0 || value >= 900) {\n                throw new FormatException('incorect value');\n            }\n            const characterSet = CharacterSetECI.VALUES_TO_ECI.get(value);\n            if (undefined === characterSet) {\n                throw new FormatException('incorect value');\n            }\n            return characterSet;\n        }\n        /**\n         * @param name character set ECI encoding name\n         * @return CharacterSetECI representing ECI for character encoding, or null if it is legal\n         *   but unsupported\n         */\n        static getCharacterSetECIByName(name) {\n            const characterSet = CharacterSetECI.NAME_TO_ECI.get(name);\n            if (undefined === characterSet) {\n                throw new FormatException('incorect value');\n            }\n            return characterSet;\n        }\n        equals(o) {\n            if (!(o instanceof CharacterSetECI)) {\n                return false;\n            }\n            const other = o;\n            return this.getName() === other.getName();\n        }\n    }\n    CharacterSetECI.VALUE_IDENTIFIER_TO_ECI = new Map();\n    CharacterSetECI.VALUES_TO_ECI = new Map();\n    CharacterSetECI.NAME_TO_ECI = new Map();\n    // Enum name is a Java encoding valid for java.lang and java.io\n    // TYPESCRIPTPORT: changed the main label for ISO as the TextEncoder did not recognized them in the form from java\n    // (eg ISO8859_1 must be ISO88591 or ISO8859-1 or ISO-8859-1)\n    // later on: well, except 16 wich does not work with ISO885916 so used ISO-8859-1 form for default\n    CharacterSetECI.Cp437 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp437, Int32Array.from([0, 2]), 'Cp437');\n    CharacterSetECI.ISO8859_1 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_1, Int32Array.from([1, 3]), 'ISO-8859-1', 'ISO88591', 'ISO8859_1');\n    CharacterSetECI.ISO8859_2 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_2, 4, 'ISO-8859-2', 'ISO88592', 'ISO8859_2');\n    CharacterSetECI.ISO8859_3 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_3, 5, 'ISO-8859-3', 'ISO88593', 'ISO8859_3');\n    CharacterSetECI.ISO8859_4 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_4, 6, 'ISO-8859-4', 'ISO88594', 'ISO8859_4');\n    CharacterSetECI.ISO8859_5 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_5, 7, 'ISO-8859-5', 'ISO88595', 'ISO8859_5');\n    CharacterSetECI.ISO8859_6 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_6, 8, 'ISO-8859-6', 'ISO88596', 'ISO8859_6');\n    CharacterSetECI.ISO8859_7 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_7, 9, 'ISO-8859-7', 'ISO88597', 'ISO8859_7');\n    CharacterSetECI.ISO8859_8 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_8, 10, 'ISO-8859-8', 'ISO88598', 'ISO8859_8');\n    CharacterSetECI.ISO8859_9 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_9, 11, 'ISO-8859-9', 'ISO88599', 'ISO8859_9');\n    CharacterSetECI.ISO8859_10 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_10, 12, 'ISO-8859-10', 'ISO885910', 'ISO8859_10');\n    CharacterSetECI.ISO8859_11 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_11, 13, 'ISO-8859-11', 'ISO885911', 'ISO8859_11');\n    CharacterSetECI.ISO8859_13 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_13, 15, 'ISO-8859-13', 'ISO885913', 'ISO8859_13');\n    CharacterSetECI.ISO8859_14 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_14, 16, 'ISO-8859-14', 'ISO885914', 'ISO8859_14');\n    CharacterSetECI.ISO8859_15 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_15, 17, 'ISO-8859-15', 'ISO885915', 'ISO8859_15');\n    CharacterSetECI.ISO8859_16 = new CharacterSetECI(CharacterSetValueIdentifiers.ISO8859_16, 18, 'ISO-8859-16', 'ISO885916', 'ISO8859_16');\n    CharacterSetECI.SJIS = new CharacterSetECI(CharacterSetValueIdentifiers.SJIS, 20, 'SJIS', 'Shift_JIS');\n    CharacterSetECI.Cp1250 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1250, 21, 'Cp1250', 'windows-1250');\n    CharacterSetECI.Cp1251 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1251, 22, 'Cp1251', 'windows-1251');\n    CharacterSetECI.Cp1252 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1252, 23, 'Cp1252', 'windows-1252');\n    CharacterSetECI.Cp1256 = new CharacterSetECI(CharacterSetValueIdentifiers.Cp1256, 24, 'Cp1256', 'windows-1256');\n    CharacterSetECI.UnicodeBigUnmarked = new CharacterSetECI(CharacterSetValueIdentifiers.UnicodeBigUnmarked, 25, 'UnicodeBigUnmarked', 'UTF-16BE', 'UnicodeBig');\n    CharacterSetECI.UTF8 = new CharacterSetECI(CharacterSetValueIdentifiers.UTF8, 26, 'UTF8', 'UTF-8');\n    CharacterSetECI.ASCII = new CharacterSetECI(CharacterSetValueIdentifiers.ASCII, Int32Array.from([27, 170]), 'ASCII', 'US-ASCII');\n    CharacterSetECI.Big5 = new CharacterSetECI(CharacterSetValueIdentifiers.Big5, 28, 'Big5');\n    CharacterSetECI.GB18030 = new CharacterSetECI(CharacterSetValueIdentifiers.GB18030, 29, 'GB18030', 'GB2312', 'EUC_CN', 'GBK');\n    CharacterSetECI.EUC_KR = new CharacterSetECI(CharacterSetValueIdentifiers.EUC_KR, 30, 'EUC_KR', 'EUC-KR');\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class UnsupportedOperationException extends Exception {\n    }\n    UnsupportedOperationException.kind = 'UnsupportedOperationException';\n\n    /**\n     * Responsible for en/decoding strings.\n     */\n    class StringEncoding {\n        /**\n         * Decodes some Uint8Array to a string format.\n         */\n        static decode(bytes, encoding) {\n            const encodingName = this.encodingName(encoding);\n            if (this.customDecoder) {\n                return this.customDecoder(bytes, encodingName);\n            }\n            // Increases browser support.\n            if (typeof TextDecoder === 'undefined' || this.shouldDecodeOnFallback(encodingName)) {\n                return this.decodeFallback(bytes, encodingName);\n            }\n            return new TextDecoder(encodingName).decode(bytes);\n        }\n        /**\n         * Checks if the decoding method should use the fallback for decoding\n         * once Node TextDecoder doesn't support all encoding formats.\n         *\n         * @param encodingName\n         */\n        static shouldDecodeOnFallback(encodingName) {\n            return !StringEncoding.isBrowser() && encodingName === 'ISO-8859-1';\n        }\n        /**\n         * Encodes some string into a Uint8Array.\n         */\n        static encode(s, encoding) {\n            const encodingName = this.encodingName(encoding);\n            if (this.customEncoder) {\n                return this.customEncoder(s, encodingName);\n            }\n            // Increases browser support.\n            if (typeof TextEncoder === 'undefined') {\n                return this.encodeFallback(s);\n            }\n            // TextEncoder only encodes to UTF8 by default as specified by encoding.spec.whatwg.org\n            return new TextEncoder().encode(s);\n        }\n        static isBrowser() {\n            return (typeof window !== 'undefined' && {}.toString.call(window) === '[object Window]');\n        }\n        /**\n         * Returns the string value from some encoding character set.\n         */\n        static encodingName(encoding) {\n            return typeof encoding === 'string'\n                ? encoding\n                : encoding.getName();\n        }\n        /**\n         * Returns character set from some encoding character set.\n         */\n        static encodingCharacterSet(encoding) {\n            if (encoding instanceof CharacterSetECI) {\n                return encoding;\n            }\n            return CharacterSetECI.getCharacterSetECIByName(encoding);\n        }\n        /**\n         * Runs a fallback for the native decoding funcion.\n         */\n        static decodeFallback(bytes, encoding) {\n            const characterSet = this.encodingCharacterSet(encoding);\n            if (StringEncoding.isDecodeFallbackSupported(characterSet)) {\n                let s = '';\n                for (let i = 0, length = bytes.length; i < length; i++) {\n                    let h = bytes[i].toString(16);\n                    if (h.length < 2) {\n                        h = '0' + h;\n                    }\n                    s += '%' + h;\n                }\n                return decodeURIComponent(s);\n            }\n            if (characterSet.equals(CharacterSetECI.UnicodeBigUnmarked)) {\n                return String.fromCharCode.apply(null, new Uint16Array(bytes.buffer));\n            }\n            throw new UnsupportedOperationException(`Encoding ${this.encodingName(encoding)} not supported by fallback.`);\n        }\n        static isDecodeFallbackSupported(characterSet) {\n            return characterSet.equals(CharacterSetECI.UTF8) ||\n                characterSet.equals(CharacterSetECI.ISO8859_1) ||\n                characterSet.equals(CharacterSetECI.ASCII);\n        }\n        /**\n         * Runs a fallback for the native encoding funcion.\n         *\n         * @see https://stackoverflow.com/a/17192845/4367683\n         */\n        static encodeFallback(s) {\n            const encodedURIstring = btoa(unescape(encodeURIComponent(s)));\n            const charList = encodedURIstring.split('');\n            const uintArray = [];\n            for (let i = 0; i < charList.length; i++) {\n                uintArray.push(charList[i].charCodeAt(0));\n            }\n            return new Uint8Array(uintArray);\n        }\n    }\n\n    /*\n     * Copyright (C) 2010 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * Common string-related functions.\n     *\n     * @author Sean Owen\n     * @author Alex Dupre\n     */\n    class StringUtils {\n        // SHIFT_JIS.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING) ||\n        // EUC_JP.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING);\n        static castAsNonUtf8Char(code, encoding = null) {\n            // ISO 8859-1 is the Java default as UTF-8 is JavaScripts\n            // you can see this method as a Java version of String.fromCharCode\n            const e = encoding ? encoding.getName() : this.ISO88591;\n            // use passed format (fromCharCode will return UTF8 encoding)\n            return StringEncoding.decode(new Uint8Array([code]), e);\n        }\n        /**\n         * @param bytes bytes encoding a string, whose encoding should be guessed\n         * @param hints decode hints if applicable\n         * @return name of guessed encoding; at the moment will only guess one of:\n         *  {@link #SHIFT_JIS}, {@link #UTF8}, {@link #ISO88591}, or the platform\n         *  default encoding if none of these can possibly be correct\n         */\n        static guessEncoding(bytes, hints) {\n            if (hints !== null && hints !== undefined && undefined !== hints.get(DecodeHintType$1.CHARACTER_SET)) {\n                return hints.get(DecodeHintType$1.CHARACTER_SET).toString();\n            }\n            // For now, merely tries to distinguish ISO-8859-1, UTF-8 and Shift_JIS,\n            // which should be by far the most common encodings.\n            const length = bytes.length;\n            let canBeISO88591 = true;\n            let canBeShiftJIS = true;\n            let canBeUTF8 = true;\n            let utf8BytesLeft = 0;\n            // int utf8LowChars = 0\n            let utf2BytesChars = 0;\n            let utf3BytesChars = 0;\n            let utf4BytesChars = 0;\n            let sjisBytesLeft = 0;\n            // int sjisLowChars = 0\n            let sjisKatakanaChars = 0;\n            // int sjisDoubleBytesChars = 0\n            let sjisCurKatakanaWordLength = 0;\n            let sjisCurDoubleBytesWordLength = 0;\n            let sjisMaxKatakanaWordLength = 0;\n            let sjisMaxDoubleBytesWordLength = 0;\n            // int isoLowChars = 0\n            // int isoHighChars = 0\n            let isoHighOther = 0;\n            const utf8bom = bytes.length > 3 &&\n                bytes[0] === /*(byte) */ 0xEF &&\n                bytes[1] === /*(byte) */ 0xBB &&\n                bytes[2] === /*(byte) */ 0xBF;\n            for (let i = 0; i < length && (canBeISO88591 || canBeShiftJIS || canBeUTF8); i++) {\n                const value = bytes[i] & 0xFF;\n                // UTF-8 stuff\n                if (canBeUTF8) {\n                    if (utf8BytesLeft > 0) {\n                        if ((value & 0x80) === 0) {\n                            canBeUTF8 = false;\n                        }\n                        else {\n                            utf8BytesLeft--;\n                        }\n                    }\n                    else if ((value & 0x80) !== 0) {\n                        if ((value & 0x40) === 0) {\n                            canBeUTF8 = false;\n                        }\n                        else {\n                            utf8BytesLeft++;\n                            if ((value & 0x20) === 0) {\n                                utf2BytesChars++;\n                            }\n                            else {\n                                utf8BytesLeft++;\n                                if ((value & 0x10) === 0) {\n                                    utf3BytesChars++;\n                                }\n                                else {\n                                    utf8BytesLeft++;\n                                    if ((value & 0x08) === 0) {\n                                        utf4BytesChars++;\n                                    }\n                                    else {\n                                        canBeUTF8 = false;\n                                    }\n                                }\n                            }\n                        }\n                    } // else {\n                    // utf8LowChars++\n                    // }\n                }\n                // ISO-8859-1 stuff\n                if (canBeISO88591) {\n                    if (value > 0x7F && value < 0xA0) {\n                        canBeISO88591 = false;\n                    }\n                    else if (value > 0x9F) {\n                        if (value < 0xC0 || value === 0xD7 || value === 0xF7) {\n                            isoHighOther++;\n                        } // else {\n                        // isoHighChars++\n                        // }\n                    } // else {\n                    // isoLowChars++\n                    // }\n                }\n                // Shift_JIS stuff\n                if (canBeShiftJIS) {\n                    if (sjisBytesLeft > 0) {\n                        if (value < 0x40 || value === 0x7F || value > 0xFC) {\n                            canBeShiftJIS = false;\n                        }\n                        else {\n                            sjisBytesLeft--;\n                        }\n                    }\n                    else if (value === 0x80 || value === 0xA0 || value > 0xEF) {\n                        canBeShiftJIS = false;\n                    }\n                    else if (value > 0xA0 && value < 0xE0) {\n                        sjisKatakanaChars++;\n                        sjisCurDoubleBytesWordLength = 0;\n                        sjisCurKatakanaWordLength++;\n                        if (sjisCurKatakanaWordLength > sjisMaxKatakanaWordLength) {\n                            sjisMaxKatakanaWordLength = sjisCurKatakanaWordLength;\n                        }\n                    }\n                    else if (value > 0x7F) {\n                        sjisBytesLeft++;\n                        // sjisDoubleBytesChars++\n                        sjisCurKatakanaWordLength = 0;\n                        sjisCurDoubleBytesWordLength++;\n                        if (sjisCurDoubleBytesWordLength > sjisMaxDoubleBytesWordLength) {\n                            sjisMaxDoubleBytesWordLength = sjisCurDoubleBytesWordLength;\n                        }\n                    }\n                    else {\n                        // sjisLowChars++\n                        sjisCurKatakanaWordLength = 0;\n                        sjisCurDoubleBytesWordLength = 0;\n                    }\n                }\n            }\n            if (canBeUTF8 && utf8BytesLeft > 0) {\n                canBeUTF8 = false;\n            }\n            if (canBeShiftJIS && sjisBytesLeft > 0) {\n                canBeShiftJIS = false;\n            }\n            // Easy -- if there is BOM or at least 1 valid not-single byte character (and no evidence it can't be UTF-8), done\n            if (canBeUTF8 && (utf8bom || utf2BytesChars + utf3BytesChars + utf4BytesChars > 0)) {\n                return StringUtils.UTF8;\n            }\n            // Easy -- if assuming Shift_JIS or at least 3 valid consecutive not-ascii characters (and no evidence it can't be), done\n            if (canBeShiftJIS && (StringUtils.ASSUME_SHIFT_JIS || sjisMaxKatakanaWordLength >= 3 || sjisMaxDoubleBytesWordLength >= 3)) {\n                return StringUtils.SHIFT_JIS;\n            }\n            // Distinguishing Shift_JIS and ISO-8859-1 can be a little tough for short words. The crude heuristic is:\n            // - If we saw\n            //   - only two consecutive katakana chars in the whole text, or\n            //   - at least 10% of bytes that could be \"upper\" not-alphanumeric Latin1,\n            // - then we conclude Shift_JIS, else ISO-8859-1\n            if (canBeISO88591 && canBeShiftJIS) {\n                return (sjisMaxKatakanaWordLength === 2 && sjisKatakanaChars === 2) || isoHighOther * 10 >= length\n                    ? StringUtils.SHIFT_JIS : StringUtils.ISO88591;\n            }\n            // Otherwise, try in order ISO-8859-1, Shift JIS, UTF-8 and fall back to default platform encoding\n            if (canBeISO88591) {\n                return StringUtils.ISO88591;\n            }\n            if (canBeShiftJIS) {\n                return StringUtils.SHIFT_JIS;\n            }\n            if (canBeUTF8) {\n                return StringUtils.UTF8;\n            }\n            // Otherwise, we take a wild guess with platform encoding\n            return StringUtils.PLATFORM_DEFAULT_ENCODING;\n        }\n        /**\n         *\n         * @see https://stackoverflow.com/a/13439711/4367683\n         *\n         * @param append The new string to append.\n         * @param args Argumets values to be formated.\n         */\n        static format(append, ...args) {\n            let i = -1;\n            function callback(exp, p0, p1, p2, p3, p4) {\n                if (exp === '%%')\n                    return '%';\n                if (args[++i] === undefined)\n                    return undefined;\n                exp = p2 ? parseInt(p2.substr(1)) : undefined;\n                let base = p3 ? parseInt(p3.substr(1)) : undefined;\n                let val;\n                switch (p4) {\n                    case 's':\n                        val = args[i];\n                        break;\n                    case 'c':\n                        val = args[i][0];\n                        break;\n                    case 'f':\n                        val = parseFloat(args[i]).toFixed(exp);\n                        break;\n                    case 'p':\n                        val = parseFloat(args[i]).toPrecision(exp);\n                        break;\n                    case 'e':\n                        val = parseFloat(args[i]).toExponential(exp);\n                        break;\n                    case 'x':\n                        val = parseInt(args[i]).toString(base ? base : 16);\n                        break;\n                    case 'd':\n                        val = parseFloat(parseInt(args[i], base ? base : 10).toPrecision(exp)).toFixed(0);\n                        break;\n                }\n                val = typeof val === 'object' ? JSON.stringify(val) : (+val).toString(base);\n                let size = parseInt(p1); /* padding size */\n                let ch = p1 && (p1[0] + '') === '0' ? '0' : ' '; /* isnull? */\n                while (val.length < size)\n                    val = p0 !== undefined ? val + ch : ch + val; /* isminus? */\n                return val;\n            }\n            let regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;\n            return append.replace(regex, callback);\n        }\n        /**\n         *\n         */\n        static getBytes(str, encoding) {\n            return StringEncoding.encode(str, encoding);\n        }\n        /**\n         * Returns the charcode at the specified index or at index zero.\n         */\n        static getCharCode(str, index = 0) {\n            return str.charCodeAt(index);\n        }\n        /**\n         * Returns char for given charcode\n         */\n        static getCharAt(charCode) {\n            return String.fromCharCode(charCode);\n        }\n    }\n    StringUtils.SHIFT_JIS = CharacterSetECI.SJIS.getName(); // \"SJIS\"\n    StringUtils.GB2312 = 'GB2312';\n    StringUtils.ISO88591 = CharacterSetECI.ISO8859_1.getName(); // \"ISO8859_1\"\n    StringUtils.EUC_JP = 'EUC_JP';\n    StringUtils.UTF8 = CharacterSetECI.UTF8.getName(); // \"UTF8\"\n    StringUtils.PLATFORM_DEFAULT_ENCODING = StringUtils.UTF8; // \"UTF8\"//Charset.defaultCharset().name()\n    StringUtils.ASSUME_SHIFT_JIS = false;\n\n    class StringBuilder {\n        constructor(value = '') {\n            this.value = value;\n        }\n        enableDecoding(encoding) {\n            this.encoding = encoding;\n            return this;\n        }\n        append(s) {\n            if (typeof s === 'string') {\n                this.value += s.toString();\n            }\n            else if (this.encoding) {\n                // use passed format (fromCharCode will return UTF8 encoding)\n                this.value += StringUtils.castAsNonUtf8Char(s, this.encoding);\n            }\n            else {\n                // correctly converts from UTF-8, but not other encodings\n                this.value += String.fromCharCode(s);\n            }\n            return this;\n        }\n        appendChars(str, offset, len) {\n            for (let i = offset; offset < offset + len; i++) {\n                this.append(str[i]);\n            }\n            return this;\n        }\n        length() {\n            return this.value.length;\n        }\n        charAt(n) {\n            return this.value.charAt(n);\n        }\n        deleteCharAt(n) {\n            this.value = this.value.substr(0, n) + this.value.substring(n + 1);\n        }\n        setCharAt(n, c) {\n            this.value = this.value.substr(0, n) + c + this.value.substr(n + 1);\n        }\n        substring(start, end) {\n            return this.value.substring(start, end);\n        }\n        /**\n         * @note helper method for RSS Expanded\n         */\n        setLengthToZero() {\n            this.value = '';\n        }\n        toString() {\n            return this.value;\n        }\n        insert(n, c) {\n            this.value = this.value.substr(0, n) + c + this.value.substr(n + c.length);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Represents a 2D matrix of bits. In function arguments below, and throughout the common\n     * module, x is the column position, and y is the row position. The ordering is always x, y.\n     * The origin is at the top-left.</p>\n     *\n     * <p>Internally the bits are represented in a 1-D array of 32-bit ints. However, each row begins\n     * with a new int. This is done intentionally so that we can copy out a row into a BitArray very\n     * efficiently.</p>\n     *\n     * <p>The ordering of bits is row-major. Within each int, the least significant bits are used first,\n     * meaning they represent lower x values. This is compatible with BitArray's implementation.</p>\n     *\n     * @author Sean Owen\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class BitMatrix /*implements Cloneable*/ {\n        /**\n         * Creates an empty square {@link BitMatrix}.\n         *\n         * @param dimension height and width\n         */\n        // public constructor(dimension: number /*int*/) {\n        //   this(dimension, dimension)\n        // }\n        /**\n         * Creates an empty {@link BitMatrix}.\n         *\n         * @param width bit matrix width\n         * @param height bit matrix height\n         */\n        // public constructor(width: number /*int*/, height: number /*int*/) {\n        //   if (width < 1 || height < 1) {\n        //     throw new IllegalArgumentException(\"Both dimensions must be greater than 0\")\n        //   }\n        //   this.width = width\n        //   this.height = height\n        //   this.rowSize = (width + 31) / 32\n        //   bits = new int[rowSize * height];\n        // }\n        constructor(width /*int*/, height /*int*/, rowSize /*int*/, bits) {\n            this.width = width;\n            this.height = height;\n            this.rowSize = rowSize;\n            this.bits = bits;\n            if (undefined === height || null === height) {\n                height = width;\n            }\n            this.height = height;\n            if (width < 1 || height < 1) {\n                throw new IllegalArgumentException('Both dimensions must be greater than 0');\n            }\n            if (undefined === rowSize || null === rowSize) {\n                rowSize = Math.floor((width + 31) / 32);\n            }\n            this.rowSize = rowSize;\n            if (undefined === bits || null === bits) {\n                this.bits = new Int32Array(this.rowSize * this.height);\n            }\n        }\n        /**\n         * Interprets a 2D array of booleans as a {@link BitMatrix}, where \"true\" means an \"on\" bit.\n         *\n         * @function parse\n         * @param image bits of the image, as a row-major 2D array. Elements are arrays representing rows\n         * @return {@link BitMatrix} representation of image\n         */\n        static parseFromBooleanArray(image) {\n            const height = image.length;\n            const width = image[0].length;\n            const bits = new BitMatrix(width, height);\n            for (let i = 0; i < height; i++) {\n                const imageI = image[i];\n                for (let j = 0; j < width; j++) {\n                    if (imageI[j]) {\n                        bits.set(j, i);\n                    }\n                }\n            }\n            return bits;\n        }\n        /**\n         *\n         * @function parse\n         * @param stringRepresentation\n         * @param setString\n         * @param unsetString\n         */\n        static parseFromString(stringRepresentation, setString, unsetString) {\n            if (stringRepresentation === null) {\n                throw new IllegalArgumentException('stringRepresentation cannot be null');\n            }\n            const bits = new Array(stringRepresentation.length);\n            let bitsPos = 0;\n            let rowStartPos = 0;\n            let rowLength = -1;\n            let nRows = 0;\n            let pos = 0;\n            while (pos < stringRepresentation.length) {\n                if (stringRepresentation.charAt(pos) === '\\n' ||\n                    stringRepresentation.charAt(pos) === '\\r') {\n                    if (bitsPos > rowStartPos) {\n                        if (rowLength === -1) {\n                            rowLength = bitsPos - rowStartPos;\n                        }\n                        else if (bitsPos - rowStartPos !== rowLength) {\n                            throw new IllegalArgumentException('row lengths do not match');\n                        }\n                        rowStartPos = bitsPos;\n                        nRows++;\n                    }\n                    pos++;\n                }\n                else if (stringRepresentation.substring(pos, pos + setString.length) === setString) {\n                    pos += setString.length;\n                    bits[bitsPos] = true;\n                    bitsPos++;\n                }\n                else if (stringRepresentation.substring(pos, pos + unsetString.length) === unsetString) {\n                    pos += unsetString.length;\n                    bits[bitsPos] = false;\n                    bitsPos++;\n                }\n                else {\n                    throw new IllegalArgumentException('illegal character encountered: ' + stringRepresentation.substring(pos));\n                }\n            }\n            // no EOL at end?\n            if (bitsPos > rowStartPos) {\n                if (rowLength === -1) {\n                    rowLength = bitsPos - rowStartPos;\n                }\n                else if (bitsPos - rowStartPos !== rowLength) {\n                    throw new IllegalArgumentException('row lengths do not match');\n                }\n                nRows++;\n            }\n            const matrix = new BitMatrix(rowLength, nRows);\n            for (let i = 0; i < bitsPos; i++) {\n                if (bits[i]) {\n                    matrix.set(Math.floor(i % rowLength), Math.floor(i / rowLength));\n                }\n            }\n            return matrix;\n        }\n        /**\n         * <p>Gets the requested bit, where true means black.</p>\n         *\n         * @param x The horizontal component (i.e. which column)\n         * @param y The vertical component (i.e. which row)\n         * @return value of given bit in matrix\n         */\n        get(x /*int*/, y /*int*/) {\n            const offset = y * this.rowSize + Math.floor(x / 32);\n            return ((this.bits[offset] >>> (x & 0x1f)) & 1) !== 0;\n        }\n        /**\n         * <p>Sets the given bit to true.</p>\n         *\n         * @param x The horizontal component (i.e. which column)\n         * @param y The vertical component (i.e. which row)\n         */\n        set(x /*int*/, y /*int*/) {\n            const offset = y * this.rowSize + Math.floor(x / 32);\n            this.bits[offset] |= (1 << (x & 0x1f)) & 0xFFFFFFFF;\n        }\n        unset(x /*int*/, y /*int*/) {\n            const offset = y * this.rowSize + Math.floor(x / 32);\n            this.bits[offset] &= ~((1 << (x & 0x1f)) & 0xFFFFFFFF);\n        }\n        /**\n         * <p>Flips the given bit.</p>\n         *\n         * @param x The horizontal component (i.e. which column)\n         * @param y The vertical component (i.e. which row)\n         */\n        flip(x /*int*/, y /*int*/) {\n            const offset = y * this.rowSize + Math.floor(x / 32);\n            this.bits[offset] ^= ((1 << (x & 0x1f)) & 0xFFFFFFFF);\n        }\n        /**\n         * Exclusive-or (XOR): Flip the bit in this {@code BitMatrix} if the corresponding\n         * mask bit is set.\n         *\n         * @param mask XOR mask\n         */\n        xor(mask) {\n            if (this.width !== mask.getWidth() || this.height !== mask.getHeight()\n                || this.rowSize !== mask.getRowSize()) {\n                throw new IllegalArgumentException('input matrix dimensions do not match');\n            }\n            const rowArray = new BitArray(Math.floor(this.width / 32) + 1);\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            for (let y = 0, height = this.height; y < height; y++) {\n                const offset = y * rowSize;\n                const row = mask.getRow(y, rowArray).getBitArray();\n                for (let x = 0; x < rowSize; x++) {\n                    bits[offset + x] ^= row[x];\n                }\n            }\n        }\n        /**\n         * Clears all bits (sets to false).\n         */\n        clear() {\n            const bits = this.bits;\n            const max = bits.length;\n            for (let i = 0; i < max; i++) {\n                bits[i] = 0;\n            }\n        }\n        /**\n         * <p>Sets a square region of the bit matrix to true.</p>\n         *\n         * @param left The horizontal position to begin at (inclusive)\n         * @param top The vertical position to begin at (inclusive)\n         * @param width The width of the region\n         * @param height The height of the region\n         */\n        setRegion(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            if (top < 0 || left < 0) {\n                throw new IllegalArgumentException('Left and top must be nonnegative');\n            }\n            if (height < 1 || width < 1) {\n                throw new IllegalArgumentException('Height and width must be at least 1');\n            }\n            const right = left + width;\n            const bottom = top + height;\n            if (bottom > this.height || right > this.width) {\n                throw new IllegalArgumentException('The region must fit inside the matrix');\n            }\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            for (let y = top; y < bottom; y++) {\n                const offset = y * rowSize;\n                for (let x = left; x < right; x++) {\n                    bits[offset + Math.floor(x / 32)] |= ((1 << (x & 0x1f)) & 0xFFFFFFFF);\n                }\n            }\n        }\n        /**\n         * A fast method to retrieve one row of data from the matrix as a BitArray.\n         *\n         * @param y The row to retrieve\n         * @param row An optional caller-allocated BitArray, will be allocated if null or too small\n         * @return The resulting BitArray - this reference should always be used even when passing\n         *         your own row\n         */\n        getRow(y /*int*/, row) {\n            if (row === null || row === undefined || row.getSize() < this.width) {\n                row = new BitArray(this.width);\n            }\n            else {\n                row.clear();\n            }\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            const offset = y * rowSize;\n            for (let x = 0; x < rowSize; x++) {\n                row.setBulk(x * 32, bits[offset + x]);\n            }\n            return row;\n        }\n        /**\n         * @param y row to set\n         * @param row {@link BitArray} to copy from\n         */\n        setRow(y /*int*/, row) {\n            System.arraycopy(row.getBitArray(), 0, this.bits, y * this.rowSize, this.rowSize);\n        }\n        /**\n         * Modifies this {@code BitMatrix} to represent the same but rotated 180 degrees\n         */\n        rotate180() {\n            const width = this.getWidth();\n            const height = this.getHeight();\n            let topRow = new BitArray(width);\n            let bottomRow = new BitArray(width);\n            for (let i = 0, length = Math.floor((height + 1) / 2); i < length; i++) {\n                topRow = this.getRow(i, topRow);\n                bottomRow = this.getRow(height - 1 - i, bottomRow);\n                topRow.reverse();\n                bottomRow.reverse();\n                this.setRow(i, bottomRow);\n                this.setRow(height - 1 - i, topRow);\n            }\n        }\n        /**\n         * This is useful in detecting the enclosing rectangle of a 'pure' barcode.\n         *\n         * @return {@code left,top,width,height} enclosing rectangle of all 1 bits, or null if it is all white\n         */\n        getEnclosingRectangle() {\n            const width = this.width;\n            const height = this.height;\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            let left = width;\n            let top = height;\n            let right = -1;\n            let bottom = -1;\n            for (let y = 0; y < height; y++) {\n                for (let x32 = 0; x32 < rowSize; x32++) {\n                    const theBits = bits[y * rowSize + x32];\n                    if (theBits !== 0) {\n                        if (y < top) {\n                            top = y;\n                        }\n                        if (y > bottom) {\n                            bottom = y;\n                        }\n                        if (x32 * 32 < left) {\n                            let bit = 0;\n                            while (((theBits << (31 - bit)) & 0xFFFFFFFF) === 0) {\n                                bit++;\n                            }\n                            if ((x32 * 32 + bit) < left) {\n                                left = x32 * 32 + bit;\n                            }\n                        }\n                        if (x32 * 32 + 31 > right) {\n                            let bit = 31;\n                            while ((theBits >>> bit) === 0) {\n                                bit--;\n                            }\n                            if ((x32 * 32 + bit) > right) {\n                                right = x32 * 32 + bit;\n                            }\n                        }\n                    }\n                }\n            }\n            if (right < left || bottom < top) {\n                return null;\n            }\n            return Int32Array.from([left, top, right - left + 1, bottom - top + 1]);\n        }\n        /**\n         * This is useful in detecting a corner of a 'pure' barcode.\n         *\n         * @return {@code x,y} coordinate of top-left-most 1 bit, or null if it is all white\n         */\n        getTopLeftOnBit() {\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            let bitsOffset = 0;\n            while (bitsOffset < bits.length && bits[bitsOffset] === 0) {\n                bitsOffset++;\n            }\n            if (bitsOffset === bits.length) {\n                return null;\n            }\n            const y = bitsOffset / rowSize;\n            let x = (bitsOffset % rowSize) * 32;\n            const theBits = bits[bitsOffset];\n            let bit = 0;\n            while (((theBits << (31 - bit)) & 0xFFFFFFFF) === 0) {\n                bit++;\n            }\n            x += bit;\n            return Int32Array.from([x, y]);\n        }\n        getBottomRightOnBit() {\n            const rowSize = this.rowSize;\n            const bits = this.bits;\n            let bitsOffset = bits.length - 1;\n            while (bitsOffset >= 0 && bits[bitsOffset] === 0) {\n                bitsOffset--;\n            }\n            if (bitsOffset < 0) {\n                return null;\n            }\n            const y = Math.floor(bitsOffset / rowSize);\n            let x = Math.floor(bitsOffset % rowSize) * 32;\n            const theBits = bits[bitsOffset];\n            let bit = 31;\n            while ((theBits >>> bit) === 0) {\n                bit--;\n            }\n            x += bit;\n            return Int32Array.from([x, y]);\n        }\n        /**\n         * @return The width of the matrix\n         */\n        getWidth() {\n            return this.width;\n        }\n        /**\n         * @return The height of the matrix\n         */\n        getHeight() {\n            return this.height;\n        }\n        /**\n         * @return The row size of the matrix\n         */\n        getRowSize() {\n            return this.rowSize;\n        }\n        /*@Override*/\n        equals(o) {\n            if (!(o instanceof BitMatrix)) {\n                return false;\n            }\n            const other = o;\n            return this.width === other.width && this.height === other.height && this.rowSize === other.rowSize &&\n                Arrays.equals(this.bits, other.bits);\n        }\n        /*@Override*/\n        hashCode() {\n            let hash = this.width;\n            hash = 31 * hash + this.width;\n            hash = 31 * hash + this.height;\n            hash = 31 * hash + this.rowSize;\n            hash = 31 * hash + Arrays.hashCode(this.bits);\n            return hash;\n        }\n        /**\n         * @return string representation using \"X\" for set and \" \" for unset bits\n         */\n        /*@Override*/\n        // public toString(): string {\n        //   return toString(\": \"X, \"  \")\n        // }\n        /**\n         * @param setString representation of a set bit\n         * @param unsetString representation of an unset bit\n         * @return string representation of entire matrix utilizing given strings\n         */\n        // public toString(setString: string = \"X \", unsetString: string = \"  \"): string {\n        //   return this.buildToString(setString, unsetString, \"\\n\")\n        // }\n        /**\n         * @param setString representation of a set bit\n         * @param unsetString representation of an unset bit\n         * @param lineSeparator newline character in string representation\n         * @return string representation of entire matrix utilizing given strings and line separator\n         * @deprecated call {@link #toString(String,String)} only, which uses \\n line separator always\n         */\n        // @Deprecated\n        toString(setString = 'X ', unsetString = '  ', lineSeparator = '\\n') {\n            return this.buildToString(setString, unsetString, lineSeparator);\n        }\n        buildToString(setString, unsetString, lineSeparator) {\n            let result = new StringBuilder();\n            // result.append(lineSeparator);\n            for (let y = 0, height = this.height; y < height; y++) {\n                for (let x = 0, width = this.width; x < width; x++) {\n                    result.append(this.get(x, y) ? setString : unsetString);\n                }\n                result.append(lineSeparator);\n            }\n            return result.toString();\n        }\n        /*@Override*/\n        clone() {\n            return new BitMatrix(this.width, this.height, this.rowSize, this.bits.slice());\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class NotFoundException extends Exception {\n        static getNotFoundInstance() {\n            return new NotFoundException();\n        }\n    }\n    NotFoundException.kind = 'NotFoundException';\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This Binarizer implementation uses the old ZXing global histogram approach. It is suitable\n     * for low-end mobile devices which don't have enough CPU or memory to use a local thresholding\n     * algorithm. However, because it picks a global black point, it cannot handle difficult shadows\n     * and gradients.\n     *\n     * Faster mobile devices and all desktop applications should probably use HybridBinarizer instead.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     */\n    class GlobalHistogramBinarizer extends Binarizer {\n        constructor(source) {\n            super(source);\n            this.luminances = GlobalHistogramBinarizer.EMPTY;\n            this.buckets = new Int32Array(GlobalHistogramBinarizer.LUMINANCE_BUCKETS);\n        }\n        // Applies simple sharpening to the row data to improve performance of the 1D Readers.\n        /*@Override*/\n        getBlackRow(y /*int*/, row) {\n            const source = this.getLuminanceSource();\n            const width = source.getWidth();\n            if (row === undefined || row === null || row.getSize() < width) {\n                row = new BitArray(width);\n            }\n            else {\n                row.clear();\n            }\n            this.initArrays(width);\n            const localLuminances = source.getRow(y, this.luminances);\n            const localBuckets = this.buckets;\n            for (let x = 0; x < width; x++) {\n                localBuckets[(localLuminances[x] & 0xff) >> GlobalHistogramBinarizer.LUMINANCE_SHIFT]++;\n            }\n            const blackPoint = GlobalHistogramBinarizer.estimateBlackPoint(localBuckets);\n            if (width < 3) {\n                // Special case for very small images\n                for (let x = 0; x < width; x++) {\n                    if ((localLuminances[x] & 0xff) < blackPoint) {\n                        row.set(x);\n                    }\n                }\n            }\n            else {\n                let left = localLuminances[0] & 0xff;\n                let center = localLuminances[1] & 0xff;\n                for (let x = 1; x < width - 1; x++) {\n                    const right = localLuminances[x + 1] & 0xff;\n                    // A simple -1 4 -1 box filter with a weight of 2.\n                    if (((center * 4) - left - right) / 2 < blackPoint) {\n                        row.set(x);\n                    }\n                    left = center;\n                    center = right;\n                }\n            }\n            return row;\n        }\n        // Does not sharpen the data, as this call is intended to only be used by 2D Readers.\n        /*@Override*/\n        getBlackMatrix() {\n            const source = this.getLuminanceSource();\n            const width = source.getWidth();\n            const height = source.getHeight();\n            const matrix = new BitMatrix(width, height);\n            // Quickly calculates the histogram by sampling four rows from the image. This proved to be\n            // more robust on the blackbox tests than sampling a diagonal as we used to do.\n            this.initArrays(width);\n            const localBuckets = this.buckets;\n            for (let y = 1; y < 5; y++) {\n                const row = Math.floor((height * y) / 5);\n                const localLuminances = source.getRow(row, this.luminances);\n                const right = Math.floor((width * 4) / 5);\n                for (let x = Math.floor(width / 5); x < right; x++) {\n                    const pixel = localLuminances[x] & 0xff;\n                    localBuckets[pixel >> GlobalHistogramBinarizer.LUMINANCE_SHIFT]++;\n                }\n            }\n            const blackPoint = GlobalHistogramBinarizer.estimateBlackPoint(localBuckets);\n            // We delay reading the entire image luminance until the black point estimation succeeds.\n            // Although we end up reading four rows twice, it is consistent with our motto of\n            // \"fail quickly\" which is necessary for continuous scanning.\n            const localLuminances = source.getMatrix();\n            for (let y = 0; y < height; y++) {\n                const offset = y * width;\n                for (let x = 0; x < width; x++) {\n                    const pixel = localLuminances[offset + x] & 0xff;\n                    if (pixel < blackPoint) {\n                        matrix.set(x, y);\n                    }\n                }\n            }\n            return matrix;\n        }\n        /*@Override*/\n        createBinarizer(source) {\n            return new GlobalHistogramBinarizer(source);\n        }\n        initArrays(luminanceSize /*int*/) {\n            if (this.luminances.length < luminanceSize) {\n                this.luminances = new Uint8ClampedArray(luminanceSize);\n            }\n            const buckets = this.buckets;\n            for (let x = 0; x < GlobalHistogramBinarizer.LUMINANCE_BUCKETS; x++) {\n                buckets[x] = 0;\n            }\n        }\n        static estimateBlackPoint(buckets) {\n            // Find the tallest peak in the histogram.\n            const numBuckets = buckets.length;\n            let maxBucketCount = 0;\n            let firstPeak = 0;\n            let firstPeakSize = 0;\n            for (let x = 0; x < numBuckets; x++) {\n                if (buckets[x] > firstPeakSize) {\n                    firstPeak = x;\n                    firstPeakSize = buckets[x];\n                }\n                if (buckets[x] > maxBucketCount) {\n                    maxBucketCount = buckets[x];\n                }\n            }\n            // Find the second-tallest peak which is somewhat far from the tallest peak.\n            let secondPeak = 0;\n            let secondPeakScore = 0;\n            for (let x = 0; x < numBuckets; x++) {\n                const distanceToBiggest = x - firstPeak;\n                // Encourage more distant second peaks by multiplying by square of distance.\n                const score = buckets[x] * distanceToBiggest * distanceToBiggest;\n                if (score > secondPeakScore) {\n                    secondPeak = x;\n                    secondPeakScore = score;\n                }\n            }\n            // Make sure firstPeak corresponds to the black peak.\n            if (firstPeak > secondPeak) {\n                const temp = firstPeak;\n                firstPeak = secondPeak;\n                secondPeak = temp;\n            }\n            // If there is too little contrast in the image to pick a meaningful black point, throw rather\n            // than waste time trying to decode the image, and risk false positives.\n            if (secondPeak - firstPeak <= numBuckets / 16) {\n                throw new NotFoundException();\n            }\n            // Find a valley between them that is low and closer to the white peak.\n            let bestValley = secondPeak - 1;\n            let bestValleyScore = -1;\n            for (let x = secondPeak - 1; x > firstPeak; x--) {\n                const fromFirst = x - firstPeak;\n                const score = fromFirst * fromFirst * (secondPeak - x) * (maxBucketCount - buckets[x]);\n                if (score > bestValleyScore) {\n                    bestValley = x;\n                    bestValleyScore = score;\n                }\n            }\n            return bestValley << GlobalHistogramBinarizer.LUMINANCE_SHIFT;\n        }\n    }\n    GlobalHistogramBinarizer.LUMINANCE_BITS = 5;\n    GlobalHistogramBinarizer.LUMINANCE_SHIFT = 8 - GlobalHistogramBinarizer.LUMINANCE_BITS;\n    GlobalHistogramBinarizer.LUMINANCE_BUCKETS = 1 << GlobalHistogramBinarizer.LUMINANCE_BITS;\n    GlobalHistogramBinarizer.EMPTY = Uint8ClampedArray.from([0]);\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This class implements a local thresholding algorithm, which while slower than the\n     * GlobalHistogramBinarizer, is fairly efficient for what it does. It is designed for\n     * high frequency images of barcodes with black data on white backgrounds. For this application,\n     * it does a much better job than a global blackpoint with severe shadows and gradients.\n     * However it tends to produce artifacts on lower frequency images and is therefore not\n     * a good general purpose binarizer for uses outside ZXing.\n     *\n     * This class extends GlobalHistogramBinarizer, using the older histogram approach for 1D readers,\n     * and the newer local approach for 2D readers. 1D decoding using a per-row histogram is already\n     * inherently local, and only fails for horizontal gradients. We can revisit that problem later,\n     * but for now it was not a win to use local blocks for 1D.\n     *\n     * This Binarizer is the default for the unit tests and the recommended class for library users.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class HybridBinarizer extends GlobalHistogramBinarizer {\n        constructor(source) {\n            super(source);\n            this.matrix = null;\n        }\n        /**\n         * Calculates the final BitMatrix once for all requests. This could be called once from the\n         * constructor instead, but there are some advantages to doing it lazily, such as making\n         * profiling easier, and not doing heavy lifting when callers don't expect it.\n         */\n        /*@Override*/\n        getBlackMatrix() {\n            if (this.matrix !== null) {\n                return this.matrix;\n            }\n            const source = this.getLuminanceSource();\n            const width = source.getWidth();\n            const height = source.getHeight();\n            if (width >= HybridBinarizer.MINIMUM_DIMENSION && height >= HybridBinarizer.MINIMUM_DIMENSION) {\n                const luminances = source.getMatrix();\n                let subWidth = width >> HybridBinarizer.BLOCK_SIZE_POWER;\n                if ((width & HybridBinarizer.BLOCK_SIZE_MASK) !== 0) {\n                    subWidth++;\n                }\n                let subHeight = height >> HybridBinarizer.BLOCK_SIZE_POWER;\n                if ((height & HybridBinarizer.BLOCK_SIZE_MASK) !== 0) {\n                    subHeight++;\n                }\n                const blackPoints = HybridBinarizer.calculateBlackPoints(luminances, subWidth, subHeight, width, height);\n                const newMatrix = new BitMatrix(width, height);\n                HybridBinarizer.calculateThresholdForBlock(luminances, subWidth, subHeight, width, height, blackPoints, newMatrix);\n                this.matrix = newMatrix;\n            }\n            else {\n                // If the image is too small, fall back to the global histogram approach.\n                this.matrix = super.getBlackMatrix();\n            }\n            return this.matrix;\n        }\n        /*@Override*/\n        createBinarizer(source) {\n            return new HybridBinarizer(source);\n        }\n        /**\n         * For each block in the image, calculate the average black point using a 5x5 grid\n         * of the blocks around it. Also handles the corner cases (fractional blocks are computed based\n         * on the last pixels in the row/column which are also used in the previous block).\n         */\n        static calculateThresholdForBlock(luminances, subWidth /*int*/, subHeight /*int*/, width /*int*/, height /*int*/, blackPoints, matrix) {\n            const maxYOffset = height - HybridBinarizer.BLOCK_SIZE;\n            const maxXOffset = width - HybridBinarizer.BLOCK_SIZE;\n            for (let y = 0; y < subHeight; y++) {\n                let yoffset = y << HybridBinarizer.BLOCK_SIZE_POWER;\n                if (yoffset > maxYOffset) {\n                    yoffset = maxYOffset;\n                }\n                const top = HybridBinarizer.cap(y, 2, subHeight - 3);\n                for (let x = 0; x < subWidth; x++) {\n                    let xoffset = x << HybridBinarizer.BLOCK_SIZE_POWER;\n                    if (xoffset > maxXOffset) {\n                        xoffset = maxXOffset;\n                    }\n                    const left = HybridBinarizer.cap(x, 2, subWidth - 3);\n                    let sum = 0;\n                    for (let z = -2; z <= 2; z++) {\n                        const blackRow = blackPoints[top + z];\n                        sum += blackRow[left - 2] + blackRow[left - 1] + blackRow[left] + blackRow[left + 1] + blackRow[left + 2];\n                    }\n                    const average = sum / 25;\n                    HybridBinarizer.thresholdBlock(luminances, xoffset, yoffset, average, width, matrix);\n                }\n            }\n        }\n        static cap(value /*int*/, min /*int*/, max /*int*/) {\n            return value < min ? min : value > max ? max : value;\n        }\n        /**\n         * Applies a single threshold to a block of pixels.\n         */\n        static thresholdBlock(luminances, xoffset /*int*/, yoffset /*int*/, threshold /*int*/, stride /*int*/, matrix) {\n            for (let y = 0, offset = yoffset * stride + xoffset; y < HybridBinarizer.BLOCK_SIZE; y++, offset += stride) {\n                for (let x = 0; x < HybridBinarizer.BLOCK_SIZE; x++) {\n                    // Comparison needs to be <= so that black == 0 pixels are black even if the threshold is 0.\n                    if ((luminances[offset + x] & 0xFF) <= threshold) {\n                        matrix.set(xoffset + x, yoffset + y);\n                    }\n                }\n            }\n        }\n        /**\n         * Calculates a single black point for each block of pixels and saves it away.\n         * See the following thread for a discussion of this algorithm:\n         *  http://groups.google.com/group/zxing/browse_thread/thread/d06efa2c35a7ddc0\n         */\n        static calculateBlackPoints(luminances, subWidth /*int*/, subHeight /*int*/, width /*int*/, height /*int*/) {\n            const maxYOffset = height - HybridBinarizer.BLOCK_SIZE;\n            const maxXOffset = width - HybridBinarizer.BLOCK_SIZE;\n            // tslint:disable-next-line:whitespace\n            const blackPoints = new Array(subHeight); // subWidth\n            for (let y = 0; y < subHeight; y++) {\n                blackPoints[y] = new Int32Array(subWidth);\n                let yoffset = y << HybridBinarizer.BLOCK_SIZE_POWER;\n                if (yoffset > maxYOffset) {\n                    yoffset = maxYOffset;\n                }\n                for (let x = 0; x < subWidth; x++) {\n                    let xoffset = x << HybridBinarizer.BLOCK_SIZE_POWER;\n                    if (xoffset > maxXOffset) {\n                        xoffset = maxXOffset;\n                    }\n                    let sum = 0;\n                    let min = 0xFF;\n                    let max = 0;\n                    for (let yy = 0, offset = yoffset * width + xoffset; yy < HybridBinarizer.BLOCK_SIZE; yy++, offset += width) {\n                        for (let xx = 0; xx < HybridBinarizer.BLOCK_SIZE; xx++) {\n                            const pixel = luminances[offset + xx] & 0xFF;\n                            sum += pixel;\n                            // still looking for good contrast\n                            if (pixel < min) {\n                                min = pixel;\n                            }\n                            if (pixel > max) {\n                                max = pixel;\n                            }\n                        }\n                        // short-circuit min/max tests once dynamic range is met\n                        if (max - min > HybridBinarizer.MIN_DYNAMIC_RANGE) {\n                            // finish the rest of the rows quickly\n                            for (yy++, offset += width; yy < HybridBinarizer.BLOCK_SIZE; yy++, offset += width) {\n                                for (let xx = 0; xx < HybridBinarizer.BLOCK_SIZE; xx++) {\n                                    sum += luminances[offset + xx] & 0xFF;\n                                }\n                            }\n                        }\n                    }\n                    // The default estimate is the average of the values in the block.\n                    let average = sum >> (HybridBinarizer.BLOCK_SIZE_POWER * 2);\n                    if (max - min <= HybridBinarizer.MIN_DYNAMIC_RANGE) {\n                        // If variation within the block is low, assume this is a block with only light or only\n                        // dark pixels. In that case we do not want to use the average, as it would divide this\n                        // low contrast area into black and white pixels, essentially creating data out of noise.\n                        //\n                        // The default assumption is that the block is light/background. Since no estimate for\n                        // the level of dark pixels exists locally, use half the min for the block.\n                        average = min / 2;\n                        if (y > 0 && x > 0) {\n                            // Correct the \"white background\" assumption for blocks that have neighbors by comparing\n                            // the pixels in this block to the previously calculated black points. This is based on\n                            // the fact that dark barcode symbology is always surrounded by some amount of light\n                            // background for which reasonable black point estimates were made. The bp estimated at\n                            // the boundaries is used for the interior.\n                            // The (min < bp) is arbitrary but works better than other heuristics that were tried.\n                            const averageNeighborBlackPoint = (blackPoints[y - 1][x] + (2 * blackPoints[y][x - 1]) + blackPoints[y - 1][x - 1]) / 4;\n                            if (min < averageNeighborBlackPoint) {\n                                average = averageNeighborBlackPoint;\n                            }\n                        }\n                    }\n                    blackPoints[y][x] = average;\n                }\n            }\n            return blackPoints;\n        }\n    }\n    // This class uses 5x5 blocks to compute local luminance, where each block is 8x8 pixels.\n    // So this is the smallest dimension in each axis we can accept.\n    HybridBinarizer.BLOCK_SIZE_POWER = 3;\n    HybridBinarizer.BLOCK_SIZE = 1 << HybridBinarizer.BLOCK_SIZE_POWER; // ...0100...00\n    HybridBinarizer.BLOCK_SIZE_MASK = HybridBinarizer.BLOCK_SIZE - 1; // ...0011...11\n    HybridBinarizer.MINIMUM_DIMENSION = HybridBinarizer.BLOCK_SIZE * 5;\n    HybridBinarizer.MIN_DYNAMIC_RANGE = 24;\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * The purpose of this class hierarchy is to abstract different bitmap implementations across\n     * platforms into a standard interface for requesting greyscale luminance values. The interface\n     * only provides immutable methods; therefore crop and rotation create copies. This is to ensure\n     * that one Reader does not modify the original luminance source and leave it in an unknown state\n     * for other Readers in the chain.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class LuminanceSource {\n        constructor(width /*int*/, height /*int*/) {\n            this.width = width;\n            this.height = height;\n        }\n        /**\n         * @return The width of the bitmap.\n         */\n        getWidth() {\n            return this.width;\n        }\n        /**\n         * @return The height of the bitmap.\n         */\n        getHeight() {\n            return this.height;\n        }\n        /**\n         * @return Whether this subclass supports cropping.\n         */\n        isCropSupported() {\n            return false;\n        }\n        /**\n         * Returns a new object with cropped image data. Implementations may keep a reference to the\n         * original data rather than a copy. Only callable if isCropSupported() is true.\n         *\n         * @param left The left coordinate, which must be in [0,getWidth())\n         * @param top The top coordinate, which must be in [0,getHeight())\n         * @param width The width of the rectangle to crop.\n         * @param height The height of the rectangle to crop.\n         * @return A cropped version of this object.\n         */\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            throw new UnsupportedOperationException('This luminance source does not support cropping.');\n        }\n        /**\n         * @return Whether this subclass supports counter-clockwise rotation.\n         */\n        isRotateSupported() {\n            return false;\n        }\n        /**\n         * Returns a new object with rotated image data by 90 degrees counterclockwise.\n         * Only callable if {@link #isRotateSupported()} is true.\n         *\n         * @return A rotated version of this object.\n         */\n        rotateCounterClockwise() {\n            throw new UnsupportedOperationException('This luminance source does not support rotation by 90 degrees.');\n        }\n        /**\n         * Returns a new object with rotated image data by 45 degrees counterclockwise.\n         * Only callable if {@link #isRotateSupported()} is true.\n         *\n         * @return A rotated version of this object.\n         */\n        rotateCounterClockwise45() {\n            throw new UnsupportedOperationException('This luminance source does not support rotation by 45 degrees.');\n        }\n        /*@Override*/\n        toString() {\n            const row = new Uint8ClampedArray(this.width);\n            let result = new StringBuilder();\n            for (let y = 0; y < this.height; y++) {\n                const sourceRow = this.getRow(y, row);\n                for (let x = 0; x < this.width; x++) {\n                    const luminance = sourceRow[x] & 0xFF;\n                    let c;\n                    if (luminance < 0x40) {\n                        c = '#';\n                    }\n                    else if (luminance < 0x80) {\n                        c = '+';\n                    }\n                    else if (luminance < 0xC0) {\n                        c = '.';\n                    }\n                    else {\n                        c = ' ';\n                    }\n                    result.append(c);\n                }\n                result.append('\\n');\n            }\n            return result.toString();\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * A wrapper implementation of {@link LuminanceSource} which inverts the luminances it returns -- black becomes\n     * white and vice versa, and each value becomes (255-value).\n     *\n     * @author Sean Owen\n     */\n    class InvertedLuminanceSource extends LuminanceSource {\n        constructor(delegate) {\n            super(delegate.getWidth(), delegate.getHeight());\n            this.delegate = delegate;\n        }\n        /*@Override*/\n        getRow(y /*int*/, row) {\n            const sourceRow = this.delegate.getRow(y, row);\n            const width = this.getWidth();\n            for (let i = 0; i < width; i++) {\n                sourceRow[i] = /*(byte)*/ (255 - (sourceRow[i] & 0xFF));\n            }\n            return sourceRow;\n        }\n        /*@Override*/\n        getMatrix() {\n            const matrix = this.delegate.getMatrix();\n            const length = this.getWidth() * this.getHeight();\n            const invertedMatrix = new Uint8ClampedArray(length);\n            for (let i = 0; i < length; i++) {\n                invertedMatrix[i] = /*(byte)*/ (255 - (matrix[i] & 0xFF));\n            }\n            return invertedMatrix;\n        }\n        /*@Override*/\n        isCropSupported() {\n            return this.delegate.isCropSupported();\n        }\n        /*@Override*/\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            return new InvertedLuminanceSource(this.delegate.crop(left, top, width, height));\n        }\n        /*@Override*/\n        isRotateSupported() {\n            return this.delegate.isRotateSupported();\n        }\n        /**\n         * @return original delegate {@link LuminanceSource} since invert undoes itself\n         */\n        /*@Override*/\n        invert() {\n            return this.delegate;\n        }\n        /*@Override*/\n        rotateCounterClockwise() {\n            return new InvertedLuminanceSource(this.delegate.rotateCounterClockwise());\n        }\n        /*@Override*/\n        rotateCounterClockwise45() {\n            return new InvertedLuminanceSource(this.delegate.rotateCounterClockwise45());\n        }\n    }\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     */\n    class HTMLCanvasElementLuminanceSource extends LuminanceSource {\n        constructor(canvas) {\n            super(canvas.width, canvas.height);\n            this.canvas = canvas;\n            this.tempCanvasElement = null;\n            this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(canvas);\n        }\n        static makeBufferFromCanvasImageData(canvas) {\n            const imageData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);\n            return HTMLCanvasElementLuminanceSource.toGrayscaleBuffer(imageData.data, canvas.width, canvas.height);\n        }\n        static toGrayscaleBuffer(imageBuffer, width, height) {\n            const grayscaleBuffer = new Uint8ClampedArray(width * height);\n            for (let i = 0, j = 0, length = imageBuffer.length; i < length; i += 4, j++) {\n                let gray;\n                const alpha = imageBuffer[i + 3];\n                // The color of fully-transparent pixels is irrelevant. They are often, technically, fully-transparent\n                // black (0 alpha, and then 0 RGB). They are often used, of course as the \"white\" area in a\n                // barcode image. Force any such pixel to be white:\n                if (alpha === 0) {\n                    gray = 0xFF;\n                }\n                else {\n                    const pixelR = imageBuffer[i];\n                    const pixelG = imageBuffer[i + 1];\n                    const pixelB = imageBuffer[i + 2];\n                    // .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC),\n                    // (306*R) >> 10 is approximately equal to R*0.299, and so on.\n                    // 0x200 >> 10 is 0.5, it implements rounding.\n                    gray = (306 * pixelR +\n                        601 * pixelG +\n                        117 * pixelB +\n                        0x200) >> 10;\n                }\n                grayscaleBuffer[j] = gray;\n            }\n            return grayscaleBuffer;\n        }\n        getRow(y /*int*/, row) {\n            if (y < 0 || y >= this.getHeight()) {\n                throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n            }\n            const width = this.getWidth();\n            const start = y * width;\n            if (row === null) {\n                row = this.buffer.slice(start, start + width);\n            }\n            else {\n                if (row.length < width) {\n                    row = new Uint8ClampedArray(width);\n                }\n                // The underlying raster of image consists of bytes with the luminance values\n                // TODO: can avoid set/slice?\n                row.set(this.buffer.slice(start, start + width));\n            }\n            return row;\n        }\n        getMatrix() {\n            return this.buffer;\n        }\n        isCropSupported() {\n            return true;\n        }\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            super.crop(left, top, width, height);\n            return this;\n        }\n        /**\n         * This is always true, since the image is a gray-scale image.\n         *\n         * @return true\n         */\n        isRotateSupported() {\n            return true;\n        }\n        rotateCounterClockwise() {\n            this.rotate(-90);\n            return this;\n        }\n        rotateCounterClockwise45() {\n            this.rotate(-45);\n            return this;\n        }\n        getTempCanvasElement() {\n            if (null === this.tempCanvasElement) {\n                const tempCanvasElement = this.canvas.ownerDocument.createElement('canvas');\n                tempCanvasElement.width = this.canvas.width;\n                tempCanvasElement.height = this.canvas.height;\n                this.tempCanvasElement = tempCanvasElement;\n            }\n            return this.tempCanvasElement;\n        }\n        rotate(angle) {\n            const tempCanvasElement = this.getTempCanvasElement();\n            const tempContext = tempCanvasElement.getContext('2d');\n            const angleRadians = angle * HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS;\n            // Calculate and set new dimensions for temp canvas\n            const width = this.canvas.width;\n            const height = this.canvas.height;\n            const newWidth = Math.ceil(Math.abs(Math.cos(angleRadians)) * width + Math.abs(Math.sin(angleRadians)) * height);\n            const newHeight = Math.ceil(Math.abs(Math.sin(angleRadians)) * width + Math.abs(Math.cos(angleRadians)) * height);\n            tempCanvasElement.width = newWidth;\n            tempCanvasElement.height = newHeight;\n            // Draw at center of temp canvas to prevent clipping of image data\n            tempContext.translate(newWidth / 2, newHeight / 2);\n            tempContext.rotate(angleRadians);\n            tempContext.drawImage(this.canvas, width / -2, height / -2);\n            this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(tempCanvasElement);\n            return this;\n        }\n        invert() {\n            return new InvertedLuminanceSource(this);\n        }\n    }\n    HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS = Math.PI / 180;\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * Video input device metadata containing the id and label of the device if available.\n     */\n    class VideoInputDevice {\n        /**\n         * Creates an instance of VideoInputDevice.\n         *\n         * @param {string} deviceId the video input device id\n         * @param {string} label the label of the device if available\n         */\n        constructor(deviceId, label, groupId) {\n            this.deviceId = deviceId;\n            this.label = label;\n            /** @inheritdoc */\n            this.kind = 'videoinput';\n            this.groupId = groupId || undefined;\n        }\n        /** @inheritdoc */\n        toJSON() {\n            return {\n                kind: this.kind,\n                groupId: this.groupId,\n                deviceId: this.deviceId,\n                label: this.label,\n            };\n        }\n    }\n\n    var __awaiter = ((globalThis || global || self || window || undefined) && (globalThis || global || self || window || undefined).__awaiter) || function (thisArg, _arguments, P, generator) {\n        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n        return new (P || (P = Promise))(function (resolve, reject) {\n            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n            function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n            step((generator = generator.apply(thisArg, _arguments || [])).next());\n        });\n    };\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * Base class for browser code reader.\n     */\n    class BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserCodeReader.\n         * @param {Reader} reader The reader instance to decode the barcode\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent successful decode tries\n         *\n         * @memberOf BrowserCodeReader\n         */\n        constructor(reader, timeBetweenScansMillis = 500, _hints) {\n            this.reader = reader;\n            this.timeBetweenScansMillis = timeBetweenScansMillis;\n            this._hints = _hints;\n            /**\n             * This will break the loop.\n             */\n            this._stopContinuousDecode = false;\n            /**\n             * This will break the loop.\n             */\n            this._stopAsyncDecode = false;\n            /**\n             * Delay time between decode attempts made by the scanner.\n             */\n            this._timeBetweenDecodingAttempts = 0;\n        }\n        /**\n         * If navigator is present.\n         */\n        get hasNavigator() {\n            return typeof navigator !== 'undefined';\n        }\n        /**\n         * If mediaDevices under navigator is supported.\n         */\n        get isMediaDevicesSuported() {\n            return this.hasNavigator && !!navigator.mediaDevices;\n        }\n        /**\n         * If enumerateDevices under navigator is supported.\n         */\n        get canEnumerateDevices() {\n            return !!(this.isMediaDevicesSuported && navigator.mediaDevices.enumerateDevices);\n        }\n        /** Time between two decoding tries in milli seconds. */\n        get timeBetweenDecodingAttempts() {\n            return this._timeBetweenDecodingAttempts;\n        }\n        /**\n         * Change the time span the decoder waits between two decoding tries.\n         *\n         * @param {number} millis Time between two decoding tries in milli seconds.\n         */\n        set timeBetweenDecodingAttempts(millis) {\n            this._timeBetweenDecodingAttempts = millis < 0 ? 0 : millis;\n        }\n        /**\n         * Sets the hints.\n         */\n        set hints(hints) {\n            this._hints = hints || null;\n        }\n        /**\n         * Sets the hints.\n         */\n        get hints() {\n            return this._hints;\n        }\n        /**\n         * Lists all the available video input devices.\n         */\n        listVideoInputDevices() {\n            return __awaiter(this, void 0, void 0, function* () {\n                if (!this.hasNavigator) {\n                    throw new Error('Can\\'t enumerate devices, navigator is not present.');\n                }\n                if (!this.canEnumerateDevices) {\n                    throw new Error('Can\\'t enumerate devices, method not supported.');\n                }\n                const devices = yield navigator.mediaDevices.enumerateDevices();\n                const videoDevices = [];\n                for (const device of devices) {\n                    const kind = device.kind === 'video' ? 'videoinput' : device.kind;\n                    if (kind !== 'videoinput') {\n                        continue;\n                    }\n                    const deviceId = device.deviceId || device.id;\n                    const label = device.label || `Video device ${videoDevices.length + 1}`;\n                    const groupId = device.groupId;\n                    const videoDevice = { deviceId, label, kind, groupId };\n                    videoDevices.push(videoDevice);\n                }\n                return videoDevices;\n            });\n        }\n        /**\n         * Obtain the list of available devices with type 'videoinput'.\n         *\n         * @returns {Promise<VideoInputDevice[]>} an array of available video input devices\n         *\n         * @memberOf BrowserCodeReader\n         *\n         * @deprecated Use `listVideoInputDevices` instead.\n         */\n        getVideoInputDevices() {\n            return __awaiter(this, void 0, void 0, function* () {\n                const devices = yield this.listVideoInputDevices();\n                return devices.map(d => new VideoInputDevice(d.deviceId, d.label));\n            });\n        }\n        /**\n         * Let's you find a device using it's Id.\n         */\n        findDeviceById(deviceId) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const devices = yield this.listVideoInputDevices();\n                if (!devices) {\n                    return null;\n                }\n                return devices.find(x => x.deviceId === deviceId);\n            });\n        }\n        /**\n         * Decodes the barcode from the device specified by deviceId while showing the video in the specified video element.\n         *\n         * @param deviceId the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n         * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         *\n         * @deprecated Use `decodeOnceFromVideoDevice` instead.\n         */\n        decodeFromInputVideoDevice(deviceId, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                return yield this.decodeOnceFromVideoDevice(deviceId, videoSource);\n            });\n        }\n        /**\n         * In one attempt, tries to decode the barcode from the device specified by deviceId while showing the video in the specified video element.\n         *\n         * @param deviceId the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n         * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeOnceFromVideoDevice(deviceId, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                this.reset();\n                let videoConstraints;\n                if (!deviceId) {\n                    videoConstraints = { facingMode: 'environment' };\n                }\n                else {\n                    videoConstraints = { deviceId: { exact: deviceId } };\n                }\n                const constraints = { video: videoConstraints };\n                return yield this.decodeOnceFromConstraints(constraints, videoSource);\n            });\n        }\n        /**\n         * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n         *\n         * @param constraints the media stream constraints to get s valid media stream to decode from\n         * @param video the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeOnceFromConstraints(constraints, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const stream = yield navigator.mediaDevices.getUserMedia(constraints);\n                return yield this.decodeOnceFromStream(stream, videoSource);\n            });\n        }\n        /**\n         * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n         *\n         * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n         * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeOnceFromStream(stream, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                this.reset();\n                const video = yield this.attachStreamToVideo(stream, videoSource);\n                const result = yield this.decodeOnce(video);\n                return result;\n            });\n        }\n        /**\n         * Continuously decodes the barcode from the device specified by device while showing the video in the specified video element.\n         *\n         * @param {string|null} [deviceId] the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n         * @param {string|HTMLVideoElement|null} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<void>}\n         *\n         * @memberOf BrowserCodeReader\n         *\n         * @deprecated Use `decodeFromVideoDevice` instead.\n         */\n        decodeFromInputVideoDeviceContinuously(deviceId, videoSource, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                return yield this.decodeFromVideoDevice(deviceId, videoSource, callbackFn);\n            });\n        }\n        /**\n         * Continuously tries to decode the barcode from the device specified by device while showing the video in the specified video element.\n         *\n         * @param {string|null} [deviceId] the id of one of the devices obtained after calling getVideoInputDevices. Can be undefined, in this case it will decode from one of the available devices, preffering the main camera (environment facing) if available.\n         * @param {string|HTMLVideoElement|null} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<void>}\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromVideoDevice(deviceId, videoSource, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                let videoConstraints;\n                if (!deviceId) {\n                    videoConstraints = { facingMode: 'environment' };\n                }\n                else {\n                    videoConstraints = { deviceId: { exact: deviceId } };\n                }\n                const constraints = { video: videoConstraints };\n                return yield this.decodeFromConstraints(constraints, videoSource, callbackFn);\n            });\n        }\n        /**\n         * Continuously tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n         *\n         * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n         * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromConstraints(constraints, videoSource, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const stream = yield navigator.mediaDevices.getUserMedia(constraints);\n                return yield this.decodeFromStream(stream, videoSource, callbackFn);\n            });\n        }\n        /**\n         * In one attempt, tries to decode the barcode from a stream obtained from the given constraints while showing the video in the specified video element.\n         *\n         * @param {MediaStream} [constraints] the media stream constraints to get s valid media stream to decode from\n         * @param {string|HTMLVideoElement} [video] the video element in page where to show the video while decoding. Can be either an element id or directly an HTMLVideoElement. Can be undefined, in which case no video will be shown.\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromStream(stream, videoSource, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                this.reset();\n                const video = yield this.attachStreamToVideo(stream, videoSource);\n                return yield this.decodeContinuously(video, callbackFn);\n            });\n        }\n        /**\n         * Breaks the decoding loop.\n         */\n        stopAsyncDecode() {\n            this._stopAsyncDecode = true;\n        }\n        /**\n         * Breaks the decoding loop.\n         */\n        stopContinuousDecode() {\n            this._stopContinuousDecode = true;\n        }\n        /**\n         * Sets the new stream and request a new decoding-with-delay.\n         *\n         * @param stream The stream to be shown in the video element.\n         * @param decodeFn A callback for the decode method.\n         */\n        attachStreamToVideo(stream, videoSource) {\n            return __awaiter(this, void 0, void 0, function* () {\n                const videoElement = this.prepareVideoElement(videoSource);\n                this.addVideoSource(videoElement, stream);\n                this.videoElement = videoElement;\n                this.stream = stream;\n                yield this.playVideoOnLoadAsync(videoElement);\n                return videoElement;\n            });\n        }\n        /**\n         *\n         * @param videoElement\n         */\n        playVideoOnLoadAsync(videoElement) {\n            return new Promise((resolve, reject) => this.playVideoOnLoad(videoElement, () => resolve()));\n        }\n        /**\n         * Binds listeners and callbacks to the videoElement.\n         *\n         * @param element\n         * @param callbackFn\n         */\n        playVideoOnLoad(element, callbackFn) {\n            this.videoEndedListener = () => this.stopStreams();\n            this.videoCanPlayListener = () => this.tryPlayVideo(element);\n            element.addEventListener('ended', this.videoEndedListener);\n            element.addEventListener('canplay', this.videoCanPlayListener);\n            element.addEventListener('playing', callbackFn);\n            // if canplay was already fired, we won't know when to play, so just give it a try\n            this.tryPlayVideo(element);\n        }\n        /**\n         * Checks if the given video element is currently playing.\n         */\n        isVideoPlaying(video) {\n            return video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2;\n        }\n        /**\n         * Just tries to play the video and logs any errors.\n         * The play call is only made is the video is not already playing.\n         */\n        tryPlayVideo(videoElement) {\n            return __awaiter(this, void 0, void 0, function* () {\n                if (this.isVideoPlaying(videoElement)) {\n                    console.warn('Trying to play video that is already playing.');\n                    return;\n                }\n                try {\n                    yield videoElement.play();\n                }\n                catch (_a) {\n                    console.warn('It was not possible to play the video.');\n                }\n            });\n        }\n        /**\n         * Searches and validates a media element.\n         */\n        getMediaElement(mediaElementId, type) {\n            const mediaElement = document.getElementById(mediaElementId);\n            if (!mediaElement) {\n                throw new ArgumentException(`element with id '${mediaElementId}' not found`);\n            }\n            if (mediaElement.nodeName.toLowerCase() !== type.toLowerCase()) {\n                throw new ArgumentException(`element with id '${mediaElementId}' must be an ${type} element`);\n            }\n            return mediaElement;\n        }\n        /**\n         * Decodes the barcode from an image.\n         *\n         * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n         * @param {string} [url]\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromImage(source, url) {\n            if (!source && !url) {\n                throw new ArgumentException('either imageElement with a src set or an url must be provided');\n            }\n            if (url && !source) {\n                return this.decodeFromImageUrl(url);\n            }\n            return this.decodeFromImageElement(source);\n        }\n        /**\n         * Decodes the barcode from a video.\n         *\n         * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n         * @param {string} [url]\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        decodeFromVideo(source, url) {\n            if (!source && !url) {\n                throw new ArgumentException('Either an element with a src set or an URL must be provided');\n            }\n            if (url && !source) {\n                return this.decodeFromVideoUrl(url);\n            }\n            return this.decodeFromVideoElement(source);\n        }\n        /**\n         * Decodes continuously the barcode from a video.\n         *\n         * @param {(string|HTMLImageElement)} [source] The image element that can be either an element id or the element itself. Can be undefined in which case the decoding will be done from the imageUrl parameter.\n         * @param {string} [url]\n         * @returns {Promise<Result>} The decoding result.\n         *\n         * @memberOf BrowserCodeReader\n         *\n         * @experimental\n         */\n        decodeFromVideoContinuously(source, url, callbackFn) {\n            if (undefined === source && undefined === url) {\n                throw new ArgumentException('Either an element with a src set or an URL must be provided');\n            }\n            if (url && !source) {\n                return this.decodeFromVideoUrlContinuously(url, callbackFn);\n            }\n            return this.decodeFromVideoElementContinuously(source, callbackFn);\n        }\n        /**\n         * Decodes something from an image HTML element.\n         */\n        decodeFromImageElement(source) {\n            if (!source) {\n                throw new ArgumentException('An image element must be provided.');\n            }\n            this.reset();\n            const element = this.prepareImageElement(source);\n            this.imageElement = element;\n            let task;\n            if (this.isImageLoaded(element)) {\n                task = this.decodeOnce(element, false, true);\n            }\n            else {\n                task = this._decodeOnLoadImage(element);\n            }\n            return task;\n        }\n        /**\n         * Decodes something from an image HTML element.\n         */\n        decodeFromVideoElement(source) {\n            const element = this._decodeFromVideoElementSetup(source);\n            return this._decodeOnLoadVideo(element);\n        }\n        /**\n         * Decodes something from an image HTML element.\n         */\n        decodeFromVideoElementContinuously(source, callbackFn) {\n            const element = this._decodeFromVideoElementSetup(source);\n            return this._decodeOnLoadVideoContinuously(element, callbackFn);\n        }\n        /**\n         * Sets up the video source so it can be decoded when loaded.\n         *\n         * @param source The video source element.\n         */\n        _decodeFromVideoElementSetup(source) {\n            if (!source) {\n                throw new ArgumentException('A video element must be provided.');\n            }\n            this.reset();\n            const element = this.prepareVideoElement(source);\n            // defines the video element before starts decoding\n            this.videoElement = element;\n            return element;\n        }\n        /**\n         * Decodes an image from a URL.\n         */\n        decodeFromImageUrl(url) {\n            if (!url) {\n                throw new ArgumentException('An URL must be provided.');\n            }\n            this.reset();\n            const element = this.prepareImageElement();\n            this.imageElement = element;\n            const decodeTask = this._decodeOnLoadImage(element);\n            element.src = url;\n            return decodeTask;\n        }\n        /**\n         * Decodes an image from a URL.\n         */\n        decodeFromVideoUrl(url) {\n            if (!url) {\n                throw new ArgumentException('An URL must be provided.');\n            }\n            this.reset();\n            // creates a new element\n            const element = this.prepareVideoElement();\n            const decodeTask = this.decodeFromVideoElement(element);\n            element.src = url;\n            return decodeTask;\n        }\n        /**\n         * Decodes an image from a URL.\n         *\n         * @experimental\n         */\n        decodeFromVideoUrlContinuously(url, callbackFn) {\n            if (!url) {\n                throw new ArgumentException('An URL must be provided.');\n            }\n            this.reset();\n            // creates a new element\n            const element = this.prepareVideoElement();\n            const decodeTask = this.decodeFromVideoElementContinuously(element, callbackFn);\n            element.src = url;\n            return decodeTask;\n        }\n        _decodeOnLoadImage(element) {\n            return new Promise((resolve, reject) => {\n                this.imageLoadedListener = () => this.decodeOnce(element, false, true).then(resolve, reject);\n                element.addEventListener('load', this.imageLoadedListener);\n            });\n        }\n        _decodeOnLoadVideo(videoElement) {\n            return __awaiter(this, void 0, void 0, function* () {\n                // plays the video\n                yield this.playVideoOnLoadAsync(videoElement);\n                // starts decoding after played the video\n                return yield this.decodeOnce(videoElement);\n            });\n        }\n        _decodeOnLoadVideoContinuously(videoElement, callbackFn) {\n            return __awaiter(this, void 0, void 0, function* () {\n                // plays the video\n                yield this.playVideoOnLoadAsync(videoElement);\n                // starts decoding after played the video\n                this.decodeContinuously(videoElement, callbackFn);\n            });\n        }\n        isImageLoaded(img) {\n            // During the onload event, IE correctly identifies any images that\n            // weren\u2019t downloaded as not complete. Others should too. Gecko-based\n            // browsers act like NS4 in that they report this incorrectly.\n            if (!img.complete) {\n                return false;\n            }\n            // However, they do have two very useful properties: naturalWidth and\n            // naturalHeight. These give the true size of the image. If it failed\n            // to load, either of these should be zero.\n            if (img.naturalWidth === 0) {\n                return false;\n            }\n            // No other way of checking: assume it\u2019s ok.\n            return true;\n        }\n        prepareImageElement(imageSource) {\n            let imageElement;\n            if (typeof imageSource === 'undefined') {\n                imageElement = document.createElement('img');\n                imageElement.width = 200;\n                imageElement.height = 200;\n            }\n            if (typeof imageSource === 'string') {\n                imageElement = this.getMediaElement(imageSource, 'img');\n            }\n            if (imageSource instanceof HTMLImageElement) {\n                imageElement = imageSource;\n            }\n            return imageElement;\n        }\n        /**\n         * Sets a HTMLVideoElement for scanning or creates a new one.\n         *\n         * @param videoSource The HTMLVideoElement to be set.\n         */\n        prepareVideoElement(videoSource) {\n            let videoElement;\n            if (!videoSource && typeof document !== 'undefined') {\n                videoElement = document.createElement('video');\n                videoElement.width = 200;\n                videoElement.height = 200;\n            }\n            if (typeof videoSource === 'string') {\n                videoElement = this.getMediaElement(videoSource, 'video');\n            }\n            if (videoSource instanceof HTMLVideoElement) {\n                videoElement = videoSource;\n            }\n            // Needed for iOS 11\n            videoElement.setAttribute('autoplay', 'true');\n            videoElement.setAttribute('muted', 'true');\n            videoElement.setAttribute('playsinline', 'true');\n            return videoElement;\n        }\n        /**\n         * Tries to decode from the video input until it finds some value.\n         */\n        decodeOnce(element, retryIfNotFound = true, retryIfChecksumOrFormatError = true) {\n            this._stopAsyncDecode = false;\n            const loop = (resolve, reject) => {\n                if (this._stopAsyncDecode) {\n                    reject(new NotFoundException('Video stream has ended before any code could be detected.'));\n                    this._stopAsyncDecode = undefined;\n                    return;\n                }\n                try {\n                    const result = this.decode(element);\n                    resolve(result);\n                }\n                catch (e) {\n                    const ifNotFound = retryIfNotFound && e instanceof NotFoundException;\n                    const isChecksumOrFormatError = e instanceof ChecksumException || e instanceof FormatException;\n                    const ifChecksumOrFormat = isChecksumOrFormatError && retryIfChecksumOrFormatError;\n                    if (ifNotFound || ifChecksumOrFormat) {\n                        // trying again\n                        return setTimeout(loop, this._timeBetweenDecodingAttempts, resolve, reject);\n                    }\n                    reject(e);\n                }\n            };\n            return new Promise((resolve, reject) => loop(resolve, reject));\n        }\n        /**\n         * Continuously decodes from video input.\n         */\n        decodeContinuously(element, callbackFn) {\n            this._stopContinuousDecode = false;\n            const loop = () => {\n                if (this._stopContinuousDecode) {\n                    this._stopContinuousDecode = undefined;\n                    return;\n                }\n                try {\n                    const result = this.decode(element);\n                    callbackFn(result, null);\n                    setTimeout(loop, this.timeBetweenScansMillis);\n                }\n                catch (e) {\n                    callbackFn(null, e);\n                    const isChecksumOrFormatError = e instanceof ChecksumException || e instanceof FormatException;\n                    const isNotFound = e instanceof NotFoundException;\n                    if (isChecksumOrFormatError || isNotFound) {\n                        // trying again\n                        setTimeout(loop, this._timeBetweenDecodingAttempts);\n                    }\n                }\n            };\n            loop();\n        }\n        /**\n         * Gets the BinaryBitmap for ya! (and decodes it)\n         */\n        decode(element) {\n            // get binary bitmap for decode function\n            const binaryBitmap = this.createBinaryBitmap(element);\n            return this.decodeBitmap(binaryBitmap);\n        }\n        /**\n         * Returns true if media element is indeed a {@link HtmlVideoElement}.\n         */\n        _isHTMLVideoElement(mediaElement) {\n            const potentialVideo = mediaElement;\n            return potentialVideo.videoWidth !== 0;\n        }\n        /**\n         * Overwriting this allows you to manipulate the next frame in anyway\n         * you want before decode.\n         */\n        drawFrameOnCanvas(\n            srcElement, dimensions, canvasElementContext) {\n            if (!dimensions) {\n                dimensions = {\n                    sx: 0,\n                    sy: 0,\n                    sWidth: srcElement.videoWidth,\n                    sHeight: srcElement.videoHeight,\n                    dx: 0,\n                    dy: 0,\n                    dWidth: srcElement.videoWidth,\n                    dHeight: srcElement.videoHeight};\n            }\n            if (!canvasElementContext) {\n                canvasElementContext = this.captureCanvasContext;\n            }\n            canvasElementContext.drawImage(\n                srcElement,\n                dimensions.sx,\n                dimensions.sy,\n                dimensions.sWidth,\n                dimensions.sHeight,\n                dimensions.dx,\n                dimensions.dy,\n                dimensions.dWidth,\n                dimensions.dHeight);\n        }\n        /**\n         * Ovewriting this allows you to manipulate the snapshot image in anyway\n         *  you want before decode.\n         */\n        drawImageOnCanvas(\n            srcElement,\n            dimensions,\n            canvasElementContext = this.captureCanvasContext) {\n            if (!dimensions) {\n                dimensions = {\n                    sx: 0,\n                    sy: 0,\n                    sWidth: srcElement.naturalWidth,\n                    sHeight: srcElement.naturalHeight,\n                    dx: 0,\n                    dy: 0,\n                    dWidth: srcElement.naturalWidth,\n                    dHeight: srcElement.naturalHeight\n                };\n            }\n            if (!canvasElementContext) {\n                canvasElementContext = this.captureCanvasContext;\n            }\n            canvasElementContext.drawImage(\n                srcElement,\n                dimensions.sx,\n                dimensions.sy,\n                dimensions.sWidth,\n                dimensions.sHeight,\n                dimensions.dx,\n                dimensions.dy,\n                dimensions.dWidth,\n                dimensions.dHeight);\n        }\n        /**\n         * Creates a binaryBitmap based in some image source.\n         *\n         * @param mediaElement HTML element containing drawable image source.\n         */\n        createBinaryBitmap(mediaElement) {\n            const ctx = this.getCaptureCanvasContext(mediaElement);\n            if (this._isHTMLVideoElement(mediaElement)) {\n                this.drawFrameOnCanvas(mediaElement);\n            } else {\n                this.drawImageOnCanvas(mediaElement);\n            }\n            const canvas = this.getCaptureCanvas(mediaElement);\n            const luminanceSource = new HTMLCanvasElementLuminanceSource(canvas);\n            const hybridBinarizer = new HybridBinarizer(luminanceSource);\n\n            return new BinaryBitmap(hybridBinarizer);\n        }\n\n        getCaptureCanvasContext(mediaElement) {\n            if (!this.captureCanvasContext) {\n                const elem = this.getCaptureCanvas(mediaElement);\n                const ctx = elem.getContext('2d');\n                this.captureCanvasContext = ctx;\n            }\n            return this.captureCanvasContext;\n        }\n        getCaptureCanvas(mediaElement) {\n            if (!this.captureCanvas) {\n                const elem = this.createCaptureCanvas(mediaElement);\n                this.captureCanvas = elem;\n            }\n            return this.captureCanvas;\n        }\n        /**\n         * Call the encapsulated readers decode\n         */\n        decodeBitmap(binaryBitmap) {\n            return this.reader.decode(binaryBitmap, this._hints);\n        }\n        /**\n         * \uD83D\uDD8C Prepares the canvas for capture and scan frames.\n         */\n        createCaptureCanvas(mediaElement) {\n            if (typeof document === 'undefined') {\n                this._destroyCaptureCanvas();\n                return null;\n            }\n            const canvasElement = document.createElement('canvas');\n            let width;\n            let height;\n            if (typeof mediaElement !== 'undefined') {\n                if (mediaElement instanceof HTMLVideoElement) {\n                    width = mediaElement.videoWidth;\n                    height = mediaElement.videoHeight;\n                }\n                else if (mediaElement instanceof HTMLImageElement) {\n                    width = mediaElement.naturalWidth || mediaElement.width;\n                    height = mediaElement.naturalHeight || mediaElement.height;\n                }\n            }\n            canvasElement.style.width = width + 'px';\n            canvasElement.style.height = height + 'px';\n            canvasElement.width = width;\n            canvasElement.height = height;\n            return canvasElement;\n        }\n        /**\n         * Stops the continuous scan and cleans the stream.\n         */\n        stopStreams() {\n            if (this.stream) {\n                this.stream.getVideoTracks().forEach(t => t.stop());\n                this.stream = undefined;\n            }\n            if (this._stopAsyncDecode === false) {\n                this.stopAsyncDecode();\n            }\n            if (this._stopContinuousDecode === false) {\n                this.stopContinuousDecode();\n            }\n        }\n        /**\n         * Resets the code reader to the initial state. Cancels any ongoing barcode scanning from video or camera.\n         *\n         * @memberOf BrowserCodeReader\n         */\n        reset() {\n            // stops the camera, preview and scan \uD83D\uDD34\n            this.stopStreams();\n            // clean and forget about HTML elements\n            this._destroyVideoElement();\n            this._destroyImageElement();\n            this._destroyCaptureCanvas();\n        }\n        _destroyVideoElement() {\n            if (!this.videoElement) {\n                return;\n            }\n            // first gives freedon to the element \uD83D\uDD4A\n            if (typeof this.videoEndedListener !== 'undefined') {\n                this.videoElement.removeEventListener('ended', this.videoEndedListener);\n            }\n            if (typeof this.videoPlayingEventListener !== 'undefined') {\n                this.videoElement.removeEventListener('playing', this.videoPlayingEventListener);\n            }\n            if (typeof this.videoCanPlayListener !== 'undefined') {\n                this.videoElement.removeEventListener('loadedmetadata', this.videoCanPlayListener);\n            }\n            // then forgets about that element \uD83D\uDE22\n            this.cleanVideoSource(this.videoElement);\n            this.videoElement = undefined;\n        }\n        _destroyImageElement() {\n            if (!this.imageElement) {\n                return;\n            }\n            // first gives freedon to the element \uD83D\uDD4A\n            if (undefined !== this.imageLoadedListener) {\n                this.imageElement.removeEventListener('load', this.imageLoadedListener);\n            }\n            // then forget about that element \uD83D\uDE22\n            this.imageElement.src = undefined;\n            this.imageElement.removeAttribute('src');\n            this.imageElement = undefined;\n        }\n        /**\n         * Cleans canvas references \uD83D\uDD8C\n         */\n        _destroyCaptureCanvas() {\n            // then forget about that element \uD83D\uDE22\n            this.captureCanvasContext = undefined;\n            this.captureCanvas = undefined;\n        }\n        /**\n         * Defines what the videoElement src will be.\n         *\n         * @param videoElement\n         * @param stream\n         */\n        addVideoSource(videoElement, stream) {\n            // Older browsers may not have `srcObject`\n            try {\n                // @note Throws Exception if interrupted by a new loaded request\n                videoElement.srcObject = stream;\n            }\n            catch (err) {\n                // @note Avoid using this in new browsers, as it is going away.\n                videoElement.src = URL.createObjectURL(stream);\n            }\n        }\n        /**\n         * Unbinds a HTML video src property.\n         *\n         * @param videoElement\n         */\n        cleanVideoSource(videoElement) {\n            try {\n                videoElement.srcObject = null;\n            }\n            catch (err) {\n                videoElement.src = '';\n            }\n            this.videoElement.removeAttribute('src');\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates the result of decoding a barcode within an image.</p>\n     *\n     * @author Sean Owen\n     */\n    class Result {\n        // public constructor(private text: string,\n        //               Uint8Array rawBytes,\n        //               ResultPoconst resultPoints: Int32Array,\n        //               BarcodeFormat format) {\n        //   this(text, rawBytes, resultPoints, format, System.currentTimeMillis())\n        // }\n        // public constructor(text: string,\n        //               Uint8Array rawBytes,\n        //               ResultPoconst resultPoints: Int32Array,\n        //               BarcodeFormat format,\n        //               long timestamp) {\n        //   this(text, rawBytes, rawBytes == null ? 0 : 8 * rawBytes.length,\n        //        resultPoints, format, timestamp)\n        // }\n        constructor(text, rawBytes, numBits = rawBytes == null ? 0 : 8 * rawBytes.length, resultPoints, format, timestamp = System.currentTimeMillis()) {\n            this.text = text;\n            this.rawBytes = rawBytes;\n            this.numBits = numBits;\n            this.resultPoints = resultPoints;\n            this.format = format;\n            this.timestamp = timestamp;\n            this.text = text;\n            this.rawBytes = rawBytes;\n            if (undefined === numBits || null === numBits) {\n                this.numBits = (rawBytes === null || rawBytes === undefined) ? 0 : 8 * rawBytes.length;\n            }\n            else {\n                this.numBits = numBits;\n            }\n            this.resultPoints = resultPoints;\n            this.format = format;\n            this.resultMetadata = null;\n            if (undefined === timestamp || null === timestamp) {\n                this.timestamp = System.currentTimeMillis();\n            }\n            else {\n                this.timestamp = timestamp;\n            }\n        }\n        /**\n         * @return raw text encoded by the barcode\n         */\n        getText() {\n            return this.text;\n        }\n        /**\n         * @return raw bytes encoded by the barcode, if applicable, otherwise {@code null}\n         */\n        getRawBytes() {\n            return this.rawBytes;\n        }\n        /**\n         * @return how many bits of {@link #getRawBytes()} are valid; typically 8 times its length\n         * @since 3.3.0\n         */\n        getNumBits() {\n            return this.numBits;\n        }\n        /**\n         * @return points related to the barcode in the image. These are typically points\n         *         identifying finder patterns or the corners of the barcode. The exact meaning is\n         *         specific to the type of barcode that was decoded.\n         */\n        getResultPoints() {\n            return this.resultPoints;\n        }\n        /**\n         * @return {@link BarcodeFormat} representing the format of the barcode that was decoded\n         */\n        getBarcodeFormat() {\n            return this.format;\n        }\n        /**\n         * @return {@link Map} mapping {@link ResultMetadataType} keys to values. May be\n         *   {@code null}. This contains optional metadata about what was detected about the barcode,\n         *   like orientation.\n         */\n        getResultMetadata() {\n            return this.resultMetadata;\n        }\n        putMetadata(type, value) {\n            if (this.resultMetadata === null) {\n                this.resultMetadata = new Map();\n            }\n            this.resultMetadata.set(type, value);\n        }\n        putAllMetadata(metadata) {\n            if (metadata !== null) {\n                if (this.resultMetadata === null) {\n                    this.resultMetadata = metadata;\n                }\n                else {\n                    this.resultMetadata = new Map(metadata);\n                }\n            }\n        }\n        addResultPoints(newPoints) {\n            const oldPoints = this.resultPoints;\n            if (oldPoints === null) {\n                this.resultPoints = newPoints;\n            }\n            else if (newPoints !== null && newPoints.length > 0) {\n                const allPoints = new Array(oldPoints.length + newPoints.length);\n                System.arraycopy(oldPoints, 0, allPoints, 0, oldPoints.length);\n                System.arraycopy(newPoints, 0, allPoints, oldPoints.length, newPoints.length);\n                this.resultPoints = allPoints;\n            }\n        }\n        getTimestamp() {\n            return this.timestamp;\n        }\n        /*@Override*/\n        toString() {\n            return this.text;\n        }\n    }\n\n    /*\n     * Direct port to TypeScript of ZXing by Adrian To\u0219c\u0103\n     */\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * Enumerates barcode formats known to this package. Please keep alphabetized.\n     *\n     * @author Sean Owen\n     */\n    var BarcodeFormat;\n    (function (BarcodeFormat) {\n        /** Aztec 2D barcode format. */\n        BarcodeFormat[BarcodeFormat[\"AZTEC\"] = 0] = \"AZTEC\";\n        /** CODABAR 1D format. */\n        BarcodeFormat[BarcodeFormat[\"CODABAR\"] = 1] = \"CODABAR\";\n        /** Code 39 1D format. */\n        BarcodeFormat[BarcodeFormat[\"CODE_39\"] = 2] = \"CODE_39\";\n        /** Code 93 1D format. */\n        BarcodeFormat[BarcodeFormat[\"CODE_93\"] = 3] = \"CODE_93\";\n        /** Code 128 1D format. */\n        BarcodeFormat[BarcodeFormat[\"CODE_128\"] = 4] = \"CODE_128\";\n        /** Data Matrix 2D barcode format. */\n        BarcodeFormat[BarcodeFormat[\"DATA_MATRIX\"] = 5] = \"DATA_MATRIX\";\n        /** EAN-8 1D format. */\n        BarcodeFormat[BarcodeFormat[\"EAN_8\"] = 6] = \"EAN_8\";\n        /** EAN-13 1D format. */\n        BarcodeFormat[BarcodeFormat[\"EAN_13\"] = 7] = \"EAN_13\";\n        /** ITF (Interleaved Two of Five) 1D format. */\n        BarcodeFormat[BarcodeFormat[\"ITF\"] = 8] = \"ITF\";\n        /** MaxiCode 2D barcode format. */\n        BarcodeFormat[BarcodeFormat[\"MAXICODE\"] = 9] = \"MAXICODE\";\n        /** PDF417 format. */\n        BarcodeFormat[BarcodeFormat[\"PDF_417\"] = 10] = \"PDF_417\";\n        /** QR Code 2D barcode format. */\n        BarcodeFormat[BarcodeFormat[\"QR_CODE\"] = 11] = \"QR_CODE\";\n        /** RSS 14 */\n        BarcodeFormat[BarcodeFormat[\"RSS_14\"] = 12] = \"RSS_14\";\n        /** RSS EXPANDED */\n        BarcodeFormat[BarcodeFormat[\"RSS_EXPANDED\"] = 13] = \"RSS_EXPANDED\";\n        /** UPC-A 1D format. */\n        BarcodeFormat[BarcodeFormat[\"UPC_A\"] = 14] = \"UPC_A\";\n        /** UPC-E 1D format. */\n        BarcodeFormat[BarcodeFormat[\"UPC_E\"] = 15] = \"UPC_E\";\n        /** UPC/EAN extension format. Not a stand-alone format. */\n        BarcodeFormat[BarcodeFormat[\"UPC_EAN_EXTENSION\"] = 16] = \"UPC_EAN_EXTENSION\";\n    })(BarcodeFormat || (BarcodeFormat = {}));\n    var BarcodeFormat$1 = BarcodeFormat;\n\n    /*namespace com.google.zxing {*/\n    /**\n     * Represents some type of metadata about the result of the decoding that the decoder\n     * wishes to communicate back to the caller.\n     *\n     * @author Sean Owen\n     */\n    var ResultMetadataType;\n    (function (ResultMetadataType) {\n        /**\n         * Unspecified, application-specific metadata. Maps to an unspecified {@link Object}.\n         */\n        ResultMetadataType[ResultMetadataType[\"OTHER\"] = 0] = \"OTHER\";\n        /**\n         * Denotes the likely approximate orientation of the barcode in the image. This value\n         * is given as degrees rotated clockwise from the normal, upright orientation.\n         * For example a 1D barcode which was found by reading top-to-bottom would be\n         * said to have orientation \"90\". This key maps to an {@link Integer} whose\n         * value is in the range [0,360).\n         */\n        ResultMetadataType[ResultMetadataType[\"ORIENTATION\"] = 1] = \"ORIENTATION\";\n        /**\n         * <p>2D barcode formats typically encode text, but allow for a sort of 'byte mode'\n         * which is sometimes used to encode binary data. While {@link Result} makes available\n         * the complete raw bytes in the barcode for these formats, it does not offer the bytes\n         * from the byte segments alone.</p>\n         *\n         * <p>This maps to a {@link java.util.List} of byte arrays corresponding to the\n         * raw bytes in the byte segments in the barcode, in order.</p>\n         */\n        ResultMetadataType[ResultMetadataType[\"BYTE_SEGMENTS\"] = 2] = \"BYTE_SEGMENTS\";\n        /**\n         * Error correction level used, if applicable. The value type depends on the\n         * format, but is typically a String.\n         */\n        ResultMetadataType[ResultMetadataType[\"ERROR_CORRECTION_LEVEL\"] = 3] = \"ERROR_CORRECTION_LEVEL\";\n        /**\n         * For some periodicals, indicates the issue number as an {@link Integer}.\n         */\n        ResultMetadataType[ResultMetadataType[\"ISSUE_NUMBER\"] = 4] = \"ISSUE_NUMBER\";\n        /**\n         * For some products, indicates the suggested retail price in the barcode as a\n         * formatted {@link String}.\n         */\n        ResultMetadataType[ResultMetadataType[\"SUGGESTED_PRICE\"] = 5] = \"SUGGESTED_PRICE\";\n        /**\n         * For some products, the possible country of manufacture as a {@link String} denoting the\n         * ISO country code. Some map to multiple possible countries, like \"US/CA\".\n         */\n        ResultMetadataType[ResultMetadataType[\"POSSIBLE_COUNTRY\"] = 6] = \"POSSIBLE_COUNTRY\";\n        /**\n         * For some products, the extension text\n         */\n        ResultMetadataType[ResultMetadataType[\"UPC_EAN_EXTENSION\"] = 7] = \"UPC_EAN_EXTENSION\";\n        /**\n         * PDF417-specific metadata\n         */\n        ResultMetadataType[ResultMetadataType[\"PDF417_EXTRA_METADATA\"] = 8] = \"PDF417_EXTRA_METADATA\";\n        /**\n         * If the code format supports structured append and the current scanned code is part of one then the\n         * sequence number is given with it.\n         */\n        ResultMetadataType[ResultMetadataType[\"STRUCTURED_APPEND_SEQUENCE\"] = 9] = \"STRUCTURED_APPEND_SEQUENCE\";\n        /**\n         * If the code format supports structured append and the current scanned code is part of one then the\n         * parity is given with it.\n         */\n        ResultMetadataType[ResultMetadataType[\"STRUCTURED_APPEND_PARITY\"] = 10] = \"STRUCTURED_APPEND_PARITY\";\n    })(ResultMetadataType || (ResultMetadataType = {}));\n    var ResultMetadataType$1 = ResultMetadataType;\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing.common {*/\n    /*import java.util.List;*/\n    /**\n     * <p>Encapsulates the result of decoding a matrix of bits. This typically\n     * applies to 2D barcode formats. For now it contains the raw bytes obtained,\n     * as well as a String interpretation of those bytes, if applicable.</p>\n     *\n     * @author Sean Owen\n     */\n    class DecoderResult {\n        // public constructor(rawBytes: Uint8Array,\n        //                      text: string,\n        //                      List<Uint8Array> byteSegments,\n        //                      String ecLevel) {\n        //   this(rawBytes, text, byteSegments, ecLevel, -1, -1)\n        // }\n        constructor(rawBytes, text, byteSegments, ecLevel, structuredAppendSequenceNumber = -1, structuredAppendParity = -1) {\n            this.rawBytes = rawBytes;\n            this.text = text;\n            this.byteSegments = byteSegments;\n            this.ecLevel = ecLevel;\n            this.structuredAppendSequenceNumber = structuredAppendSequenceNumber;\n            this.structuredAppendParity = structuredAppendParity;\n            this.numBits = (rawBytes === undefined || rawBytes === null) ? 0 : 8 * rawBytes.length;\n        }\n        /**\n         * @return raw bytes representing the result, or {@code null} if not applicable\n         */\n        getRawBytes() {\n            return this.rawBytes;\n        }\n        /**\n         * @return how many bits of {@link #getRawBytes()} are valid; typically 8 times its length\n         * @since 3.3.0\n         */\n        getNumBits() {\n            return this.numBits;\n        }\n        /**\n         * @param numBits overrides the number of bits that are valid in {@link #getRawBytes()}\n         * @since 3.3.0\n         */\n        setNumBits(numBits /*int*/) {\n            this.numBits = numBits;\n        }\n        /**\n         * @return text representation of the result\n         */\n        getText() {\n            return this.text;\n        }\n        /**\n         * @return list of byte segments in the result, or {@code null} if not applicable\n         */\n        getByteSegments() {\n            return this.byteSegments;\n        }\n        /**\n         * @return name of error correction level used, or {@code null} if not applicable\n         */\n        getECLevel() {\n            return this.ecLevel;\n        }\n        /**\n         * @return number of errors corrected, or {@code null} if not applicable\n         */\n        getErrorsCorrected() {\n            return this.errorsCorrected;\n        }\n        setErrorsCorrected(errorsCorrected /*Integer*/) {\n            this.errorsCorrected = errorsCorrected;\n        }\n        /**\n         * @return number of erasures corrected, or {@code null} if not applicable\n         */\n        getErasures() {\n            return this.erasures;\n        }\n        setErasures(erasures /*Integer*/) {\n            this.erasures = erasures;\n        }\n        /**\n         * @return arbitrary additional metadata\n         */\n        getOther() {\n            return this.other;\n        }\n        setOther(other) {\n            this.other = other;\n        }\n        hasStructuredAppend() {\n            return this.structuredAppendParity >= 0 && this.structuredAppendSequenceNumber >= 0;\n        }\n        getStructuredAppendParity() {\n            return this.structuredAppendParity;\n        }\n        getStructuredAppendSequenceNumber() {\n            return this.structuredAppendSequenceNumber;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>This class contains utility methods for performing mathematical operations over\n     * the Galois Fields. Operations use a given primitive polynomial in calculations.</p>\n     *\n     * <p>Throughout this package, elements of the GF are represented as an {@code int}\n     * for convenience and speed (but at the cost of memory).\n     * </p>\n     *\n     * @author Sean Owen\n     * @author David Olivier\n     */\n    class AbstractGenericGF {\n        /**\n         * @return 2 to the power of a in GF(size)\n         */\n        exp(a) {\n            return this.expTable[a];\n        }\n        /**\n         * @return base 2 log of a in GF(size)\n         */\n        log(a /*int*/) {\n            if (a === 0) {\n                throw new IllegalArgumentException();\n            }\n            return this.logTable[a];\n        }\n        /**\n         * Implements both addition and subtraction -- they are the same in GF(size).\n         *\n         * @return sum/difference of a and b\n         */\n        static addOrSubtract(a /*int*/, b /*int*/) {\n            return a ^ b;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Represents a polynomial whose coefficients are elements of a GF.\n     * Instances of this class are immutable.</p>\n     *\n     * <p>Much credit is due to William Rucklidge since portions of this code are an indirect\n     * port of his C++ Reed-Solomon implementation.</p>\n     *\n     * @author Sean Owen\n     */\n    class GenericGFPoly {\n        /**\n         * @param field the {@link GenericGF} instance representing the field to use\n         * to perform computations\n         * @param coefficients coefficients as ints representing elements of GF(size), arranged\n         * from most significant (highest-power term) coefficient to least significant\n         * @throws IllegalArgumentException if argument is null or empty,\n         * or if leading coefficient is 0 and this is not a\n         * constant polynomial (that is, it is not the monomial \"0\")\n         */\n        constructor(field, coefficients) {\n            if (coefficients.length === 0) {\n                throw new IllegalArgumentException();\n            }\n            this.field = field;\n            const coefficientsLength = coefficients.length;\n            if (coefficientsLength > 1 && coefficients[0] === 0) {\n                // Leading term must be non-zero for anything except the constant polynomial \"0\"\n                let firstNonZero = 1;\n                while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {\n                    firstNonZero++;\n                }\n                if (firstNonZero === coefficientsLength) {\n                    this.coefficients = Int32Array.from([0]);\n                }\n                else {\n                    this.coefficients = new Int32Array(coefficientsLength - firstNonZero);\n                    System.arraycopy(coefficients, firstNonZero, this.coefficients, 0, this.coefficients.length);\n                }\n            }\n            else {\n                this.coefficients = coefficients;\n            }\n        }\n        getCoefficients() {\n            return this.coefficients;\n        }\n        /**\n         * @return degree of this polynomial\n         */\n        getDegree() {\n            return this.coefficients.length - 1;\n        }\n        /**\n         * @return true iff this polynomial is the monomial \"0\"\n         */\n        isZero() {\n            return this.coefficients[0] === 0;\n        }\n        /**\n         * @return coefficient of x^degree term in this polynomial\n         */\n        getCoefficient(degree /*int*/) {\n            return this.coefficients[this.coefficients.length - 1 - degree];\n        }\n        /**\n         * @return evaluation of this polynomial at a given point\n         */\n        evaluateAt(a /*int*/) {\n            if (a === 0) {\n                // Just return the x^0 coefficient\n                return this.getCoefficient(0);\n            }\n            const coefficients = this.coefficients;\n            let result;\n            if (a === 1) {\n                // Just the sum of the coefficients\n                result = 0;\n                for (let i = 0, length = coefficients.length; i !== length; i++) {\n                    const coefficient = coefficients[i];\n                    result = AbstractGenericGF.addOrSubtract(result, coefficient);\n                }\n                return result;\n            }\n            result = coefficients[0];\n            const size = coefficients.length;\n            const field = this.field;\n            for (let i = 1; i < size; i++) {\n                result = AbstractGenericGF.addOrSubtract(field.multiply(a, result), coefficients[i]);\n            }\n            return result;\n        }\n        addOrSubtract(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n            }\n            if (this.isZero()) {\n                return other;\n            }\n            if (other.isZero()) {\n                return this;\n            }\n            let smallerCoefficients = this.coefficients;\n            let largerCoefficients = other.coefficients;\n            if (smallerCoefficients.length > largerCoefficients.length) {\n                const temp = smallerCoefficients;\n                smallerCoefficients = largerCoefficients;\n                largerCoefficients = temp;\n            }\n            let sumDiff = new Int32Array(largerCoefficients.length);\n            const lengthDiff = largerCoefficients.length - smallerCoefficients.length;\n            // Copy high-order terms only found in higher-degree polynomial's coefficients\n            System.arraycopy(largerCoefficients, 0, sumDiff, 0, lengthDiff);\n            for (let i = lengthDiff; i < largerCoefficients.length; i++) {\n                sumDiff[i] = AbstractGenericGF.addOrSubtract(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);\n            }\n            return new GenericGFPoly(this.field, sumDiff);\n        }\n        multiply(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n            }\n            if (this.isZero() || other.isZero()) {\n                return this.field.getZero();\n            }\n            const aCoefficients = this.coefficients;\n            const aLength = aCoefficients.length;\n            const bCoefficients = other.coefficients;\n            const bLength = bCoefficients.length;\n            const product = new Int32Array(aLength + bLength - 1);\n            const field = this.field;\n            for (let i = 0; i < aLength; i++) {\n                const aCoeff = aCoefficients[i];\n                for (let j = 0; j < bLength; j++) {\n                    product[i + j] = AbstractGenericGF.addOrSubtract(product[i + j], field.multiply(aCoeff, bCoefficients[j]));\n                }\n            }\n            return new GenericGFPoly(field, product);\n        }\n        multiplyScalar(scalar /*int*/) {\n            if (scalar === 0) {\n                return this.field.getZero();\n            }\n            if (scalar === 1) {\n                return this;\n            }\n            const size = this.coefficients.length;\n            const field = this.field;\n            const product = new Int32Array(size);\n            const coefficients = this.coefficients;\n            for (let i = 0; i < size; i++) {\n                product[i] = field.multiply(coefficients[i], scalar);\n            }\n            return new GenericGFPoly(field, product);\n        }\n        multiplyByMonomial(degree /*int*/, coefficient /*int*/) {\n            if (degree < 0) {\n                throw new IllegalArgumentException();\n            }\n            if (coefficient === 0) {\n                return this.field.getZero();\n            }\n            const coefficients = this.coefficients;\n            const size = coefficients.length;\n            const product = new Int32Array(size + degree);\n            const field = this.field;\n            for (let i = 0; i < size; i++) {\n                product[i] = field.multiply(coefficients[i], coefficient);\n            }\n            return new GenericGFPoly(field, product);\n        }\n        divide(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('GenericGFPolys do not have same GenericGF field');\n            }\n            if (other.isZero()) {\n                throw new IllegalArgumentException('Divide by 0');\n            }\n            const field = this.field;\n            let quotient = field.getZero();\n            let remainder = this;\n            const denominatorLeadingTerm = other.getCoefficient(other.getDegree());\n            const inverseDenominatorLeadingTerm = field.inverse(denominatorLeadingTerm);\n            while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {\n                const degreeDifference = remainder.getDegree() - other.getDegree();\n                const scale = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);\n                const term = other.multiplyByMonomial(degreeDifference, scale);\n                const iterationQuotient = field.buildMonomial(degreeDifference, scale);\n                quotient = quotient.addOrSubtract(iterationQuotient);\n                remainder = remainder.addOrSubtract(term);\n            }\n            return [quotient, remainder];\n        }\n        /*@Override*/\n        toString() {\n            let result = '';\n            for (let degree = this.getDegree(); degree >= 0; degree--) {\n                let coefficient = this.getCoefficient(degree);\n                if (coefficient !== 0) {\n                    if (coefficient < 0) {\n                        result += ' - ';\n                        coefficient = -coefficient;\n                    }\n                    else {\n                        if (result.length > 0) {\n                            result += ' + ';\n                        }\n                    }\n                    if (degree === 0 || coefficient !== 1) {\n                        const alphaPower = this.field.log(coefficient);\n                        if (alphaPower === 0) {\n                            result += '1';\n                        }\n                        else if (alphaPower === 1) {\n                            result += 'a';\n                        }\n                        else {\n                            result += 'a^';\n                            result += alphaPower;\n                        }\n                    }\n                    if (degree !== 0) {\n                        if (degree === 1) {\n                            result += 'x';\n                        }\n                        else {\n                            result += 'x^';\n                            result += degree;\n                        }\n                    }\n                }\n            }\n            return result;\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ArithmeticException extends Exception {\n    }\n    ArithmeticException.kind = 'ArithmeticException';\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>This class contains utility methods for performing mathematical operations over\n     * the Galois Fields. Operations use a given primitive polynomial in calculations.</p>\n     *\n     * <p>Throughout this package, elements of the GF are represented as an {@code int}\n     * for convenience and speed (but at the cost of memory).\n     * </p>\n     *\n     * @author Sean Owen\n     * @author David Olivier\n     */\n    class GenericGF extends AbstractGenericGF {\n        /**\n         * Create a representation of GF(size) using the given primitive polynomial.\n         *\n         * @param primitive irreducible polynomial whose coefficients are represented by\n         *  the bits of an int, where the least-significant bit represents the constant\n         *  coefficient\n         * @param size the size of the field\n         * @param b the factor b in the generator polynomial can be 0- or 1-based\n         *  (g(x) = (x+a^b)(x+a^(b+1))...(x+a^(b+2t-1))).\n         *  In most cases it should be 1, but for QR code it is 0.\n         */\n        constructor(primitive /*int*/, size /*int*/, generatorBase /*int*/) {\n            super();\n            this.primitive = primitive;\n            this.size = size;\n            this.generatorBase = generatorBase;\n            const expTable = new Int32Array(size);\n            let x = 1;\n            for (let i = 0; i < size; i++) {\n                expTable[i] = x;\n                x *= 2; // we're assuming the generator alpha is 2\n                if (x >= size) {\n                    x ^= primitive;\n                    x &= size - 1;\n                }\n            }\n            this.expTable = expTable;\n            const logTable = new Int32Array(size);\n            for (let i = 0; i < size - 1; i++) {\n                logTable[expTable[i]] = i;\n            }\n            this.logTable = logTable;\n            // logTable[0] == 0 but this should never be used\n            this.zero = new GenericGFPoly(this, Int32Array.from([0]));\n            this.one = new GenericGFPoly(this, Int32Array.from([1]));\n        }\n        getZero() {\n            return this.zero;\n        }\n        getOne() {\n            return this.one;\n        }\n        /**\n         * @return the monomial representing coefficient * x^degree\n         */\n        buildMonomial(degree /*int*/, coefficient /*int*/) {\n            if (degree < 0) {\n                throw new IllegalArgumentException();\n            }\n            if (coefficient === 0) {\n                return this.zero;\n            }\n            const coefficients = new Int32Array(degree + 1);\n            coefficients[0] = coefficient;\n            return new GenericGFPoly(this, coefficients);\n        }\n        /**\n         * @return multiplicative inverse of a\n         */\n        inverse(a /*int*/) {\n            if (a === 0) {\n                throw new ArithmeticException();\n            }\n            return this.expTable[this.size - this.logTable[a] - 1];\n        }\n        /**\n         * @return product of a and b in GF(size)\n         */\n        multiply(a /*int*/, b /*int*/) {\n            if (a === 0 || b === 0) {\n                return 0;\n            }\n            return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.size - 1)];\n        }\n        getSize() {\n            return this.size;\n        }\n        getGeneratorBase() {\n            return this.generatorBase;\n        }\n        /*@Override*/\n        toString() {\n            return ('GF(0x' + Integer.toHexString(this.primitive) + ',' + this.size + ')');\n        }\n        equals(o) {\n            return o === this;\n        }\n    }\n    GenericGF.AZTEC_DATA_12 = new GenericGF(0x1069, 4096, 1); // x^12 + x^6 + x^5 + x^3 + 1\n    GenericGF.AZTEC_DATA_10 = new GenericGF(0x409, 1024, 1); // x^10 + x^3 + 1\n    GenericGF.AZTEC_DATA_6 = new GenericGF(0x43, 64, 1); // x^6 + x + 1\n    GenericGF.AZTEC_PARAM = new GenericGF(0x13, 16, 1); // x^4 + x + 1\n    GenericGF.QR_CODE_FIELD_256 = new GenericGF(0x011d, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1\n    GenericGF.DATA_MATRIX_FIELD_256 = new GenericGF(0x012d, 256, 1); // x^8 + x^5 + x^3 + x^2 + 1\n    GenericGF.AZTEC_DATA_8 = GenericGF.DATA_MATRIX_FIELD_256;\n    GenericGF.MAXICODE_FIELD_64 = GenericGF.AZTEC_DATA_6;\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ReedSolomonException extends Exception {\n    }\n    ReedSolomonException.kind = 'ReedSolomonException';\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class IllegalStateException extends Exception {\n    }\n    IllegalStateException.kind = 'IllegalStateException';\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Implements Reed-Solomon decoding, as the name implies.</p>\n     *\n     * <p>The algorithm will not be explained here, but the following references were helpful\n     * in creating this implementation:</p>\n     *\n     * <ul>\n     * <li>Bruce Maggs.\n     * <a href=\"http://www.cs.cmu.edu/afs/cs.cmu.edu/project/pscico-guyb/realworld/www/rs_decode.ps\">\n     * \"Decoding Reed-Solomon Codes\"</a> (see discussion of Forney's Formula)</li>\n     * <li>J.I. Hall. <a href=\"www.mth.msu.edu/~jhall/classes/codenotes/GRS.pdf\">\n     * \"Chapter 5. Generalized Reed-Solomon Codes\"</a>\n     * (see discussion of Euclidean algorithm)</li>\n     * </ul>\n     *\n     * <p>Much credit is due to William Rucklidge since portions of this code are an indirect\n     * port of his C++ Reed-Solomon implementation.</p>\n     *\n     * @author Sean Owen\n     * @author William Rucklidge\n     * @author sanfordsquires\n     */\n    class ReedSolomonDecoder {\n        constructor(field) {\n            this.field = field;\n        }\n        /**\n         * <p>Decodes given set of received codewords, which include both data and error-correction\n         * codewords. Really, this means it uses Reed-Solomon to detect and correct errors, in-place,\n         * in the input.</p>\n         *\n         * @param received data and error-correction codewords\n         * @param twoS number of error-correction codewords available\n         * @throws ReedSolomonException if decoding fails for any reason\n         */\n        decode(received, twoS /*int*/) {\n            const field = this.field;\n            const poly = new GenericGFPoly(field, received);\n            const syndromeCoefficients = new Int32Array(twoS);\n            let noError = true;\n            for (let i = 0; i < twoS; i++) {\n                const evalResult = poly.evaluateAt(field.exp(i + field.getGeneratorBase()));\n                syndromeCoefficients[syndromeCoefficients.length - 1 - i] = evalResult;\n                if (evalResult !== 0) {\n                    noError = false;\n                }\n            }\n            if (noError) {\n                return;\n            }\n            const syndrome = new GenericGFPoly(field, syndromeCoefficients);\n            const sigmaOmega = this.runEuclideanAlgorithm(field.buildMonomial(twoS, 1), syndrome, twoS);\n            const sigma = sigmaOmega[0];\n            const omega = sigmaOmega[1];\n            const errorLocations = this.findErrorLocations(sigma);\n            const errorMagnitudes = this.findErrorMagnitudes(omega, errorLocations);\n            for (let i = 0; i < errorLocations.length; i++) {\n                const position = received.length - 1 - field.log(errorLocations[i]);\n                if (position < 0) {\n                    throw new ReedSolomonException('Bad error location');\n                }\n                received[position] = GenericGF.addOrSubtract(received[position], errorMagnitudes[i]);\n            }\n        }\n        runEuclideanAlgorithm(a, b, R /*int*/) {\n            // Assume a's degree is >= b's\n            if (a.getDegree() < b.getDegree()) {\n                const temp = a;\n                a = b;\n                b = temp;\n            }\n            const field = this.field;\n            let rLast = a;\n            let r = b;\n            let tLast = field.getZero();\n            let t = field.getOne();\n            // Run Euclidean algorithm until r's degree is less than R/2\n            while (r.getDegree() >= (R / 2 | 0)) {\n                let rLastLast = rLast;\n                let tLastLast = tLast;\n                rLast = r;\n                tLast = t;\n                // Divide rLastLast by rLast, with quotient in q and remainder in r\n                if (rLast.isZero()) {\n                    // Oops, Euclidean algorithm already terminated?\n                    throw new ReedSolomonException('r_{i-1} was zero');\n                }\n                r = rLastLast;\n                let q = field.getZero();\n                const denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());\n                const dltInverse = field.inverse(denominatorLeadingTerm);\n                while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {\n                    const degreeDiff = r.getDegree() - rLast.getDegree();\n                    const scale = field.multiply(r.getCoefficient(r.getDegree()), dltInverse);\n                    q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale));\n                    r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale));\n                }\n                t = q.multiply(tLast).addOrSubtract(tLastLast);\n                if (r.getDegree() >= rLast.getDegree()) {\n                    throw new IllegalStateException('Division algorithm failed to reduce polynomial?');\n                }\n            }\n            const sigmaTildeAtZero = t.getCoefficient(0);\n            if (sigmaTildeAtZero === 0) {\n                throw new ReedSolomonException('sigmaTilde(0) was zero');\n            }\n            const inverse = field.inverse(sigmaTildeAtZero);\n            const sigma = t.multiplyScalar(inverse);\n            const omega = r.multiplyScalar(inverse);\n            return [sigma, omega];\n        }\n        findErrorLocations(errorLocator) {\n            // This is a direct application of Chien's search\n            const numErrors = errorLocator.getDegree();\n            if (numErrors === 1) { // shortcut\n                return Int32Array.from([errorLocator.getCoefficient(1)]);\n            }\n            const result = new Int32Array(numErrors);\n            let e = 0;\n            const field = this.field;\n            for (let i = 1; i < field.getSize() && e < numErrors; i++) {\n                if (errorLocator.evaluateAt(i) === 0) {\n                    result[e] = field.inverse(i);\n                    e++;\n                }\n            }\n            if (e !== numErrors) {\n                throw new ReedSolomonException('Error locator degree does not match number of roots');\n            }\n            return result;\n        }\n        findErrorMagnitudes(errorEvaluator, errorLocations) {\n            // This is directly applying Forney's Formula\n            const s = errorLocations.length;\n            const result = new Int32Array(s);\n            const field = this.field;\n            for (let i = 0; i < s; i++) {\n                const xiInverse = field.inverse(errorLocations[i]);\n                let denominator = 1;\n                for (let j = 0; j < s; j++) {\n                    if (i !== j) {\n                        // denominator = field.multiply(denominator,\n                        //    GenericGF.addOrSubtract(1, field.multiply(errorLocations[j], xiInverse)))\n                        // Above should work but fails on some Apple and Linux JDKs due to a Hotspot bug.\n                        // Below is a funny-looking workaround from Steven Parkes\n                        const term = field.multiply(errorLocations[j], xiInverse);\n                        const termPlus1 = (term & 0x1) === 0 ? term | 1 : term & ~1;\n                        denominator = field.multiply(denominator, termPlus1);\n                    }\n                }\n                result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse), field.inverse(denominator));\n                if (field.getGeneratorBase() !== 0) {\n                    result[i] = field.multiply(result[i], xiInverse);\n                }\n            }\n            return result;\n        }\n    }\n\n    /*\n     * Copyright 2010 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // import java.util.Arrays;\n    var Table;\n    (function (Table) {\n        Table[Table[\"UPPER\"] = 0] = \"UPPER\";\n        Table[Table[\"LOWER\"] = 1] = \"LOWER\";\n        Table[Table[\"MIXED\"] = 2] = \"MIXED\";\n        Table[Table[\"DIGIT\"] = 3] = \"DIGIT\";\n        Table[Table[\"PUNCT\"] = 4] = \"PUNCT\";\n        Table[Table[\"BINARY\"] = 5] = \"BINARY\";\n    })(Table || (Table = {}));\n    /**\n     * <p>The main class which implements Aztec Code decoding -- as opposed to locating and extracting\n     * the Aztec Code from an image.</p>\n     *\n     * @author David Olivier\n     */\n    class Decoder {\n        decode(detectorResult) {\n            this.ddata = detectorResult;\n            let matrix = detectorResult.getBits();\n            let rawbits = this.extractBits(matrix);\n            let correctedBits = this.correctBits(rawbits);\n            let rawBytes = Decoder.convertBoolArrayToByteArray(correctedBits);\n            let result = Decoder.getEncodedData(correctedBits);\n            let decoderResult = new DecoderResult(rawBytes, result, null, null);\n            decoderResult.setNumBits(correctedBits.length);\n            return decoderResult;\n        }\n        // This method is used for testing the high-level encoder\n        static highLevelDecode(correctedBits) {\n            return this.getEncodedData(correctedBits);\n        }\n        /**\n         * Gets the string encoded in the aztec code bits\n         *\n         * @return the decoded string\n         */\n        static getEncodedData(correctedBits) {\n            let endIndex = correctedBits.length;\n            let latchTable = Table.UPPER; // table most recently latched to\n            let shiftTable = Table.UPPER; // table to use for the next read\n            let result = '';\n            let index = 0;\n            while (index < endIndex) {\n                if (shiftTable === Table.BINARY) {\n                    if (endIndex - index < 5) {\n                        break;\n                    }\n                    let length = Decoder.readCode(correctedBits, index, 5);\n                    index += 5;\n                    if (length === 0) {\n                        if (endIndex - index < 11) {\n                            break;\n                        }\n                        length = Decoder.readCode(correctedBits, index, 11) + 31;\n                        index += 11;\n                    }\n                    for (let charCount = 0; charCount < length; charCount++) {\n                        if (endIndex - index < 8) {\n                            index = endIndex; // Force outer loop to exit\n                            break;\n                        }\n                        const code = Decoder.readCode(correctedBits, index, 8);\n                        result += /*(char)*/ StringUtils.castAsNonUtf8Char(code);\n                        index += 8;\n                    }\n                    // Go back to whatever mode we had been in\n                    shiftTable = latchTable;\n                }\n                else {\n                    let size = shiftTable === Table.DIGIT ? 4 : 5;\n                    if (endIndex - index < size) {\n                        break;\n                    }\n                    let code = Decoder.readCode(correctedBits, index, size);\n                    index += size;\n                    let str = Decoder.getCharacter(shiftTable, code);\n                    if (str.startsWith('CTRL_')) {\n                        // Table changes\n                        // ISO/IEC 24778:2008 prescribes ending a shift sequence in the mode from which it was invoked.\n                        // That's including when that mode is a shift.\n                        // Our test case dlusbs.png for issue #642 exercises that.\n                        latchTable = shiftTable; // Latch the current mode, so as to return to Upper after U/S B/S\n                        shiftTable = Decoder.getTable(str.charAt(5));\n                        if (str.charAt(6) === 'L') {\n                            latchTable = shiftTable;\n                        }\n                    }\n                    else {\n                        result += str;\n                        // Go back to whatever mode we had been in\n                        shiftTable = latchTable;\n                    }\n                }\n            }\n            return result;\n        }\n        /**\n         * gets the table corresponding to the char passed\n         */\n        static getTable(t) {\n            switch (t) {\n                case 'L':\n                    return Table.LOWER;\n                case 'P':\n                    return Table.PUNCT;\n                case 'M':\n                    return Table.MIXED;\n                case 'D':\n                    return Table.DIGIT;\n                case 'B':\n                    return Table.BINARY;\n                case 'U':\n                default:\n                    return Table.UPPER;\n            }\n        }\n        /**\n         * Gets the character (or string) corresponding to the passed code in the given table\n         *\n         * @param table the table used\n         * @param code the code of the character\n         */\n        static getCharacter(table, code) {\n            switch (table) {\n                case Table.UPPER:\n                    return Decoder.UPPER_TABLE[code];\n                case Table.LOWER:\n                    return Decoder.LOWER_TABLE[code];\n                case Table.MIXED:\n                    return Decoder.MIXED_TABLE[code];\n                case Table.PUNCT:\n                    return Decoder.PUNCT_TABLE[code];\n                case Table.DIGIT:\n                    return Decoder.DIGIT_TABLE[code];\n                default:\n                    // Should not reach here.\n                    throw new IllegalStateException('Bad table');\n            }\n        }\n        /**\n         * <p>Performs RS error correction on an array of bits.</p>\n         *\n         * @return the corrected array\n         * @throws FormatException if the input contains too many errors\n         */\n        correctBits(rawbits) {\n            let gf;\n            let codewordSize;\n            if (this.ddata.getNbLayers() <= 2) {\n                codewordSize = 6;\n                gf = GenericGF.AZTEC_DATA_6;\n            }\n            else if (this.ddata.getNbLayers() <= 8) {\n                codewordSize = 8;\n                gf = GenericGF.AZTEC_DATA_8;\n            }\n            else if (this.ddata.getNbLayers() <= 22) {\n                codewordSize = 10;\n                gf = GenericGF.AZTEC_DATA_10;\n            }\n            else {\n                codewordSize = 12;\n                gf = GenericGF.AZTEC_DATA_12;\n            }\n            let numDataCodewords = this.ddata.getNbDatablocks();\n            let numCodewords = rawbits.length / codewordSize;\n            if (numCodewords < numDataCodewords) {\n                throw new FormatException();\n            }\n            let offset = rawbits.length % codewordSize;\n            let dataWords = new Int32Array(numCodewords);\n            for (let i = 0; i < numCodewords; i++, offset += codewordSize) {\n                dataWords[i] = Decoder.readCode(rawbits, offset, codewordSize);\n            }\n            try {\n                let rsDecoder = new ReedSolomonDecoder(gf);\n                rsDecoder.decode(dataWords, numCodewords - numDataCodewords);\n            }\n            catch (ex) {\n                throw new FormatException(ex);\n            }\n            // Now perform the unstuffing operation.\n            // First, count how many bits are going to be thrown out as stuffing\n            let mask = (1 << codewordSize) - 1;\n            let stuffedBits = 0;\n            for (let i = 0; i < numDataCodewords; i++) {\n                let dataWord = dataWords[i];\n                if (dataWord === 0 || dataWord === mask) {\n                    throw new FormatException();\n                }\n                else if (dataWord === 1 || dataWord === mask - 1) {\n                    stuffedBits++;\n                }\n            }\n            // Now, actually unpack the bits and remove the stuffing\n            let correctedBits = new Array(numDataCodewords * codewordSize - stuffedBits);\n            let index = 0;\n            for (let i = 0; i < numDataCodewords; i++) {\n                let dataWord = dataWords[i];\n                if (dataWord === 1 || dataWord === mask - 1) {\n                    // next codewordSize-1 bits are all zeros or all ones\n                    correctedBits.fill(dataWord > 1, index, index + codewordSize - 1);\n                    // Arrays.fill(correctedBits, index, index + codewordSize - 1, dataWord > 1);\n                    index += codewordSize - 1;\n                }\n                else {\n                    for (let bit = codewordSize - 1; bit >= 0; --bit) {\n                        correctedBits[index++] = (dataWord & (1 << bit)) !== 0;\n                    }\n                }\n            }\n            return correctedBits;\n        }\n        /**\n         * Gets the array of bits from an Aztec Code matrix\n         *\n         * @return the array of bits\n         */\n        extractBits(matrix) {\n            let compact = this.ddata.isCompact();\n            let layers = this.ddata.getNbLayers();\n            let baseMatrixSize = (compact ? 11 : 14) + layers * 4; // not including alignment lines\n            let alignmentMap = new Int32Array(baseMatrixSize);\n            let rawbits = new Array(this.totalBitsInLayer(layers, compact));\n            if (compact) {\n                for (let i = 0; i < alignmentMap.length; i++) {\n                    alignmentMap[i] = i;\n                }\n            }\n            else {\n                let matrixSize = baseMatrixSize + 1 + 2 * Integer.truncDivision((Integer.truncDivision(baseMatrixSize, 2) - 1), 15);\n                let origCenter = baseMatrixSize / 2;\n                let center = Integer.truncDivision(matrixSize, 2);\n                for (let i = 0; i < origCenter; i++) {\n                    let newOffset = i + Integer.truncDivision(i, 15);\n                    alignmentMap[origCenter - i - 1] = center - newOffset - 1;\n                    alignmentMap[origCenter + i] = center + newOffset + 1;\n                }\n            }\n            for (let i = 0, rowOffset = 0; i < layers; i++) {\n                let rowSize = (layers - i) * 4 + (compact ? 9 : 12);\n                // The top-left most point of this layer is <low, low> (not including alignment lines)\n                let low = i * 2;\n                // The bottom-right most point of this layer is <high, high> (not including alignment lines)\n                let high = baseMatrixSize - 1 - low;\n                // We pull bits from the two 2 x rowSize columns and two rowSize x 2 rows\n                for (let j = 0; j < rowSize; j++) {\n                    let columnOffset = j * 2;\n                    for (let k = 0; k < 2; k++) {\n                        // left column\n                        rawbits[rowOffset + columnOffset + k] =\n                            matrix.get(alignmentMap[low + k], alignmentMap[low + j]);\n                        // bottom row\n                        rawbits[rowOffset + 2 * rowSize + columnOffset + k] =\n                            matrix.get(alignmentMap[low + j], alignmentMap[high - k]);\n                        // right column\n                        rawbits[rowOffset + 4 * rowSize + columnOffset + k] =\n                            matrix.get(alignmentMap[high - k], alignmentMap[high - j]);\n                        // top row\n                        rawbits[rowOffset + 6 * rowSize + columnOffset + k] =\n                            matrix.get(alignmentMap[high - j], alignmentMap[low + k]);\n                    }\n                }\n                rowOffset += rowSize * 8;\n            }\n            return rawbits;\n        }\n        /**\n         * Reads a code of given length and at given index in an array of bits\n         */\n        static readCode(rawbits, startIndex, length) {\n            let res = 0;\n            for (let i = startIndex; i < startIndex + length; i++) {\n                res <<= 1;\n                if (rawbits[i]) {\n                    res |= 0x01;\n                }\n            }\n            return res;\n        }\n        /**\n         * Reads a code of length 8 in an array of bits, padding with zeros\n         */\n        static readByte(rawbits, startIndex) {\n            let n = rawbits.length - startIndex;\n            if (n >= 8) {\n                return Decoder.readCode(rawbits, startIndex, 8);\n            }\n            return Decoder.readCode(rawbits, startIndex, n) << (8 - n);\n        }\n        /**\n         * Packs a bit array into bytes, most significant bit first\n         */\n        static convertBoolArrayToByteArray(boolArr) {\n            let byteArr = new Uint8Array((boolArr.length + 7) / 8);\n            for (let i = 0; i < byteArr.length; i++) {\n                byteArr[i] = Decoder.readByte(boolArr, 8 * i);\n            }\n            return byteArr;\n        }\n        totalBitsInLayer(layers, compact) {\n            return ((compact ? 88 : 112) + 16 * layers) * layers;\n        }\n    }\n    Decoder.UPPER_TABLE = [\n        'CTRL_PS', ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',\n        'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'CTRL_LL', 'CTRL_ML', 'CTRL_DL', 'CTRL_BS'\n    ];\n    Decoder.LOWER_TABLE = [\n        'CTRL_PS', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',\n        'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'CTRL_US', 'CTRL_ML', 'CTRL_DL', 'CTRL_BS'\n    ];\n    Decoder.MIXED_TABLE = [\n        // Module parse failed: Octal literal in strict mode (50:29)\n        // so number string were scaped\n        'CTRL_PS', ' ', '\\\\1', '\\\\2', '\\\\3', '\\\\4', '\\\\5', '\\\\6', '\\\\7', '\\b', '\\t', '\\n',\n        '\\\\13', '\\f', '\\r', '\\\\33', '\\\\34', '\\\\35', '\\\\36', '\\\\37', '@', '\\\\', '^', '_',\n        '`', '|', '~', '\\\\177', 'CTRL_LL', 'CTRL_UL', 'CTRL_PL', 'CTRL_BS'\n    ];\n    Decoder.PUNCT_TABLE = [\n        '', '\\r', '\\r\\n', '. ', ', ', ': ', '!', '\"', '#', '$', '%', '&', '\\'', '(', ')',\n        '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '[', ']', '{', '}', 'CTRL_UL'\n    ];\n    Decoder.DIGIT_TABLE = [\n        'CTRL_PS', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '.', 'CTRL_UL', 'CTRL_US'\n    ];\n\n    /*\n     * Copyright 2012 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing.common.detector {*/\n    /**\n     * General math-related and numeric utility functions.\n     */\n    class MathUtils {\n        constructor() { }\n        /**\n         * Ends up being a bit faster than {@link Math#round(float)}. This merely rounds its\n         * argument to the nearest int, where x.5 rounds up to x+1. Semantics of this shortcut\n         * differ slightly from {@link Math#round(float)} in that half rounds down for negative\n         * values. -2.5 rounds to -3, not -2. For purposes here it makes no difference.\n         *\n         * @param d real value to round\n         * @return nearest {@code int}\n         */\n        static round(d /*float*/) {\n            if (NaN === d)\n                return 0;\n            if (d <= Number.MIN_SAFE_INTEGER)\n                return Number.MIN_SAFE_INTEGER;\n            if (d >= Number.MAX_SAFE_INTEGER)\n                return Number.MAX_SAFE_INTEGER;\n            return /*(int) */ (d + (d < 0.0 ? -0.5 : 0.5)) | 0;\n        }\n        // TYPESCRIPTPORT: maybe remove round method and call directly Math.round, it looks like it doesn't make sense for js\n        /**\n         * @param aX point A x coordinate\n         * @param aY point A y coordinate\n         * @param bX point B x coordinate\n         * @param bY point B y coordinate\n         * @return Euclidean distance between points A and B\n         */\n        static distance(aX /*float|int*/, aY /*float|int*/, bX /*float|int*/, bY /*float|int*/) {\n            const xDiff = aX - bX;\n            const yDiff = aY - bY;\n            return /*(float) */ Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n        }\n        /**\n         * @param aX point A x coordinate\n         * @param aY point A y coordinate\n         * @param bX point B x coordinate\n         * @param bY point B y coordinate\n         * @return Euclidean distance between points A and B\n         */\n        // public static distance(aX: number /*int*/, aY: number /*int*/, bX: number /*int*/, bY: number /*int*/): float {\n        //   const xDiff = aX - bX\n        //   const yDiff = aY - bY\n        //   return (float) Math.sqrt(xDiff * xDiff + yDiff * yDiff);\n        // }\n        /**\n         * @param array values to sum\n         * @return sum of values in array\n         */\n        static sum(array) {\n            let count = 0;\n            for (let i = 0, length = array.length; i !== length; i++) {\n                const a = array[i];\n                count += a;\n            }\n            return count;\n        }\n    }\n\n    /**\n     * Ponyfill for Java's Float class.\n     */\n    class Float {\n        /**\n         * SincTS has no difference between int and float, there's all numbers,\n         * this is used only to polyfill Java code.\n         */\n        static floatToIntBits(f) {\n            return f;\n        }\n    }\n    /**\n     * The float max value in JS is the number max value.\n     */\n    Float.MAX_VALUE = Number.MAX_SAFE_INTEGER;\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a point of interest in an image containing a barcode. Typically, this\n     * would be the location of a finder pattern or the corner of the barcode, for example.</p>\n     *\n     * @author Sean Owen\n     */\n    class ResultPoint {\n        constructor(x, y) {\n            this.x = x;\n            this.y = y;\n        }\n        getX() {\n            return this.x;\n        }\n        getY() {\n            return this.y;\n        }\n        /*@Override*/\n        equals(other) {\n            if (other instanceof ResultPoint) {\n                const otherPoint = other;\n                return this.x === otherPoint.x && this.y === otherPoint.y;\n            }\n            return false;\n        }\n        /*@Override*/\n        hashCode() {\n            return 31 * Float.floatToIntBits(this.x) + Float.floatToIntBits(this.y);\n        }\n        /*@Override*/\n        toString() {\n            return '(' + this.x + ',' + this.y + ')';\n        }\n        /**\n         * Orders an array of three ResultPoints in an order [A,B,C] such that AB is less than AC\n         * and BC is less than AC, and the angle between BC and BA is less than 180 degrees.\n         *\n         * @param patterns array of three {@code ResultPoint} to order\n         */\n        static orderBestPatterns(patterns) {\n            // Find distances between pattern centers\n            const zeroOneDistance = this.distance(patterns[0], patterns[1]);\n            const oneTwoDistance = this.distance(patterns[1], patterns[2]);\n            const zeroTwoDistance = this.distance(patterns[0], patterns[2]);\n            let pointA;\n            let pointB;\n            let pointC;\n            // Assume one closest to other two is B; A and C will just be guesses at first\n            if (oneTwoDistance >= zeroOneDistance && oneTwoDistance >= zeroTwoDistance) {\n                pointB = patterns[0];\n                pointA = patterns[1];\n                pointC = patterns[2];\n            }\n            else if (zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= zeroOneDistance) {\n                pointB = patterns[1];\n                pointA = patterns[0];\n                pointC = patterns[2];\n            }\n            else {\n                pointB = patterns[2];\n                pointA = patterns[0];\n                pointC = patterns[1];\n            }\n            // Use cross product to figure out whether A and C are correct or flipped.\n            // This asks whether BC x BA has a positive z component, which is the arrangement\n            // we want for A, B, C. If it's negative, then we've got it flipped around and\n            // should swap A and C.\n            if (this.crossProductZ(pointA, pointB, pointC) < 0.0) {\n                const temp = pointA;\n                pointA = pointC;\n                pointC = temp;\n            }\n            patterns[0] = pointA;\n            patterns[1] = pointB;\n            patterns[2] = pointC;\n        }\n        /**\n         * @param pattern1 first pattern\n         * @param pattern2 second pattern\n         * @return distance between two points\n         */\n        static distance(pattern1, pattern2) {\n            return MathUtils.distance(pattern1.x, pattern1.y, pattern2.x, pattern2.y);\n        }\n        /**\n         * Returns the z component of the cross product between vectors BC and BA.\n         */\n        static crossProductZ(pointA, pointB, pointC) {\n            const bX = pointB.x;\n            const bY = pointB.y;\n            return ((pointC.x - bX) * (pointA.y - bY)) - ((pointC.y - bY) * (pointA.x - bX));\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates the result of detecting a barcode in an image. This includes the raw\n     * matrix of black/white pixels corresponding to the barcode, and possibly points of interest\n     * in the image, like the location of finder patterns or corners of the barcode in the image.</p>\n     *\n     * @author Sean Owen\n     */\n    class DetectorResult {\n        constructor(bits, points) {\n            this.bits = bits;\n            this.points = points;\n        }\n        getBits() {\n            return this.bits;\n        }\n        getPoints() {\n            return this.points;\n        }\n    }\n\n    /*\n     * Copyright 2010 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Extends {@link DetectorResult} with more information specific to the Aztec format,\n     * like the number of layers and whether it's compact.</p>\n     *\n     * @author Sean Owen\n     */\n    class AztecDetectorResult extends DetectorResult {\n        constructor(bits, points, compact, nbDatablocks, nbLayers) {\n            super(bits, points);\n            this.compact = compact;\n            this.nbDatablocks = nbDatablocks;\n            this.nbLayers = nbLayers;\n        }\n        getNbLayers() {\n            return this.nbLayers;\n        }\n        getNbDatablocks() {\n            return this.nbDatablocks;\n        }\n        isCompact() {\n            return this.compact;\n        }\n    }\n\n    /*\n     * Copyright 2010 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>\n     * Detects a candidate barcode-like rectangular region within an image. It\n     * starts around the center of the image, increases the size of the candidate\n     * region until it finds a white rectangular region. By keeping track of the\n     * last black points it encountered, it determines the corners of the barcode.\n     * </p>\n     *\n     * @author David Olivier\n     */\n    class WhiteRectangleDetector {\n        // public constructor(private image: BitMatrix) /*throws NotFoundException*/ {\n        //   this(image, INIT_SIZE, image.getWidth() / 2, image.getHeight() / 2)\n        // }\n        /**\n         * @param image barcode image to find a rectangle in\n         * @param initSize initial size of search area around center\n         * @param x x position of search center\n         * @param y y position of search center\n         * @throws NotFoundException if image is too small to accommodate {@code initSize}\n         */\n        constructor(image, initSize /*int*/, x /*int*/, y /*int*/) {\n            this.image = image;\n            this.height = image.getHeight();\n            this.width = image.getWidth();\n            if (undefined === initSize || null === initSize) {\n                initSize = WhiteRectangleDetector.INIT_SIZE;\n            }\n            if (undefined === x || null === x) {\n                x = image.getWidth() / 2 | 0;\n            }\n            if (undefined === y || null === y) {\n                y = image.getHeight() / 2 | 0;\n            }\n            const halfsize = initSize / 2 | 0;\n            this.leftInit = x - halfsize;\n            this.rightInit = x + halfsize;\n            this.upInit = y - halfsize;\n            this.downInit = y + halfsize;\n            if (this.upInit < 0 || this.leftInit < 0 || this.downInit >= this.height || this.rightInit >= this.width) {\n                throw new NotFoundException();\n            }\n        }\n        /**\n         * <p>\n         * Detects a candidate barcode-like rectangular region within an image. It\n         * starts around the center of the image, increases the size of the candidate\n         * region until it finds a white rectangular region.\n         * </p>\n         *\n         * @return {@link ResultPoint}[] describing the corners of the rectangular\n         *         region. The first and last points are opposed on the diagonal, as\n         *         are the second and third. The first point will be the topmost\n         *         point and the last, the bottommost. The second point will be\n         *         leftmost and the third, the rightmost\n         * @throws NotFoundException if no Data Matrix Code can be found\n         */\n        detect() {\n            let left = this.leftInit;\n            let right = this.rightInit;\n            let up = this.upInit;\n            let down = this.downInit;\n            let sizeExceeded = false;\n            let aBlackPointFoundOnBorder = true;\n            let atLeastOneBlackPointFoundOnBorder = false;\n            let atLeastOneBlackPointFoundOnRight = false;\n            let atLeastOneBlackPointFoundOnBottom = false;\n            let atLeastOneBlackPointFoundOnLeft = false;\n            let atLeastOneBlackPointFoundOnTop = false;\n            const width = this.width;\n            const height = this.height;\n            while (aBlackPointFoundOnBorder) {\n                aBlackPointFoundOnBorder = false;\n                // .....\n                // .   |\n                // .....\n                let rightBorderNotWhite = true;\n                while ((rightBorderNotWhite || !atLeastOneBlackPointFoundOnRight) && right < width) {\n                    rightBorderNotWhite = this.containsBlackPoint(up, down, right, false);\n                    if (rightBorderNotWhite) {\n                        right++;\n                        aBlackPointFoundOnBorder = true;\n                        atLeastOneBlackPointFoundOnRight = true;\n                    }\n                    else if (!atLeastOneBlackPointFoundOnRight) {\n                        right++;\n                    }\n                }\n                if (right >= width) {\n                    sizeExceeded = true;\n                    break;\n                }\n                // .....\n                // .   .\n                // .___.\n                let bottomBorderNotWhite = true;\n                while ((bottomBorderNotWhite || !atLeastOneBlackPointFoundOnBottom) && down < height) {\n                    bottomBorderNotWhite = this.containsBlackPoint(left, right, down, true);\n                    if (bottomBorderNotWhite) {\n                        down++;\n                        aBlackPointFoundOnBorder = true;\n                        atLeastOneBlackPointFoundOnBottom = true;\n                    }\n                    else if (!atLeastOneBlackPointFoundOnBottom) {\n                        down++;\n                    }\n                }\n                if (down >= height) {\n                    sizeExceeded = true;\n                    break;\n                }\n                // .....\n                // |   .\n                // .....\n                let leftBorderNotWhite = true;\n                while ((leftBorderNotWhite || !atLeastOneBlackPointFoundOnLeft) && left >= 0) {\n                    leftBorderNotWhite = this.containsBlackPoint(up, down, left, false);\n                    if (leftBorderNotWhite) {\n                        left--;\n                        aBlackPointFoundOnBorder = true;\n                        atLeastOneBlackPointFoundOnLeft = true;\n                    }\n                    else if (!atLeastOneBlackPointFoundOnLeft) {\n                        left--;\n                    }\n                }\n                if (left < 0) {\n                    sizeExceeded = true;\n                    break;\n                }\n                // .___.\n                // .   .\n                // .....\n                let topBorderNotWhite = true;\n                while ((topBorderNotWhite || !atLeastOneBlackPointFoundOnTop) && up >= 0) {\n                    topBorderNotWhite = this.containsBlackPoint(left, right, up, true);\n                    if (topBorderNotWhite) {\n                        up--;\n                        aBlackPointFoundOnBorder = true;\n                        atLeastOneBlackPointFoundOnTop = true;\n                    }\n                    else if (!atLeastOneBlackPointFoundOnTop) {\n                        up--;\n                    }\n                }\n                if (up < 0) {\n                    sizeExceeded = true;\n                    break;\n                }\n                if (aBlackPointFoundOnBorder) {\n                    atLeastOneBlackPointFoundOnBorder = true;\n                }\n            }\n            if (!sizeExceeded && atLeastOneBlackPointFoundOnBorder) {\n                const maxSize = right - left;\n                let z = null;\n                for (let i = 1; z === null && i < maxSize; i++) {\n                    z = this.getBlackPointOnSegment(left, down - i, left + i, down);\n                }\n                if (z == null) {\n                    throw new NotFoundException();\n                }\n                let t = null;\n                // go down right\n                for (let i = 1; t === null && i < maxSize; i++) {\n                    t = this.getBlackPointOnSegment(left, up + i, left + i, up);\n                }\n                if (t == null) {\n                    throw new NotFoundException();\n                }\n                let x = null;\n                // go down left\n                for (let i = 1; x === null && i < maxSize; i++) {\n                    x = this.getBlackPointOnSegment(right, up + i, right - i, up);\n                }\n                if (x == null) {\n                    throw new NotFoundException();\n                }\n                let y = null;\n                // go up left\n                for (let i = 1; y === null && i < maxSize; i++) {\n                    y = this.getBlackPointOnSegment(right, down - i, right - i, down);\n                }\n                if (y == null) {\n                    throw new NotFoundException();\n                }\n                return this.centerEdges(y, z, x, t);\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n        getBlackPointOnSegment(aX /*float*/, aY /*float*/, bX /*float*/, bY /*float*/) {\n            const dist = MathUtils.round(MathUtils.distance(aX, aY, bX, bY));\n            const xStep = (bX - aX) / dist;\n            const yStep = (bY - aY) / dist;\n            const image = this.image;\n            for (let i = 0; i < dist; i++) {\n                const x = MathUtils.round(aX + i * xStep);\n                const y = MathUtils.round(aY + i * yStep);\n                if (image.get(x, y)) {\n                    return new ResultPoint(x, y);\n                }\n            }\n            return null;\n        }\n        /**\n         * recenters the points of a constant distance towards the center\n         *\n         * @param y bottom most point\n         * @param z left most point\n         * @param x right most point\n         * @param t top most point\n         * @return {@link ResultPoint}[] describing the corners of the rectangular\n         *         region. The first and last points are opposed on the diagonal, as\n         *         are the second and third. The first point will be the topmost\n         *         point and the last, the bottommost. The second point will be\n         *         leftmost and the third, the rightmost\n         */\n        centerEdges(y, z, x, t) {\n            //\n            //       t            t\n            //  z                      x\n            //        x    OR    z\n            //   y                    y\n            //\n            const yi = y.getX();\n            const yj = y.getY();\n            const zi = z.getX();\n            const zj = z.getY();\n            const xi = x.getX();\n            const xj = x.getY();\n            const ti = t.getX();\n            const tj = t.getY();\n            const CORR = WhiteRectangleDetector.CORR;\n            if (yi < this.width / 2.0) {\n                return [\n                    new ResultPoint(ti - CORR, tj + CORR),\n                    new ResultPoint(zi + CORR, zj + CORR),\n                    new ResultPoint(xi - CORR, xj - CORR),\n                    new ResultPoint(yi + CORR, yj - CORR)\n                ];\n            }\n            else {\n                return [\n                    new ResultPoint(ti + CORR, tj + CORR),\n                    new ResultPoint(zi + CORR, zj - CORR),\n                    new ResultPoint(xi - CORR, xj + CORR),\n                    new ResultPoint(yi - CORR, yj - CORR)\n                ];\n            }\n        }\n        /**\n         * Determines whether a segment contains a black point\n         *\n         * @param a          min value of the scanned coordinate\n         * @param b          max value of the scanned coordinate\n         * @param fixed      value of fixed coordinate\n         * @param horizontal set to true if scan must be horizontal, false if vertical\n         * @return true if a black point has been found, else false.\n         */\n        containsBlackPoint(a /*int*/, b /*int*/, fixed /*int*/, horizontal) {\n            const image = this.image;\n            if (horizontal) {\n                for (let x = a; x <= b; x++) {\n                    if (image.get(x, fixed)) {\n                        return true;\n                    }\n                }\n            }\n            else {\n                for (let y = a; y <= b; y++) {\n                    if (image.get(fixed, y)) {\n                        return true;\n                    }\n                }\n            }\n            return false;\n        }\n    }\n    WhiteRectangleDetector.INIT_SIZE = 10;\n    WhiteRectangleDetector.CORR = 1;\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * Implementations of this class can, given locations of finder patterns for a QR code in an\n     * image, sample the right points in the image to reconstruct the QR code, accounting for\n     * perspective distortion. It is abstracted since it is relatively expensive and should be allowed\n     * to take advantage of platform-specific optimized implementations, like Sun's Java Advanced\n     * Imaging library, but which may not be available in other environments such as J2ME, and vice\n     * versa.\n     *\n     * The implementation used can be controlled by calling {@link #setGridSampler(GridSampler)}\n     * with an instance of a class which implements this interface.\n     *\n     * @author Sean Owen\n     */\n    class GridSampler {\n        /**\n         * <p>Checks a set of points that have been transformed to sample points on an image against\n         * the image's dimensions to see if the point are even within the image.</p>\n         *\n         * <p>This method will actually \"nudge\" the endpoints back onto the image if they are found to be\n         * barely (less than 1 pixel) off the image. This accounts for imperfect detection of finder\n         * patterns in an image where the QR Code runs all the way to the image border.</p>\n         *\n         * <p>For efficiency, the method will check points from either end of the line until one is found\n         * to be within the image. Because the set of points are assumed to be linear, this is valid.</p>\n         *\n         * @param image image into which the points should map\n         * @param points actual points in x1,y1,...,xn,yn form\n         * @throws NotFoundException if an endpoint is lies outside the image boundaries\n         */\n        static checkAndNudgePoints(image, points) {\n            const width = image.getWidth();\n            const height = image.getHeight();\n            // Check and nudge points from start until we see some that are OK:\n            let nudged = true;\n            for (let offset = 0; offset < points.length && nudged; offset += 2) {\n                const x = Math.floor(points[offset]);\n                const y = Math.floor(points[offset + 1]);\n                if (x < -1 || x > width || y < -1 || y > height) {\n                    throw new NotFoundException();\n                }\n                nudged = false;\n                if (x === -1) {\n                    points[offset] = 0.0;\n                    nudged = true;\n                }\n                else if (x === width) {\n                    points[offset] = width - 1;\n                    nudged = true;\n                }\n                if (y === -1) {\n                    points[offset + 1] = 0.0;\n                    nudged = true;\n                }\n                else if (y === height) {\n                    points[offset + 1] = height - 1;\n                    nudged = true;\n                }\n            }\n            // Check and nudge points from end:\n            nudged = true;\n            for (let offset = points.length - 2; offset >= 0 && nudged; offset -= 2) {\n                const x = Math.floor(points[offset]);\n                const y = Math.floor(points[offset + 1]);\n                if (x < -1 || x > width || y < -1 || y > height) {\n                    throw new NotFoundException();\n                }\n                nudged = false;\n                if (x === -1) {\n                    points[offset] = 0.0;\n                    nudged = true;\n                }\n                else if (x === width) {\n                    points[offset] = width - 1;\n                    nudged = true;\n                }\n                if (y === -1) {\n                    points[offset + 1] = 0.0;\n                    nudged = true;\n                }\n                else if (y === height) {\n                    points[offset + 1] = height - 1;\n                    nudged = true;\n                }\n            }\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing.common {*/\n    /**\n     * <p>This class implements a perspective transform in two dimensions. Given four source and four\n     * destination points, it will compute the transformation implied between them. The code is based\n     * directly upon section 3.4.2 of George Wolberg's \"Digital Image Warping\"; see pages 54-56.</p>\n     *\n     * @author Sean Owen\n     */\n    class PerspectiveTransform {\n        constructor(a11 /*float*/, a21 /*float*/, a31 /*float*/, a12 /*float*/, a22 /*float*/, a32 /*float*/, a13 /*float*/, a23 /*float*/, a33 /*float*/) {\n            this.a11 = a11;\n            this.a21 = a21;\n            this.a31 = a31;\n            this.a12 = a12;\n            this.a22 = a22;\n            this.a32 = a32;\n            this.a13 = a13;\n            this.a23 = a23;\n            this.a33 = a33;\n        }\n        static quadrilateralToQuadrilateral(x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/, x0p /*float*/, y0p /*float*/, x1p /*float*/, y1p /*float*/, x2p /*float*/, y2p /*float*/, x3p /*float*/, y3p /*float*/) {\n            const qToS = PerspectiveTransform.quadrilateralToSquare(x0, y0, x1, y1, x2, y2, x3, y3);\n            const sToQ = PerspectiveTransform.squareToQuadrilateral(x0p, y0p, x1p, y1p, x2p, y2p, x3p, y3p);\n            return sToQ.times(qToS);\n        }\n        transformPoints(points) {\n            const max = points.length;\n            const a11 = this.a11;\n            const a12 = this.a12;\n            const a13 = this.a13;\n            const a21 = this.a21;\n            const a22 = this.a22;\n            const a23 = this.a23;\n            const a31 = this.a31;\n            const a32 = this.a32;\n            const a33 = this.a33;\n            for (let i = 0; i < max; i += 2) {\n                const x = points[i];\n                const y = points[i + 1];\n                const denominator = a13 * x + a23 * y + a33;\n                points[i] = (a11 * x + a21 * y + a31) / denominator;\n                points[i + 1] = (a12 * x + a22 * y + a32) / denominator;\n            }\n        }\n        transformPointsWithValues(xValues, yValues) {\n            const a11 = this.a11;\n            const a12 = this.a12;\n            const a13 = this.a13;\n            const a21 = this.a21;\n            const a22 = this.a22;\n            const a23 = this.a23;\n            const a31 = this.a31;\n            const a32 = this.a32;\n            const a33 = this.a33;\n            const n = xValues.length;\n            for (let i = 0; i < n; i++) {\n                const x = xValues[i];\n                const y = yValues[i];\n                const denominator = a13 * x + a23 * y + a33;\n                xValues[i] = (a11 * x + a21 * y + a31) / denominator;\n                yValues[i] = (a12 * x + a22 * y + a32) / denominator;\n            }\n        }\n        static squareToQuadrilateral(x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/) {\n            const dx3 = x0 - x1 + x2 - x3;\n            const dy3 = y0 - y1 + y2 - y3;\n            if (dx3 === 0.0 && dy3 === 0.0) {\n                // Affine\n                return new PerspectiveTransform(x1 - x0, x2 - x1, x0, y1 - y0, y2 - y1, y0, 0.0, 0.0, 1.0);\n            }\n            else {\n                const dx1 = x1 - x2;\n                const dx2 = x3 - x2;\n                const dy1 = y1 - y2;\n                const dy2 = y3 - y2;\n                const denominator = dx1 * dy2 - dx2 * dy1;\n                const a13 = (dx3 * dy2 - dx2 * dy3) / denominator;\n                const a23 = (dx1 * dy3 - dx3 * dy1) / denominator;\n                return new PerspectiveTransform(x1 - x0 + a13 * x1, x3 - x0 + a23 * x3, x0, y1 - y0 + a13 * y1, y3 - y0 + a23 * y3, y0, a13, a23, 1.0);\n            }\n        }\n        static quadrilateralToSquare(x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/) {\n            // Here, the adjoint serves as the inverse:\n            return PerspectiveTransform.squareToQuadrilateral(x0, y0, x1, y1, x2, y2, x3, y3).buildAdjoint();\n        }\n        buildAdjoint() {\n            // Adjoint is the transpose of the cofactor matrix:\n            return new PerspectiveTransform(this.a22 * this.a33 - this.a23 * this.a32, this.a23 * this.a31 - this.a21 * this.a33, this.a21 * this.a32 - this.a22 * this.a31, this.a13 * this.a32 - this.a12 * this.a33, this.a11 * this.a33 - this.a13 * this.a31, this.a12 * this.a31 - this.a11 * this.a32, this.a12 * this.a23 - this.a13 * this.a22, this.a13 * this.a21 - this.a11 * this.a23, this.a11 * this.a22 - this.a12 * this.a21);\n        }\n        times(other) {\n            return new PerspectiveTransform(this.a11 * other.a11 + this.a21 * other.a12 + this.a31 * other.a13, this.a11 * other.a21 + this.a21 * other.a22 + this.a31 * other.a23, this.a11 * other.a31 + this.a21 * other.a32 + this.a31 * other.a33, this.a12 * other.a11 + this.a22 * other.a12 + this.a32 * other.a13, this.a12 * other.a21 + this.a22 * other.a22 + this.a32 * other.a23, this.a12 * other.a31 + this.a22 * other.a32 + this.a32 * other.a33, this.a13 * other.a11 + this.a23 * other.a12 + this.a33 * other.a13, this.a13 * other.a21 + this.a23 * other.a22 + this.a33 * other.a23, this.a13 * other.a31 + this.a23 * other.a32 + this.a33 * other.a33);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Sean Owen\n     */\n    class DefaultGridSampler extends GridSampler {\n        /*@Override*/\n        sampleGrid(image, dimensionX /*int*/, dimensionY /*int*/, p1ToX /*float*/, p1ToY /*float*/, p2ToX /*float*/, p2ToY /*float*/, p3ToX /*float*/, p3ToY /*float*/, p4ToX /*float*/, p4ToY /*float*/, p1FromX /*float*/, p1FromY /*float*/, p2FromX /*float*/, p2FromY /*float*/, p3FromX /*float*/, p3FromY /*float*/, p4FromX /*float*/, p4FromY /*float*/) {\n            const transform = PerspectiveTransform.quadrilateralToQuadrilateral(p1ToX, p1ToY, p2ToX, p2ToY, p3ToX, p3ToY, p4ToX, p4ToY, p1FromX, p1FromY, p2FromX, p2FromY, p3FromX, p3FromY, p4FromX, p4FromY);\n            return this.sampleGridWithTransform(image, dimensionX, dimensionY, transform);\n        }\n        /*@Override*/\n        sampleGridWithTransform(image, dimensionX /*int*/, dimensionY /*int*/, transform) {\n            if (dimensionX <= 0 || dimensionY <= 0) {\n                throw new NotFoundException();\n            }\n            const bits = new BitMatrix(dimensionX, dimensionY);\n            const points = new Float32Array(2 * dimensionX);\n            for (let y = 0; y < dimensionY; y++) {\n                const max = points.length;\n                const iValue = y + 0.5;\n                for (let x = 0; x < max; x += 2) {\n                    points[x] = (x / 2) + 0.5;\n                    points[x + 1] = iValue;\n                }\n                transform.transformPoints(points);\n                // Quick check to see if points transformed to something inside the image\n                // sufficient to check the endpoints\n                GridSampler.checkAndNudgePoints(image, points);\n                try {\n                    for (let x = 0; x < max; x += 2) {\n                        if (image.get(Math.floor(points[x]), Math.floor(points[x + 1]))) {\n                            // Black(-ish) pixel\n                            bits.set(x / 2, y);\n                        }\n                    }\n                }\n                catch (aioobe /*: ArrayIndexOutOfBoundsException*/) {\n                    // This feels wrong, but, sometimes if the finder patterns are misidentified, the resulting\n                    // transform gets \"twisted\" such that it maps a straight line of points to a set of points\n                    // whose endpoints are in bounds, but others are not. There is probably some mathematical\n                    // way to detect this about the transformation that I don't know yet.\n                    // This results in an ugly runtime exception despite our clever checks above -- can't have\n                    // that. We could check each point's coordinates but that feels duplicative. We settle for\n                    // catching and wrapping ArrayIndexOutOfBoundsException.\n                    throw new NotFoundException();\n                }\n            }\n            return bits;\n        }\n    }\n\n    class GridSamplerInstance {\n        /**\n         * Sets the implementation of GridSampler used by the library. One global\n         * instance is stored, which may sound problematic. But, the implementation provided\n         * ought to be appropriate for the entire platform, and all uses of this library\n         * in the whole lifetime of the JVM. For instance, an Android activity can swap in\n         * an implementation that takes advantage of native platform libraries.\n         *\n         * @param newGridSampler The platform-specific object to install.\n         */\n        static setGridSampler(newGridSampler) {\n            GridSamplerInstance.gridSampler = newGridSampler;\n        }\n        /**\n         * @return the current implementation of GridSampler\n         */\n        static getInstance() {\n            return GridSamplerInstance.gridSampler;\n        }\n    }\n    GridSamplerInstance.gridSampler = new DefaultGridSampler();\n\n    /*\n     * Copyright 2010 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    class Point {\n        constructor(x, y) {\n            this.x = x;\n            this.y = y;\n        }\n        toResultPoint() {\n            return new ResultPoint(this.getX(), this.getY());\n        }\n        getX() {\n            return this.x;\n        }\n        getY() {\n            return this.y;\n        }\n    }\n    /**\n     * Encapsulates logic that can detect an Aztec Code in an image, even if the Aztec Code\n     * is rotated or skewed, or partially obscured.\n     *\n     * @author David Olivier\n     * @author Frank Yellin\n     */\n    class Detector {\n        constructor(image) {\n            this.EXPECTED_CORNER_BITS = new Int32Array([\n                0xee0,\n                0x1dc,\n                0x83b,\n                0x707,\n            ]);\n            this.image = image;\n        }\n        detect() {\n            return this.detectMirror(false);\n        }\n        /**\n         * Detects an Aztec Code in an image.\n         *\n         * @param isMirror if true, image is a mirror-image of original\n         * @return {@link AztecDetectorResult} encapsulating results of detecting an Aztec Code\n         * @throws NotFoundException if no Aztec Code can be found\n         */\n        detectMirror(isMirror) {\n            // 1. Get the center of the aztec matrix\n            let pCenter = this.getMatrixCenter();\n            // 2. Get the center points of the four diagonal points just outside the bull's eye\n            //  [topRight, bottomRight, bottomLeft, topLeft]\n            let bullsEyeCorners = this.getBullsEyeCorners(pCenter);\n            if (isMirror) {\n                let temp = bullsEyeCorners[0];\n                bullsEyeCorners[0] = bullsEyeCorners[2];\n                bullsEyeCorners[2] = temp;\n            }\n            // 3. Get the size of the matrix and other parameters from the bull's eye\n            this.extractParameters(bullsEyeCorners);\n            // 4. Sample the grid\n            let bits = this.sampleGrid(this.image, bullsEyeCorners[this.shift % 4], bullsEyeCorners[(this.shift + 1) % 4], bullsEyeCorners[(this.shift + 2) % 4], bullsEyeCorners[(this.shift + 3) % 4]);\n            // 5. Get the corners of the matrix.\n            let corners = this.getMatrixCornerPoints(bullsEyeCorners);\n            return new AztecDetectorResult(bits, corners, this.compact, this.nbDataBlocks, this.nbLayers);\n        }\n        /**\n         * Extracts the number of data layers and data blocks from the layer around the bull's eye.\n         *\n         * @param bullsEyeCorners the array of bull's eye corners\n         * @throws NotFoundException in case of too many errors or invalid parameters\n         */\n        extractParameters(bullsEyeCorners) {\n            if (!this.isValidPoint(bullsEyeCorners[0]) || !this.isValidPoint(bullsEyeCorners[1]) ||\n                !this.isValidPoint(bullsEyeCorners[2]) || !this.isValidPoint(bullsEyeCorners[3])) {\n                throw new NotFoundException();\n            }\n            let length = 2 * this.nbCenterLayers;\n            // Get the bits around the bull's eye\n            let sides = new Int32Array([\n                this.sampleLine(bullsEyeCorners[0], bullsEyeCorners[1], length),\n                this.sampleLine(bullsEyeCorners[1], bullsEyeCorners[2], length),\n                this.sampleLine(bullsEyeCorners[2], bullsEyeCorners[3], length),\n                this.sampleLine(bullsEyeCorners[3], bullsEyeCorners[0], length) // Top\n            ]);\n            // bullsEyeCorners[shift] is the corner of the bulls'eye that has three\n            // orientation marks.\n            // sides[shift] is the row/column that goes from the corner with three\n            // orientation marks to the corner with two.\n            this.shift = this.getRotation(sides, length);\n            // Flatten the parameter bits into a single 28- or 40-bit long\n            let parameterData = 0;\n            for (let i = 0; i < 4; i++) {\n                let side = sides[(this.shift + i) % 4];\n                if (this.compact) {\n                    // Each side of the form ..XXXXXXX. where Xs are parameter data\n                    parameterData <<= 7;\n                    parameterData += (side >> 1) & 0x7F;\n                }\n                else {\n                    // Each side of the form ..XXXXX.XXXXX. where Xs are parameter data\n                    parameterData <<= 10;\n                    parameterData += ((side >> 2) & (0x1f << 5)) + ((side >> 1) & 0x1F);\n                }\n            }\n            // Corrects parameter data using RS.  Returns just the data portion\n            // without the error correction.\n            let correctedData = this.getCorrectedParameterData(parameterData, this.compact);\n            if (this.compact) {\n                // 8 bits:  2 bits layers and 6 bits data blocks\n                this.nbLayers = (correctedData >> 6) + 1;\n                this.nbDataBlocks = (correctedData & 0x3F) + 1;\n            }\n            else {\n                // 16 bits:  5 bits layers and 11 bits data blocks\n                this.nbLayers = (correctedData >> 11) + 1;\n                this.nbDataBlocks = (correctedData & 0x7FF) + 1;\n            }\n        }\n        getRotation(sides, length) {\n            // In a normal pattern, we expect to See\n            //   **    .*             D       A\n            //   *      *\n            //\n            //   .      *\n            //   ..    ..             C       B\n            //\n            // Grab the 3 bits from each of the sides the form the locator pattern and concatenate\n            // into a 12-bit integer.  Start with the bit at A\n            let cornerBits = 0;\n            sides.forEach((side, idx, arr) => {\n                // XX......X where X's are orientation marks\n                let t = ((side >> (length - 2)) << 1) + (side & 1);\n                cornerBits = (cornerBits << 3) + t;\n            });\n            // for (var side in sides) {\n            //     // XX......X where X's are orientation marks\n            //     var t = ((side >> (length - 2)) << 1) + (side & 1);\n            //     cornerBits = (cornerBits << 3) + t;\n            // }\n            // Mov the bottom bit to the top, so that the three bits of the locator pattern at A are\n            // together.  cornerBits is now:\n            //  3 orientation bits at A || 3 orientation bits at B || ... || 3 orientation bits at D\n            cornerBits = ((cornerBits & 1) << 11) + (cornerBits >> 1);\n            // The result shift indicates which element of BullsEyeCorners[] goes into the top-left\n            // corner. Since the four rotation values have a Hamming distance of 8, we\n            // can easily tolerate two errors.\n            for (let shift = 0; shift < 4; shift++) {\n                if (Integer.bitCount(cornerBits ^ this.EXPECTED_CORNER_BITS[shift]) <= 2) {\n                    return shift;\n                }\n            }\n            throw new NotFoundException();\n        }\n        /**\n         * Corrects the parameter bits using Reed-Solomon algorithm.\n         *\n         * @param parameterData parameter bits\n         * @param compact true if this is a compact Aztec code\n         * @throws NotFoundException if the array contains too many errors\n         */\n        getCorrectedParameterData(parameterData, compact) {\n            let numCodewords;\n            let numDataCodewords;\n            if (compact) {\n                numCodewords = 7;\n                numDataCodewords = 2;\n            }\n            else {\n                numCodewords = 10;\n                numDataCodewords = 4;\n            }\n            let numECCodewords = numCodewords - numDataCodewords;\n            let parameterWords = new Int32Array(numCodewords);\n            for (let i = numCodewords - 1; i >= 0; --i) {\n                parameterWords[i] = parameterData & 0xF;\n                parameterData >>= 4;\n            }\n            try {\n                let rsDecoder = new ReedSolomonDecoder(GenericGF.AZTEC_PARAM);\n                rsDecoder.decode(parameterWords, numECCodewords);\n            }\n            catch (ignored) {\n                throw new NotFoundException();\n            }\n            // Toss the error correction.  Just return the data as an integer\n            let result = 0;\n            for (let i = 0; i < numDataCodewords; i++) {\n                result = (result << 4) + parameterWords[i];\n            }\n            return result;\n        }\n        /**\n         * Finds the corners of a bull-eye centered on the passed point.\n         * This returns the centers of the diagonal points just outside the bull's eye\n         * Returns [topRight, bottomRight, bottomLeft, topLeft]\n         *\n         * @param pCenter Center point\n         * @return The corners of the bull-eye\n         * @throws NotFoundException If no valid bull-eye can be found\n         */\n        getBullsEyeCorners(pCenter) {\n            let pina = pCenter;\n            let pinb = pCenter;\n            let pinc = pCenter;\n            let pind = pCenter;\n            let color = true;\n            for (this.nbCenterLayers = 1; this.nbCenterLayers < 9; this.nbCenterLayers++) {\n                let pouta = this.getFirstDifferent(pina, color, 1, -1);\n                let poutb = this.getFirstDifferent(pinb, color, 1, 1);\n                let poutc = this.getFirstDifferent(pinc, color, -1, 1);\n                let poutd = this.getFirstDifferent(pind, color, -1, -1);\n                // d      a\n                //\n                // c      b\n                if (this.nbCenterLayers > 2) {\n                    let q = (this.distancePoint(poutd, pouta) * this.nbCenterLayers) / (this.distancePoint(pind, pina) * (this.nbCenterLayers + 2));\n                    if (q < 0.75 || q > 1.25 || !this.isWhiteOrBlackRectangle(pouta, poutb, poutc, poutd)) {\n                        break;\n                    }\n                }\n                pina = pouta;\n                pinb = poutb;\n                pinc = poutc;\n                pind = poutd;\n                color = !color;\n            }\n            if (this.nbCenterLayers !== 5 && this.nbCenterLayers !== 7) {\n                throw new NotFoundException();\n            }\n            this.compact = this.nbCenterLayers === 5;\n            // Expand the square by .5 pixel in each direction so that we're on the border\n            // between the white square and the black square\n            let pinax = new ResultPoint(pina.getX() + 0.5, pina.getY() - 0.5);\n            let pinbx = new ResultPoint(pinb.getX() + 0.5, pinb.getY() + 0.5);\n            let pincx = new ResultPoint(pinc.getX() - 0.5, pinc.getY() + 0.5);\n            let pindx = new ResultPoint(pind.getX() - 0.5, pind.getY() - 0.5);\n            // Expand the square so that its corners are the centers of the points\n            // just outside the bull's eye.\n            return this.expandSquare([pinax, pinbx, pincx, pindx], 2 * this.nbCenterLayers - 3, 2 * this.nbCenterLayers);\n        }\n        /**\n         * Finds a candidate center point of an Aztec code from an image\n         *\n         * @return the center point\n         */\n        getMatrixCenter() {\n            let pointA;\n            let pointB;\n            let pointC;\n            let pointD;\n            // Get a white rectangle that can be the border of the matrix in center bull's eye or\n            try {\n                let cornerPoints = new WhiteRectangleDetector(this.image).detect();\n                pointA = cornerPoints[0];\n                pointB = cornerPoints[1];\n                pointC = cornerPoints[2];\n                pointD = cornerPoints[3];\n            }\n            catch (e) {\n                // This exception can be in case the initial rectangle is white\n                // In that case, surely in the bull's eye, we try to expand the rectangle.\n                let cx = this.image.getWidth() / 2;\n                let cy = this.image.getHeight() / 2;\n                pointA = this.getFirstDifferent(new Point(cx + 7, cy - 7), false, 1, -1).toResultPoint();\n                pointB = this.getFirstDifferent(new Point(cx + 7, cy + 7), false, 1, 1).toResultPoint();\n                pointC = this.getFirstDifferent(new Point(cx - 7, cy + 7), false, -1, 1).toResultPoint();\n                pointD = this.getFirstDifferent(new Point(cx - 7, cy - 7), false, -1, -1).toResultPoint();\n            }\n            // Compute the center of the rectangle\n            let cx = MathUtils.round((pointA.getX() + pointD.getX() + pointB.getX() + pointC.getX()) / 4.0);\n            let cy = MathUtils.round((pointA.getY() + pointD.getY() + pointB.getY() + pointC.getY()) / 4.0);\n            // Redetermine the white rectangle starting from previously computed center.\n            // This will ensure that we end up with a white rectangle in center bull's eye\n            // in order to compute a more accurate center.\n            try {\n                let cornerPoints = new WhiteRectangleDetector(this.image, 15, cx, cy).detect();\n                pointA = cornerPoints[0];\n                pointB = cornerPoints[1];\n                pointC = cornerPoints[2];\n                pointD = cornerPoints[3];\n            }\n            catch (e) {\n                // This exception can be in case the initial rectangle is white\n                // In that case we try to expand the rectangle.\n                pointA = this.getFirstDifferent(new Point(cx + 7, cy - 7), false, 1, -1).toResultPoint();\n                pointB = this.getFirstDifferent(new Point(cx + 7, cy + 7), false, 1, 1).toResultPoint();\n                pointC = this.getFirstDifferent(new Point(cx - 7, cy + 7), false, -1, 1).toResultPoint();\n                pointD = this.getFirstDifferent(new Point(cx - 7, cy - 7), false, -1, -1).toResultPoint();\n            }\n            // Recompute the center of the rectangle\n            cx = MathUtils.round((pointA.getX() + pointD.getX() + pointB.getX() + pointC.getX()) / 4.0);\n            cy = MathUtils.round((pointA.getY() + pointD.getY() + pointB.getY() + pointC.getY()) / 4.0);\n            return new Point(cx, cy);\n        }\n        /**\n         * Gets the Aztec code corners from the bull's eye corners and the parameters.\n         *\n         * @param bullsEyeCorners the array of bull's eye corners\n         * @return the array of aztec code corners\n         */\n        getMatrixCornerPoints(bullsEyeCorners) {\n            return this.expandSquare(bullsEyeCorners, 2 * this.nbCenterLayers, this.getDimension());\n        }\n        /**\n         * Creates a BitMatrix by sampling the provided image.\n         * topLeft, topRight, bottomRight, and bottomLeft are the centers of the squares on the\n         * diagonal just outside the bull's eye.\n         */\n        sampleGrid(image, topLeft, topRight, bottomRight, bottomLeft) {\n            let sampler = GridSamplerInstance.getInstance();\n            let dimension = this.getDimension();\n            let low = dimension / 2 - this.nbCenterLayers;\n            let high = dimension / 2 + this.nbCenterLayers;\n            return sampler.sampleGrid(image, dimension, dimension, low, low, // topleft\n            high, low, // topright\n            high, high, // bottomright\n            low, high, // bottomleft\n            topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRight.getX(), bottomRight.getY(), bottomLeft.getX(), bottomLeft.getY());\n        }\n        /**\n         * Samples a line.\n         *\n         * @param p1   start point (inclusive)\n         * @param p2   end point (exclusive)\n         * @param size number of bits\n         * @return the array of bits as an int (first bit is high-order bit of result)\n         */\n        sampleLine(p1, p2, size) {\n            let result = 0;\n            let d = this.distanceResultPoint(p1, p2);\n            let moduleSize = d / size;\n            let px = p1.getX();\n            let py = p1.getY();\n            let dx = moduleSize * (p2.getX() - p1.getX()) / d;\n            let dy = moduleSize * (p2.getY() - p1.getY()) / d;\n            for (let i = 0; i < size; i++) {\n                if (this.image.get(MathUtils.round(px + i * dx), MathUtils.round(py + i * dy))) {\n                    result |= 1 << (size - i - 1);\n                }\n            }\n            return result;\n        }\n        /**\n         * @return true if the border of the rectangle passed in parameter is compound of white points only\n         *         or black points only\n         */\n        isWhiteOrBlackRectangle(p1, p2, p3, p4) {\n            let corr = 3;\n            p1 = new Point(p1.getX() - corr, p1.getY() + corr);\n            p2 = new Point(p2.getX() - corr, p2.getY() - corr);\n            p3 = new Point(p3.getX() + corr, p3.getY() - corr);\n            p4 = new Point(p4.getX() + corr, p4.getY() + corr);\n            let cInit = this.getColor(p4, p1);\n            if (cInit === 0) {\n                return false;\n            }\n            let c = this.getColor(p1, p2);\n            if (c !== cInit) {\n                return false;\n            }\n            c = this.getColor(p2, p3);\n            if (c !== cInit) {\n                return false;\n            }\n            c = this.getColor(p3, p4);\n            return c === cInit;\n        }\n        /**\n         * Gets the color of a segment\n         *\n         * @return 1 if segment more than 90% black, -1 if segment is more than 90% white, 0 else\n         */\n        getColor(p1, p2) {\n            let d = this.distancePoint(p1, p2);\n            let dx = (p2.getX() - p1.getX()) / d;\n            let dy = (p2.getY() - p1.getY()) / d;\n            let error = 0;\n            let px = p1.getX();\n            let py = p1.getY();\n            let colorModel = this.image.get(p1.getX(), p1.getY());\n            let iMax = Math.ceil(d);\n            for (let i = 0; i < iMax; i++) {\n                px += dx;\n                py += dy;\n                if (this.image.get(MathUtils.round(px), MathUtils.round(py)) !== colorModel) {\n                    error++;\n                }\n            }\n            let errRatio = error / d;\n            if (errRatio > 0.1 && errRatio < 0.9) {\n                return 0;\n            }\n            return (errRatio <= 0.1) === colorModel ? 1 : -1;\n        }\n        /**\n         * Gets the coordinate of the first point with a different color in the given direction\n         */\n        getFirstDifferent(init, color, dx, dy) {\n            let x = init.getX() + dx;\n            let y = init.getY() + dy;\n            while (this.isValid(x, y) && this.image.get(x, y) === color) {\n                x += dx;\n                y += dy;\n            }\n            x -= dx;\n            y -= dy;\n            while (this.isValid(x, y) && this.image.get(x, y) === color) {\n                x += dx;\n            }\n            x -= dx;\n            while (this.isValid(x, y) && this.image.get(x, y) === color) {\n                y += dy;\n            }\n            y -= dy;\n            return new Point(x, y);\n        }\n        /**\n         * Expand the square represented by the corner points by pushing out equally in all directions\n         *\n         * @param cornerPoints the corners of the square, which has the bull's eye at its center\n         * @param oldSide the original length of the side of the square in the target bit matrix\n         * @param newSide the new length of the size of the square in the target bit matrix\n         * @return the corners of the expanded square\n         */\n        expandSquare(cornerPoints, oldSide, newSide) {\n            let ratio = newSide / (2.0 * oldSide);\n            let dx = cornerPoints[0].getX() - cornerPoints[2].getX();\n            let dy = cornerPoints[0].getY() - cornerPoints[2].getY();\n            let centerx = (cornerPoints[0].getX() + cornerPoints[2].getX()) / 2.0;\n            let centery = (cornerPoints[0].getY() + cornerPoints[2].getY()) / 2.0;\n            let result0 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);\n            let result2 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);\n            dx = cornerPoints[1].getX() - cornerPoints[3].getX();\n            dy = cornerPoints[1].getY() - cornerPoints[3].getY();\n            centerx = (cornerPoints[1].getX() + cornerPoints[3].getX()) / 2.0;\n            centery = (cornerPoints[1].getY() + cornerPoints[3].getY()) / 2.0;\n            let result1 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);\n            let result3 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);\n            let results = [result0, result1, result2, result3];\n            return results;\n        }\n        isValid(x, y) {\n            return x >= 0 && x < this.image.getWidth() && y > 0 && y < this.image.getHeight();\n        }\n        isValidPoint(point) {\n            let x = MathUtils.round(point.getX());\n            let y = MathUtils.round(point.getY());\n            return this.isValid(x, y);\n        }\n        distancePoint(a, b) {\n            return MathUtils.distance(a.getX(), a.getY(), b.getX(), b.getY());\n        }\n        distanceResultPoint(a, b) {\n            return MathUtils.distance(a.getX(), a.getY(), b.getX(), b.getY());\n        }\n        getDimension() {\n            if (this.compact) {\n                return 4 * this.nbLayers + 11;\n            }\n            if (this.nbLayers <= 4) {\n                return 4 * this.nbLayers + 15;\n            }\n            return 4 * this.nbLayers + 2 * (Integer.truncDivision((this.nbLayers - 4), 8) + 1) + 15;\n        }\n    }\n\n    /*\n     * Copyright 2010 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // import java.util.List;\n    // import java.util.Map;\n    /**\n     * This implementation can detect and decode Aztec codes in an image.\n     *\n     * @author David Olivier\n     */\n    class AztecReader {\n        /**\n         * Locates and decodes a Data Matrix code in an image.\n         *\n         * @return a String representing the content encoded by the Data Matrix code\n         * @throws NotFoundException if a Data Matrix code cannot be found\n         * @throws FormatException if a Data Matrix code cannot be decoded\n         */\n        decode(image, hints = null) {\n            let exception = null;\n            let detector = new Detector(image.getBlackMatrix());\n            let points = null;\n            let decoderResult = null;\n            try {\n                let detectorResult = detector.detectMirror(false);\n                points = detectorResult.getPoints();\n                this.reportFoundResultPoints(hints, points);\n                decoderResult = new Decoder().decode(detectorResult);\n            }\n            catch (e) {\n                exception = e;\n            }\n            if (decoderResult == null) {\n                try {\n                    let detectorResult = detector.detectMirror(true);\n                    points = detectorResult.getPoints();\n                    this.reportFoundResultPoints(hints, points);\n                    decoderResult = new Decoder().decode(detectorResult);\n                }\n                catch (e) {\n                    if (exception != null) {\n                        throw exception;\n                    }\n                    throw e;\n                }\n            }\n            let result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), decoderResult.getNumBits(), points, BarcodeFormat$1.AZTEC, System.currentTimeMillis());\n            let byteSegments = decoderResult.getByteSegments();\n            if (byteSegments != null) {\n                result.putMetadata(ResultMetadataType$1.BYTE_SEGMENTS, byteSegments);\n            }\n            let ecLevel = decoderResult.getECLevel();\n            if (ecLevel != null) {\n                result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, ecLevel);\n            }\n            return result;\n        }\n        reportFoundResultPoints(hints, points) {\n            if (hints != null) {\n                let rpcb = hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n                if (rpcb != null) {\n                    points.forEach((point, idx, arr) => {\n                        rpcb.foundPossibleResultPoint(point);\n                    });\n                }\n            }\n        }\n        // @Override\n        reset() {\n            // do nothing\n        }\n    }\n\n    /**\n     * Aztec Code reader to use from browser.\n     *\n     * @class BrowserAztecCodeReader\n     * @extends {BrowserCodeReader}\n     */\n    class BrowserAztecCodeReader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserAztecCodeReader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         *\n         * @memberOf BrowserAztecCodeReader\n         */\n        constructor(timeBetweenScansMillis = 500) {\n            super(new AztecReader(), timeBetweenScansMillis);\n        }\n    }\n\n    /**\n     * Encapsulates functionality and implementation that is common to all families\n     * of one-dimensional barcodes.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     */\n    class OneDReader {\n        /*\n        @Override\n        public Result decode(BinaryBitmap image) throws NotFoundException, FormatException {\n          return decode(image, null);\n        }\n        */\n        // Note that we don't try rotation without the try harder flag, even if rotation was supported.\n        // @Override\n        decode(image, hints) {\n            try {\n                return this.doDecode(image, hints);\n            }\n            catch (nfe) {\n                const tryHarder = hints && (hints.get(DecodeHintType$1.TRY_HARDER) === true);\n                if (tryHarder && image.isRotateSupported()) {\n                    const rotatedImage = image.rotateCounterClockwise();\n                    const result = this.doDecode(rotatedImage, hints);\n                    // Record that we found it rotated 90 degrees CCW / 270 degrees CW\n                    const metadata = result.getResultMetadata();\n                    let orientation = 270;\n                    if (metadata !== null && (metadata.get(ResultMetadataType$1.ORIENTATION) === true)) {\n                        // But if we found it reversed in doDecode(), add in that result here:\n                        orientation = (orientation + metadata.get(ResultMetadataType$1.ORIENTATION) % 360);\n                    }\n                    result.putMetadata(ResultMetadataType$1.ORIENTATION, orientation);\n                    // Update result points\n                    const points = result.getResultPoints();\n                    if (points !== null) {\n                        const height = rotatedImage.getHeight();\n                        for (let i = 0; i < points.length; i++) {\n                            points[i] = new ResultPoint(height - points[i].getY() - 1, points[i].getX());\n                        }\n                    }\n                    return result;\n                }\n                else {\n                    throw new NotFoundException();\n                }\n            }\n        }\n        // @Override\n        reset() {\n            // do nothing\n        }\n        /**\n         * We're going to examine rows from the middle outward, searching alternately above and below the\n         * middle, and farther out each time. rowStep is the number of rows between each successive\n         * attempt above and below the middle. So we'd scan row middle, then middle - rowStep, then\n         * middle + rowStep, then middle - (2 * rowStep), etc.\n         * rowStep is bigger as the image is taller, but is always at least 1. We've somewhat arbitrarily\n         * decided that moving up and down by about 1/16 of the image is pretty good; we try more of the\n         * image if \"trying harder\".\n         *\n         * @param image The image to decode\n         * @param hints Any hints that were requested\n         * @return The contents of the decoded barcode\n         * @throws NotFoundException Any spontaneous errors which occur\n         */\n        doDecode(image, hints) {\n            const width = image.getWidth();\n            const height = image.getHeight();\n            let row = new BitArray(width);\n            const tryHarder = hints && (hints.get(DecodeHintType$1.TRY_HARDER) === true);\n            const rowStep = Math.max(1, height >> (tryHarder ? 8 : 5));\n            let maxLines;\n            if (tryHarder) {\n                maxLines = height; // Look at the whole image, not just the center\n            }\n            else {\n                maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image\n            }\n            const middle = Math.trunc(height / 2);\n            for (let x = 0; x < maxLines; x++) {\n                // Scanning from the middle out. Determine which row we're looking at next:\n                const rowStepsAboveOrBelow = Math.trunc((x + 1) / 2);\n                const isAbove = (x & 0x01) === 0; // i.e. is x even?\n                const rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow);\n                if (rowNumber < 0 || rowNumber >= height) {\n                    // Oops, if we run off the top or bottom, stop\n                    break;\n                }\n                // Estimate black point for this row and load it:\n                try {\n                    row = image.getBlackRow(rowNumber, row);\n                }\n                catch (ignored) {\n                    continue;\n                }\n                // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to\n                // handle decoding upside down barcodes.\n                for (let attempt = 0; attempt < 2; attempt++) {\n                    if (attempt === 1) { // trying again?\n                        row.reverse(); // reverse the row and continue\n                        // This means we will only ever draw result points *once* in the life of this method\n                        // since we want to avoid drawing the wrong points after flipping the row, and,\n                        // don't want to clutter with noise from every single row scan -- just the scans\n                        // that start on the center line.\n                        if (hints && (hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK) === true)) {\n                            const newHints = new Map();\n                            hints.forEach((hint, key) => newHints.set(key, hint));\n                            newHints.delete(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n                            hints = newHints;\n                        }\n                    }\n                    try {\n                        // Look for a barcode\n                        const result = this.decodeRow(rowNumber, row, hints);\n                        // We found our barcode\n                        if (attempt === 1) {\n                            // But it was upside down, so note that\n                            result.putMetadata(ResultMetadataType$1.ORIENTATION, 180);\n                            // And remember to flip the result points horizontally.\n                            const points = result.getResultPoints();\n                            if (points !== null) {\n                                points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY());\n                                points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY());\n                            }\n                        }\n                        return result;\n                    }\n                    catch (re) {\n                        // continue -- just couldn't decode this row\n                    }\n                }\n            }\n            throw new NotFoundException();\n        }\n        /**\n         * Records the size of successive runs of white and black pixels in a row, starting at a given point.\n         * The values are recorded in the given array, and the number of runs recorded is equal to the size\n         * of the array. If the row starts on a white pixel at the given start point, then the first count\n         * recorded is the run of white pixels starting from that point; likewise it is the count of a run\n         * of black pixels if the row begin on a black pixels at that point.\n         *\n         * @param row row to count from\n         * @param start offset into row to start at\n         * @param counters array into which to record counts\n         * @throws NotFoundException if counters cannot be filled entirely from row before running out\n         *  of pixels\n         */\n        static recordPattern(row, start, counters) {\n            const numCounters = counters.length;\n            for (let index = 0; index < numCounters; index++)\n                counters[index] = 0;\n            const end = row.getSize();\n            if (start >= end) {\n                throw new NotFoundException();\n            }\n            let isWhite = !row.get(start);\n            let counterPosition = 0;\n            let i = start;\n            while (i < end) {\n                if (row.get(i) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (++counterPosition === numCounters) {\n                        break;\n                    }\n                    else {\n                        counters[counterPosition] = 1;\n                        isWhite = !isWhite;\n                    }\n                }\n                i++;\n            }\n            // If we read fully the last section of pixels and filled up our counters -- or filled\n            // the last counter but ran off the side of the image, OK. Otherwise, a problem.\n            if (!(counterPosition === numCounters || (counterPosition === numCounters - 1 && i === end))) {\n                throw new NotFoundException();\n            }\n        }\n        static recordPatternInReverse(row, start, counters) {\n            // This could be more efficient I guess\n            let numTransitionsLeft = counters.length;\n            let last = row.get(start);\n            while (start > 0 && numTransitionsLeft >= 0) {\n                if (row.get(--start) !== last) {\n                    numTransitionsLeft--;\n                    last = !last;\n                }\n            }\n            if (numTransitionsLeft >= 0) {\n                throw new NotFoundException();\n            }\n            OneDReader.recordPattern(row, start + 1, counters);\n        }\n        /**\n         * Determines how closely a set of observed counts of runs of black/white values matches a given\n         * target pattern. This is reported as the ratio of the total variance from the expected pattern\n         * proportions across all pattern elements, to the length of the pattern.\n         *\n         * @param counters observed counters\n         * @param pattern expected pattern\n         * @param maxIndividualVariance The most any counter can differ before we give up\n         * @return ratio of total variance between counters and pattern compared to total pattern size\n         */\n        static patternMatchVariance(counters, pattern, maxIndividualVariance) {\n            const numCounters = counters.length;\n            let total = 0;\n            let patternLength = 0;\n            for (let i = 0; i < numCounters; i++) {\n                total += counters[i];\n                patternLength += pattern[i];\n            }\n            if (total < patternLength) {\n                // If we don't even have one pixel per unit of bar width, assume this is too small\n                // to reliably match, so fail:\n                return Number.POSITIVE_INFINITY;\n            }\n            const unitBarWidth = total / patternLength;\n            maxIndividualVariance *= unitBarWidth;\n            let totalVariance = 0.0;\n            for (let x = 0; x < numCounters; x++) {\n                const counter = counters[x];\n                const scaledPattern = pattern[x] * unitBarWidth;\n                const variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;\n                if (variance > maxIndividualVariance) {\n                    return Number.POSITIVE_INFINITY;\n                }\n                totalVariance += variance;\n            }\n            return totalVariance / total;\n        }\n    }\n\n    /**\n     * <p>Decodes Code 128 barcodes.</p>\n     *\n     * @author Sean Owen\n     */\n    class Code128Reader extends OneDReader {\n        static findStartPattern(row) {\n            const width = row.getSize();\n            const rowOffset = row.getNextSet(0);\n            let counterPosition = 0;\n            let counters = Int32Array.from([0, 0, 0, 0, 0, 0]);\n            let patternStart = rowOffset;\n            let isWhite = false;\n            const patternLength = 6;\n            for (let i = rowOffset; i < width; i++) {\n                if (row.get(i) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === (patternLength - 1)) {\n                        let bestVariance = Code128Reader.MAX_AVG_VARIANCE;\n                        let bestMatch = -1;\n                        for (let startCode = Code128Reader.CODE_START_A; startCode <= Code128Reader.CODE_START_C; startCode++) {\n                            const variance = OneDReader.patternMatchVariance(counters, Code128Reader.CODE_PATTERNS[startCode], Code128Reader.MAX_INDIVIDUAL_VARIANCE);\n                            if (variance < bestVariance) {\n                                bestVariance = variance;\n                                bestMatch = startCode;\n                            }\n                        }\n                        // Look for whitespace before start pattern, >= 50% of width of start pattern\n                        if (bestMatch >= 0 &&\n                            row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) {\n                            return Int32Array.from([patternStart, i, bestMatch]);\n                        }\n                        patternStart += counters[0] + counters[1];\n                        counters = counters.slice(2, counters.length - 1);\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        static decodeCode(row, counters, rowOffset) {\n            OneDReader.recordPattern(row, rowOffset, counters);\n            let bestVariance = Code128Reader.MAX_AVG_VARIANCE; // worst variance we'll accept\n            let bestMatch = -1;\n            for (let d = 0; d < Code128Reader.CODE_PATTERNS.length; d++) {\n                const pattern = Code128Reader.CODE_PATTERNS[d];\n                const variance = this.patternMatchVariance(counters, pattern, Code128Reader.MAX_INDIVIDUAL_VARIANCE);\n                if (variance < bestVariance) {\n                    bestVariance = variance;\n                    bestMatch = d;\n                }\n            }\n            // TODO We're overlooking the fact that the STOP pattern has 7 values, not 6.\n            if (bestMatch >= 0) {\n                return bestMatch;\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n        decodeRow(rowNumber, row, hints) {\n            const convertFNC1 = hints && (hints.get(DecodeHintType$1.ASSUME_GS1) === true);\n            const startPatternInfo = Code128Reader.findStartPattern(row);\n            const startCode = startPatternInfo[2];\n            let currentRawCodesIndex = 0;\n            const rawCodes = new Uint8Array(20);\n            rawCodes[currentRawCodesIndex++] = startCode;\n            let codeSet;\n            switch (startCode) {\n                case Code128Reader.CODE_START_A:\n                    codeSet = Code128Reader.CODE_CODE_A;\n                    break;\n                case Code128Reader.CODE_START_B:\n                    codeSet = Code128Reader.CODE_CODE_B;\n                    break;\n                case Code128Reader.CODE_START_C:\n                    codeSet = Code128Reader.CODE_CODE_C;\n                    break;\n                default:\n                    throw new FormatException();\n            }\n            let done = false;\n            let isNextShifted = false;\n            let result = '';\n            let lastStart = startPatternInfo[0];\n            let nextStart = startPatternInfo[1];\n            const counters = Int32Array.from([0, 0, 0, 0, 0, 0]);\n            let lastCode = 0;\n            let code = 0;\n            let checksumTotal = startCode;\n            let multiplier = 0;\n            let lastCharacterWasPrintable = true;\n            let upperMode = false;\n            let shiftUpperMode = false;\n            while (!done) {\n                const unshift = isNextShifted;\n                isNextShifted = false;\n                // Save off last code\n                lastCode = code;\n                // Decode another code from image\n                code = Code128Reader.decodeCode(row, counters, nextStart);\n                rawCodes[currentRawCodesIndex++] = code;\n                // Remember whether the last code was printable or not (excluding CODE_STOP)\n                if (code !== Code128Reader.CODE_STOP) {\n                    lastCharacterWasPrintable = true;\n                }\n                // Add to checksum computation (if not CODE_STOP of course)\n                if (code !== Code128Reader.CODE_STOP) {\n                    multiplier++;\n                    checksumTotal += multiplier * code;\n                }\n                // Advance to where the next code will to start\n                lastStart = nextStart;\n                nextStart += counters.reduce((previous, current) => previous + current, 0);\n                // Take care of illegal start codes\n                switch (code) {\n                    case Code128Reader.CODE_START_A:\n                    case Code128Reader.CODE_START_B:\n                    case Code128Reader.CODE_START_C:\n                        throw new FormatException();\n                }\n                switch (codeSet) {\n                    case Code128Reader.CODE_CODE_A:\n                        if (code < 64) {\n                            if (shiftUpperMode === upperMode) {\n                                result += String.fromCharCode((' '.charCodeAt(0) + code));\n                            }\n                            else {\n                                result += String.fromCharCode((' '.charCodeAt(0) + code + 128));\n                            }\n                            shiftUpperMode = false;\n                        }\n                        else if (code < 96) {\n                            if (shiftUpperMode === upperMode) {\n                                result += String.fromCharCode((code - 64));\n                            }\n                            else {\n                                result += String.fromCharCode((code + 64));\n                            }\n                            shiftUpperMode = false;\n                        }\n                        else {\n                            // Don't let CODE_STOP, which always appears, affect whether whether we think the last\n                            // code was printable or not.\n                            if (code !== Code128Reader.CODE_STOP) {\n                                lastCharacterWasPrintable = false;\n                            }\n                            switch (code) {\n                                case Code128Reader.CODE_FNC_1:\n                                    if (convertFNC1) {\n                                        if (result.length === 0) {\n                                            // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n                                            // is FNC1 then this is GS1-128. We add the symbology identifier.\n                                            result += ']C1';\n                                        }\n                                        else {\n                                            // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n                                            result += String.fromCharCode(29);\n                                        }\n                                    }\n                                    break;\n                                case Code128Reader.CODE_FNC_2:\n                                case Code128Reader.CODE_FNC_3:\n                                    // do nothing?\n                                    break;\n                                case Code128Reader.CODE_FNC_4_A:\n                                    if (!upperMode && shiftUpperMode) {\n                                        upperMode = true;\n                                        shiftUpperMode = false;\n                                    }\n                                    else if (upperMode && shiftUpperMode) {\n                                        upperMode = false;\n                                        shiftUpperMode = false;\n                                    }\n                                    else {\n                                        shiftUpperMode = true;\n                                    }\n                                    break;\n                                case Code128Reader.CODE_SHIFT:\n                                    isNextShifted = true;\n                                    codeSet = Code128Reader.CODE_CODE_B;\n                                    break;\n                                case Code128Reader.CODE_CODE_B:\n                                    codeSet = Code128Reader.CODE_CODE_B;\n                                    break;\n                                case Code128Reader.CODE_CODE_C:\n                                    codeSet = Code128Reader.CODE_CODE_C;\n                                    break;\n                                case Code128Reader.CODE_STOP:\n                                    done = true;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Code128Reader.CODE_CODE_B:\n                        if (code < 96) {\n                            if (shiftUpperMode === upperMode) {\n                                result += String.fromCharCode((' '.charCodeAt(0) + code));\n                            }\n                            else {\n                                result += String.fromCharCode((' '.charCodeAt(0) + code + 128));\n                            }\n                            shiftUpperMode = false;\n                        }\n                        else {\n                            if (code !== Code128Reader.CODE_STOP) {\n                                lastCharacterWasPrintable = false;\n                            }\n                            switch (code) {\n                                case Code128Reader.CODE_FNC_1:\n                                    if (convertFNC1) {\n                                        if (result.length === 0) {\n                                            // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n                                            // is FNC1 then this is GS1-128. We add the symbology identifier.\n                                            result += ']C1';\n                                        }\n                                        else {\n                                            // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n                                            result += String.fromCharCode(29);\n                                        }\n                                    }\n                                    break;\n                                case Code128Reader.CODE_FNC_2:\n                                case Code128Reader.CODE_FNC_3:\n                                    // do nothing?\n                                    break;\n                                case Code128Reader.CODE_FNC_4_B:\n                                    if (!upperMode && shiftUpperMode) {\n                                        upperMode = true;\n                                        shiftUpperMode = false;\n                                    }\n                                    else if (upperMode && shiftUpperMode) {\n                                        upperMode = false;\n                                        shiftUpperMode = false;\n                                    }\n                                    else {\n                                        shiftUpperMode = true;\n                                    }\n                                    break;\n                                case Code128Reader.CODE_SHIFT:\n                                    isNextShifted = true;\n                                    codeSet = Code128Reader.CODE_CODE_A;\n                                    break;\n                                case Code128Reader.CODE_CODE_A:\n                                    codeSet = Code128Reader.CODE_CODE_A;\n                                    break;\n                                case Code128Reader.CODE_CODE_C:\n                                    codeSet = Code128Reader.CODE_CODE_C;\n                                    break;\n                                case Code128Reader.CODE_STOP:\n                                    done = true;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Code128Reader.CODE_CODE_C:\n                        if (code < 100) {\n                            if (code < 10) {\n                                result += '0';\n                            }\n                            result += code;\n                        }\n                        else {\n                            if (code !== Code128Reader.CODE_STOP) {\n                                lastCharacterWasPrintable = false;\n                            }\n                            switch (code) {\n                                case Code128Reader.CODE_FNC_1:\n                                    if (convertFNC1) {\n                                        if (result.length === 0) {\n                                            // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code\n                                            // is FNC1 then this is GS1-128. We add the symbology identifier.\n                                            result += ']C1';\n                                        }\n                                        else {\n                                            // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS)\n                                            result += String.fromCharCode(29);\n                                        }\n                                    }\n                                    break;\n                                case Code128Reader.CODE_CODE_A:\n                                    codeSet = Code128Reader.CODE_CODE_A;\n                                    break;\n                                case Code128Reader.CODE_CODE_B:\n                                    codeSet = Code128Reader.CODE_CODE_B;\n                                    break;\n                                case Code128Reader.CODE_STOP:\n                                    done = true;\n                                    break;\n                            }\n                        }\n                        break;\n                }\n                // Unshift back to another code set if we were shifted\n                if (unshift) {\n                    codeSet = codeSet === Code128Reader.CODE_CODE_A ? Code128Reader.CODE_CODE_B : Code128Reader.CODE_CODE_A;\n                }\n            }\n            const lastPatternSize = nextStart - lastStart;\n            // Check for ample whitespace following pattern, but, to do this we first need to remember that\n            // we fudged decoding CODE_STOP since it actually has 7 bars, not 6. There is a black bar left\n            // to read off. Would be slightly better to properly read. Here we just skip it:\n            nextStart = row.getNextUnset(nextStart);\n            if (!row.isRange(nextStart, Math.min(row.getSize(), nextStart + (nextStart - lastStart) / 2), false)) {\n                throw new NotFoundException();\n            }\n            // Pull out from sum the value of the penultimate check code\n            checksumTotal -= multiplier * lastCode;\n            // lastCode is the checksum then:\n            if (checksumTotal % 103 !== lastCode) {\n                throw new ChecksumException();\n            }\n            // Need to pull out the check digits from string\n            const resultLength = result.length;\n            if (resultLength === 0) {\n                // false positive\n                throw new NotFoundException();\n            }\n            // Only bother if the result had at least one character, and if the checksum digit happened to\n            // be a printable character. If it was just interpreted as a control code, nothing to remove.\n            if (resultLength > 0 && lastCharacterWasPrintable) {\n                if (codeSet === Code128Reader.CODE_CODE_C) {\n                    result = result.substring(0, resultLength - 2);\n                }\n                else {\n                    result = result.substring(0, resultLength - 1);\n                }\n            }\n            const left = (startPatternInfo[1] + startPatternInfo[0]) / 2.0;\n            const right = lastStart + lastPatternSize / 2.0;\n            const rawCodesSize = rawCodes.length;\n            const rawBytes = new Uint8Array(rawCodesSize);\n            for (let i = 0; i < rawCodesSize; i++) {\n                rawBytes[i] = rawCodes[i];\n            }\n            const points = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)];\n            return new Result(result, rawBytes, 0, points, BarcodeFormat$1.CODE_128, new Date().getTime());\n        }\n    }\n    Code128Reader.CODE_PATTERNS = [\n        Int32Array.from([2, 1, 2, 2, 2, 2]),\n        Int32Array.from([2, 2, 2, 1, 2, 2]),\n        Int32Array.from([2, 2, 2, 2, 2, 1]),\n        Int32Array.from([1, 2, 1, 2, 2, 3]),\n        Int32Array.from([1, 2, 1, 3, 2, 2]),\n        Int32Array.from([1, 3, 1, 2, 2, 2]),\n        Int32Array.from([1, 2, 2, 2, 1, 3]),\n        Int32Array.from([1, 2, 2, 3, 1, 2]),\n        Int32Array.from([1, 3, 2, 2, 1, 2]),\n        Int32Array.from([2, 2, 1, 2, 1, 3]),\n        Int32Array.from([2, 2, 1, 3, 1, 2]),\n        Int32Array.from([2, 3, 1, 2, 1, 2]),\n        Int32Array.from([1, 1, 2, 2, 3, 2]),\n        Int32Array.from([1, 2, 2, 1, 3, 2]),\n        Int32Array.from([1, 2, 2, 2, 3, 1]),\n        Int32Array.from([1, 1, 3, 2, 2, 2]),\n        Int32Array.from([1, 2, 3, 1, 2, 2]),\n        Int32Array.from([1, 2, 3, 2, 2, 1]),\n        Int32Array.from([2, 2, 3, 2, 1, 1]),\n        Int32Array.from([2, 2, 1, 1, 3, 2]),\n        Int32Array.from([2, 2, 1, 2, 3, 1]),\n        Int32Array.from([2, 1, 3, 2, 1, 2]),\n        Int32Array.from([2, 2, 3, 1, 1, 2]),\n        Int32Array.from([3, 1, 2, 1, 3, 1]),\n        Int32Array.from([3, 1, 1, 2, 2, 2]),\n        Int32Array.from([3, 2, 1, 1, 2, 2]),\n        Int32Array.from([3, 2, 1, 2, 2, 1]),\n        Int32Array.from([3, 1, 2, 2, 1, 2]),\n        Int32Array.from([3, 2, 2, 1, 1, 2]),\n        Int32Array.from([3, 2, 2, 2, 1, 1]),\n        Int32Array.from([2, 1, 2, 1, 2, 3]),\n        Int32Array.from([2, 1, 2, 3, 2, 1]),\n        Int32Array.from([2, 3, 2, 1, 2, 1]),\n        Int32Array.from([1, 1, 1, 3, 2, 3]),\n        Int32Array.from([1, 3, 1, 1, 2, 3]),\n        Int32Array.from([1, 3, 1, 3, 2, 1]),\n        Int32Array.from([1, 1, 2, 3, 1, 3]),\n        Int32Array.from([1, 3, 2, 1, 1, 3]),\n        Int32Array.from([1, 3, 2, 3, 1, 1]),\n        Int32Array.from([2, 1, 1, 3, 1, 3]),\n        Int32Array.from([2, 3, 1, 1, 1, 3]),\n        Int32Array.from([2, 3, 1, 3, 1, 1]),\n        Int32Array.from([1, 1, 2, 1, 3, 3]),\n        Int32Array.from([1, 1, 2, 3, 3, 1]),\n        Int32Array.from([1, 3, 2, 1, 3, 1]),\n        Int32Array.from([1, 1, 3, 1, 2, 3]),\n        Int32Array.from([1, 1, 3, 3, 2, 1]),\n        Int32Array.from([1, 3, 3, 1, 2, 1]),\n        Int32Array.from([3, 1, 3, 1, 2, 1]),\n        Int32Array.from([2, 1, 1, 3, 3, 1]),\n        Int32Array.from([2, 3, 1, 1, 3, 1]),\n        Int32Array.from([2, 1, 3, 1, 1, 3]),\n        Int32Array.from([2, 1, 3, 3, 1, 1]),\n        Int32Array.from([2, 1, 3, 1, 3, 1]),\n        Int32Array.from([3, 1, 1, 1, 2, 3]),\n        Int32Array.from([3, 1, 1, 3, 2, 1]),\n        Int32Array.from([3, 3, 1, 1, 2, 1]),\n        Int32Array.from([3, 1, 2, 1, 1, 3]),\n        Int32Array.from([3, 1, 2, 3, 1, 1]),\n        Int32Array.from([3, 3, 2, 1, 1, 1]),\n        Int32Array.from([3, 1, 4, 1, 1, 1]),\n        Int32Array.from([2, 2, 1, 4, 1, 1]),\n        Int32Array.from([4, 3, 1, 1, 1, 1]),\n        Int32Array.from([1, 1, 1, 2, 2, 4]),\n        Int32Array.from([1, 1, 1, 4, 2, 2]),\n        Int32Array.from([1, 2, 1, 1, 2, 4]),\n        Int32Array.from([1, 2, 1, 4, 2, 1]),\n        Int32Array.from([1, 4, 1, 1, 2, 2]),\n        Int32Array.from([1, 4, 1, 2, 2, 1]),\n        Int32Array.from([1, 1, 2, 2, 1, 4]),\n        Int32Array.from([1, 1, 2, 4, 1, 2]),\n        Int32Array.from([1, 2, 2, 1, 1, 4]),\n        Int32Array.from([1, 2, 2, 4, 1, 1]),\n        Int32Array.from([1, 4, 2, 1, 1, 2]),\n        Int32Array.from([1, 4, 2, 2, 1, 1]),\n        Int32Array.from([2, 4, 1, 2, 1, 1]),\n        Int32Array.from([2, 2, 1, 1, 1, 4]),\n        Int32Array.from([4, 1, 3, 1, 1, 1]),\n        Int32Array.from([2, 4, 1, 1, 1, 2]),\n        Int32Array.from([1, 3, 4, 1, 1, 1]),\n        Int32Array.from([1, 1, 1, 2, 4, 2]),\n        Int32Array.from([1, 2, 1, 1, 4, 2]),\n        Int32Array.from([1, 2, 1, 2, 4, 1]),\n        Int32Array.from([1, 1, 4, 2, 1, 2]),\n        Int32Array.from([1, 2, 4, 1, 1, 2]),\n        Int32Array.from([1, 2, 4, 2, 1, 1]),\n        Int32Array.from([4, 1, 1, 2, 1, 2]),\n        Int32Array.from([4, 2, 1, 1, 1, 2]),\n        Int32Array.from([4, 2, 1, 2, 1, 1]),\n        Int32Array.from([2, 1, 2, 1, 4, 1]),\n        Int32Array.from([2, 1, 4, 1, 2, 1]),\n        Int32Array.from([4, 1, 2, 1, 2, 1]),\n        Int32Array.from([1, 1, 1, 1, 4, 3]),\n        Int32Array.from([1, 1, 1, 3, 4, 1]),\n        Int32Array.from([1, 3, 1, 1, 4, 1]),\n        Int32Array.from([1, 1, 4, 1, 1, 3]),\n        Int32Array.from([1, 1, 4, 3, 1, 1]),\n        Int32Array.from([4, 1, 1, 1, 1, 3]),\n        Int32Array.from([4, 1, 1, 3, 1, 1]),\n        Int32Array.from([1, 1, 3, 1, 4, 1]),\n        Int32Array.from([1, 1, 4, 1, 3, 1]),\n        Int32Array.from([3, 1, 1, 1, 4, 1]),\n        Int32Array.from([4, 1, 1, 1, 3, 1]),\n        Int32Array.from([2, 1, 1, 4, 1, 2]),\n        Int32Array.from([2, 1, 1, 2, 1, 4]),\n        Int32Array.from([2, 1, 1, 2, 3, 2]),\n        Int32Array.from([2, 3, 3, 1, 1, 1, 2]),\n    ];\n    Code128Reader.MAX_AVG_VARIANCE = 0.25;\n    Code128Reader.MAX_INDIVIDUAL_VARIANCE = 0.7;\n    Code128Reader.CODE_SHIFT = 98;\n    Code128Reader.CODE_CODE_C = 99;\n    Code128Reader.CODE_CODE_B = 100;\n    Code128Reader.CODE_CODE_A = 101;\n    Code128Reader.CODE_FNC_1 = 102;\n    Code128Reader.CODE_FNC_2 = 97;\n    Code128Reader.CODE_FNC_3 = 96;\n    Code128Reader.CODE_FNC_4_A = 101;\n    Code128Reader.CODE_FNC_4_B = 100;\n    Code128Reader.CODE_START_A = 103;\n    Code128Reader.CODE_START_B = 104;\n    Code128Reader.CODE_START_C = 105;\n    Code128Reader.CODE_STOP = 106;\n\n    /**\n     * <p>Decodes Code 39 barcodes. Supports \"Full ASCII Code 39\" if USE_CODE_39_EXTENDED_MODE is set.</p>\n     *\n     * @author Sean Owen\n     * @see Code93Reader\n     */\n    class Code39Reader extends OneDReader {\n        /**\n         * Creates a reader that assumes all encoded data is data, and does not treat the final\n         * character as a check digit. It will not decoded \"extended Code 39\" sequences.\n         */\n        // public Code39Reader() {\n        //   this(false);\n        // }\n        /**\n         * Creates a reader that can be configured to check the last character as a check digit.\n         * It will not decoded \"extended Code 39\" sequences.\n         *\n         * @param usingCheckDigit if true, treat the last data character as a check digit, not\n         * data, and verify that the checksum passes.\n         */\n        // public Code39Reader(boolean usingCheckDigit) {\n        //   this(usingCheckDigit, false);\n        // }\n        /**\n         * Creates a reader that can be configured to check the last character as a check digit,\n         * or optionally attempt to decode \"extended Code 39\" sequences that are used to encode\n         * the full ASCII character set.\n         *\n         * @param usingCheckDigit if true, treat the last data character as a check digit, not\n         * data, and verify that the checksum passes.\n         * @param extendedMode if true, will attempt to decode extended Code 39 sequences in the\n         * text.\n         */\n        constructor(usingCheckDigit = false, extendedMode = false) {\n            super();\n            this.usingCheckDigit = usingCheckDigit;\n            this.extendedMode = extendedMode;\n            this.decodeRowResult = '';\n            this.counters = new Int32Array(9);\n        }\n        decodeRow(rowNumber, row, hints) {\n            let theCounters = this.counters;\n            theCounters.fill(0);\n            this.decodeRowResult = '';\n            let start = Code39Reader.findAsteriskPattern(row, theCounters);\n            // Read off white space\n            let nextStart = row.getNextSet(start[1]);\n            let end = row.getSize();\n            let decodedChar;\n            let lastStart;\n            do {\n                Code39Reader.recordPattern(row, nextStart, theCounters);\n                let pattern = Code39Reader.toNarrowWidePattern(theCounters);\n                if (pattern < 0) {\n                    throw new NotFoundException();\n                }\n                decodedChar = Code39Reader.patternToChar(pattern);\n                this.decodeRowResult += decodedChar;\n                lastStart = nextStart;\n                for (let counter of theCounters) {\n                    nextStart += counter;\n                }\n                // Read off white space\n                nextStart = row.getNextSet(nextStart);\n            } while (decodedChar !== '*');\n            this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 1); // remove asterisk\n            // Look for whitespace after pattern:\n            let lastPatternSize = 0;\n            for (let counter of theCounters) {\n                lastPatternSize += counter;\n            }\n            let whiteSpaceAfterEnd = nextStart - lastStart - lastPatternSize;\n            // If 50% of last pattern size, following last pattern, is not whitespace, fail\n            // (but if it's whitespace to the very end of the image, that's OK)\n            if (nextStart !== end && (whiteSpaceAfterEnd * 2) < lastPatternSize) {\n                throw new NotFoundException();\n            }\n            if (this.usingCheckDigit) {\n                let max = this.decodeRowResult.length - 1;\n                let total = 0;\n                for (let i = 0; i < max; i++) {\n                    total += Code39Reader.ALPHABET_STRING.indexOf(this.decodeRowResult.charAt(i));\n                }\n                if (this.decodeRowResult.charAt(max) !== Code39Reader.ALPHABET_STRING.charAt(total % 43)) {\n                    throw new ChecksumException();\n                }\n                this.decodeRowResult = this.decodeRowResult.substring(0, max);\n            }\n            if (this.decodeRowResult.length === 0) {\n                // false positive\n                throw new NotFoundException();\n            }\n            let resultString;\n            if (this.extendedMode) {\n                resultString = Code39Reader.decodeExtended(this.decodeRowResult);\n            }\n            else {\n                resultString = this.decodeRowResult;\n            }\n            let left = (start[1] + start[0]) / 2.0;\n            let right = lastStart + lastPatternSize / 2.0;\n            return new Result(resultString, null, 0, [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)], BarcodeFormat$1.CODE_39, new Date().getTime());\n        }\n        static findAsteriskPattern(row, counters) {\n            let width = row.getSize();\n            let rowOffset = row.getNextSet(0);\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            let isWhite = false;\n            let patternLength = counters.length;\n            for (let i = rowOffset; i < width; i++) {\n                if (row.get(i) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === patternLength - 1) {\n                        // Look for whitespace before start pattern, >= 50% of width of start pattern\n                        if (this.toNarrowWidePattern(counters) === Code39Reader.ASTERISK_ENCODING &&\n                            row.isRange(Math.max(0, patternStart - Math.floor((i - patternStart) / 2)), patternStart, false)) {\n                            return [patternStart, i];\n                        }\n                        patternStart += counters[0] + counters[1];\n                        counters.copyWithin(0, 2, 2 + counterPosition - 1);\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        // For efficiency, returns -1 on failure. Not throwing here saved as many as 700 exceptions\n        // per image when using some of our blackbox images.\n        static toNarrowWidePattern(counters) {\n            let numCounters = counters.length;\n            let maxNarrowCounter = 0;\n            let wideCounters;\n            do {\n                let minCounter = 0x7fffffff;\n                for (let counter of counters) {\n                    if (counter < minCounter && counter > maxNarrowCounter) {\n                        minCounter = counter;\n                    }\n                }\n                maxNarrowCounter = minCounter;\n                wideCounters = 0;\n                let totalWideCountersWidth = 0;\n                let pattern = 0;\n                for (let i = 0; i < numCounters; i++) {\n                    let counter = counters[i];\n                    if (counter > maxNarrowCounter) {\n                        pattern |= 1 << (numCounters - 1 - i);\n                        wideCounters++;\n                        totalWideCountersWidth += counter;\n                    }\n                }\n                if (wideCounters === 3) {\n                    // Found 3 wide counters, but are they close enough in width?\n                    // We can perform a cheap, conservative check to see if any individual\n                    // counter is more than 1.5 times the average:\n                    for (let i = 0; i < numCounters && wideCounters > 0; i++) {\n                        let counter = counters[i];\n                        if (counter > maxNarrowCounter) {\n                            wideCounters--;\n                            // totalWideCountersWidth = 3 * average, so this checks if counter >= 3/2 * average\n                            if ((counter * 2) >= totalWideCountersWidth) {\n                                return -1;\n                            }\n                        }\n                    }\n                    return pattern;\n                }\n            } while (wideCounters > 3);\n            return -1;\n        }\n        static patternToChar(pattern) {\n            for (let i = 0; i < Code39Reader.CHARACTER_ENCODINGS.length; i++) {\n                if (Code39Reader.CHARACTER_ENCODINGS[i] === pattern) {\n                    return Code39Reader.ALPHABET_STRING.charAt(i);\n                }\n            }\n            if (pattern === Code39Reader.ASTERISK_ENCODING) {\n                return '*';\n            }\n            throw new NotFoundException();\n        }\n        static decodeExtended(encoded) {\n            let length = encoded.length;\n            let decoded = '';\n            for (let i = 0; i < length; i++) {\n                let c = encoded.charAt(i);\n                if (c === '+' || c === '$' || c === '%' || c === '/') {\n                    let next = encoded.charAt(i + 1);\n                    let decodedChar = '\\0';\n                    switch (c) {\n                        case '+':\n                            // +A to +Z map to a to z\n                            if (next >= 'A' && next <= 'Z') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) + 32);\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case '$':\n                            // $A to $Z map to control codes SH to SB\n                            if (next >= 'A' && next <= 'Z') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) - 64);\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case '%':\n                            // %A to %E map to control codes ESC to US\n                            if (next >= 'A' && next <= 'E') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) - 38);\n                            }\n                            else if (next >= 'F' && next <= 'J') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) - 11);\n                            }\n                            else if (next >= 'K' && next <= 'O') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) + 16);\n                            }\n                            else if (next >= 'P' && next <= 'T') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) + 43);\n                            }\n                            else if (next === 'U') {\n                                decodedChar = '\\0';\n                            }\n                            else if (next === 'V') {\n                                decodedChar = '@';\n                            }\n                            else if (next === 'W') {\n                                decodedChar = '`';\n                            }\n                            else if (next === 'X' || next === 'Y' || next === 'Z') {\n                                decodedChar = '\\x7f';\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case '/':\n                            // /A to /O map to ! to , and /Z maps to :\n                            if (next >= 'A' && next <= 'O') {\n                                decodedChar = String.fromCharCode(next.charCodeAt(0) - 32);\n                            }\n                            else if (next === 'Z') {\n                                decodedChar = ':';\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                    }\n                    decoded += decodedChar;\n                    // bump up i again since we read two characters\n                    i++;\n                }\n                else {\n                    decoded += c;\n                }\n            }\n            return decoded;\n        }\n    }\n    Code39Reader.ALPHABET_STRING = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';\n    /**\n     * These represent the encodings of characters, as patterns of wide and narrow bars.\n     * The 9 least-significant bits of each int correspond to the pattern of wide and narrow,\n     * with 1s representing \"wide\" and 0s representing narrow.\n     */\n    Code39Reader.CHARACTER_ENCODINGS = [\n        0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064,\n        0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C,\n        0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016,\n        0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x0A8,\n        0x0A2, 0x08A, 0x02A // /-%\n    ];\n    Code39Reader.ASTERISK_ENCODING = 0x094;\n\n    /**\n     * <p>Decodes ITF barcodes.</p>\n     *\n     * @author Tjieco\n     */\n    class ITFReader extends OneDReader {\n        constructor() {\n            // private static W = 3; // Pixel width of a 3x wide line\n            // private static w = 2; // Pixel width of a 2x wide line\n            // private static N = 1; // Pixed width of a narrow line\n            super(...arguments);\n            // Stores the actual narrow line width of the image being decoded.\n            this.narrowLineWidth = -1;\n        }\n        // See ITFWriter.PATTERNS\n        /*\n      \n        /!**\n         * Patterns of Wide / Narrow lines to indicate each digit\n         *!/\n        */\n        decodeRow(rowNumber, row, hints) {\n            // Find out where the Middle section (payload) starts & ends\n            let startRange = this.decodeStart(row);\n            let endRange = this.decodeEnd(row);\n            let result = new StringBuilder();\n            ITFReader.decodeMiddle(row, startRange[1], endRange[0], result);\n            let resultString = result.toString();\n            let allowedLengths = null;\n            if (hints != null) {\n                allowedLengths = hints.get(DecodeHintType$1.ALLOWED_LENGTHS);\n            }\n            if (allowedLengths == null) {\n                allowedLengths = ITFReader.DEFAULT_ALLOWED_LENGTHS;\n            }\n            // To avoid false positives with 2D barcodes (and other patterns), make\n            // an assumption that the decoded string must be a 'standard' length if it's short\n            let length = resultString.length;\n            let lengthOK = false;\n            let maxAllowedLength = 0;\n            for (let value of allowedLengths) {\n                if (length === value) {\n                    lengthOK = true;\n                    break;\n                }\n                if (value > maxAllowedLength) {\n                    maxAllowedLength = value;\n                }\n            }\n            if (!lengthOK && length > maxAllowedLength) {\n                lengthOK = true;\n            }\n            if (!lengthOK) {\n                throw new FormatException();\n            }\n            const points = [new ResultPoint(startRange[1], rowNumber), new ResultPoint(endRange[0], rowNumber)];\n            let resultReturn = new Result(resultString, null, // no natural byte representation for these barcodes\n            0, points, BarcodeFormat$1.ITF, new Date().getTime());\n            return resultReturn;\n        }\n        /*\n        /!**\n         * @param row          row of black/white values to search\n         * @param payloadStart offset of start pattern\n         * @param resultString {@link StringBuilder} to append decoded chars to\n         * @throws NotFoundException if decoding could not complete successfully\n         *!/*/\n        static decodeMiddle(row, payloadStart, payloadEnd, resultString) {\n            // Digits are interleaved in pairs - 5 black lines for one digit, and the\n            // 5\n            // interleaved white lines for the second digit.\n            // Therefore, need to scan 10 lines and then\n            // split these into two arrays\n            let counterDigitPair = new Int32Array(10); // 10\n            let counterBlack = new Int32Array(5); // 5\n            let counterWhite = new Int32Array(5); // 5\n            counterDigitPair.fill(0);\n            counterBlack.fill(0);\n            counterWhite.fill(0);\n            while (payloadStart < payloadEnd) {\n                // Get 10 runs of black/white.\n                OneDReader.recordPattern(row, payloadStart, counterDigitPair);\n                // Split them into each array\n                for (let k = 0; k < 5; k++) {\n                    let twoK = 2 * k;\n                    counterBlack[k] = counterDigitPair[twoK];\n                    counterWhite[k] = counterDigitPair[twoK + 1];\n                }\n                let bestMatch = ITFReader.decodeDigit(counterBlack);\n                resultString.append(bestMatch.toString());\n                bestMatch = this.decodeDigit(counterWhite);\n                resultString.append(bestMatch.toString());\n                counterDigitPair.forEach(function (counterDigit) {\n                    payloadStart += counterDigit;\n                });\n            }\n        }\n        /*/!**\n         * Identify where the start of the middle / payload section starts.\n         *\n         * @param row row of black/white values to search\n         * @return Array, containing index of start of 'start block' and end of\n         *         'start block'\n         *!/*/\n        decodeStart(row) {\n            let endStart = ITFReader.skipWhiteSpace(row);\n            let startPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.START_PATTERN);\n            // Determine the width of a narrow line in pixels. We can do this by\n            // getting the width of the start pattern and dividing by 4 because its\n            // made up of 4 narrow lines.\n            this.narrowLineWidth = (startPattern[1] - startPattern[0]) / 4;\n            this.validateQuietZone(row, startPattern[0]);\n            return startPattern;\n        }\n        /*/!**\n         * The start & end patterns must be pre/post fixed by a quiet zone. This\n         * zone must be at least 10 times the width of a narrow line.  Scan back until\n         * we either get to the start of the barcode or match the necessary number of\n         * quiet zone pixels.\n         *\n         * Note: Its assumed the row is reversed when using this method to find\n         * quiet zone after the end pattern.\n         *\n         * ref: http://www.barcode-1.net/i25code.html\n         *\n         * @param row bit array representing the scanned barcode.\n         * @param startPattern index into row of the start or end pattern.\n         * @throws NotFoundException if the quiet zone cannot be found\n         *!/*/\n        validateQuietZone(row, startPattern) {\n            let quietCount = this.narrowLineWidth * 10; // expect to find this many pixels of quiet zone\n            // if there are not so many pixel at all let's try as many as possible\n            quietCount = quietCount < startPattern ? quietCount : startPattern;\n            for (let i = startPattern - 1; quietCount > 0 && i >= 0; i--) {\n                if (row.get(i)) {\n                    break;\n                }\n                quietCount--;\n            }\n            if (quietCount !== 0) {\n                // Unable to find the necessary number of quiet zone pixels.\n                throw new NotFoundException();\n            }\n        }\n        /*\n        /!**\n         * Skip all whitespace until we get to the first black line.\n         *\n         * @param row row of black/white values to search\n         * @return index of the first black line.\n         * @throws NotFoundException Throws exception if no black lines are found in the row\n         *!/*/\n        static skipWhiteSpace(row) {\n            const width = row.getSize();\n            const endStart = row.getNextSet(0);\n            if (endStart === width) {\n                throw new NotFoundException();\n            }\n            return endStart;\n        }\n        /*/!**\n         * Identify where the end of the middle / payload section ends.\n         *\n         * @param row row of black/white values to search\n         * @return Array, containing index of start of 'end block' and end of 'end\n         *         block'\n         *!/*/\n        decodeEnd(row) {\n            // For convenience, reverse the row and then\n            // search from 'the start' for the end block\n            row.reverse();\n            try {\n                let endStart = ITFReader.skipWhiteSpace(row);\n                let endPattern;\n                try {\n                    endPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.END_PATTERN_REVERSED[0]);\n                }\n                catch (error) {\n                    if (error instanceof NotFoundException) {\n                        endPattern = ITFReader.findGuardPattern(row, endStart, ITFReader.END_PATTERN_REVERSED[1]);\n                    }\n                }\n                // The start & end patterns must be pre/post fixed by a quiet zone. This\n                // zone must be at least 10 times the width of a narrow line.\n                // ref: http://www.barcode-1.net/i25code.html\n                this.validateQuietZone(row, endPattern[0]);\n                // Now recalculate the indices of where the 'endblock' starts & stops to\n                // accommodate\n                // the reversed nature of the search\n                let temp = endPattern[0];\n                endPattern[0] = row.getSize() - endPattern[1];\n                endPattern[1] = row.getSize() - temp;\n                return endPattern;\n            }\n            finally {\n                // Put the row back the right way.\n                row.reverse();\n            }\n        }\n        /*\n        /!**\n         * @param row       row of black/white values to search\n         * @param rowOffset position to start search\n         * @param pattern   pattern of counts of number of black and white pixels that are\n         *                  being searched for as a pattern\n         * @return start/end horizontal offset of guard pattern, as an array of two\n         *         ints\n         * @throws NotFoundException if pattern is not found\n         *!/*/\n        static findGuardPattern(row, rowOffset, pattern) {\n            let patternLength = pattern.length;\n            let counters = new Int32Array(patternLength);\n            let width = row.getSize();\n            let isWhite = false;\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            counters.fill(0);\n            for (let x = rowOffset; x < width; x++) {\n                if (row.get(x) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === patternLength - 1) {\n                        if (OneDReader.patternMatchVariance(counters, pattern, ITFReader.MAX_INDIVIDUAL_VARIANCE) < ITFReader.MAX_AVG_VARIANCE) {\n                            return [patternStart, x];\n                        }\n                        patternStart += counters[0] + counters[1];\n                        System.arraycopy(counters, 2, counters, 0, counterPosition - 1);\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        /*/!**\n         * Attempts to decode a sequence of ITF black/white lines into single\n         * digit.\n         *\n         * @param counters the counts of runs of observed black/white/black/... values\n         * @return The decoded digit\n         * @throws NotFoundException if digit cannot be decoded\n         *!/*/\n        static decodeDigit(counters) {\n            let bestVariance = ITFReader.MAX_AVG_VARIANCE; // worst variance we'll accept\n            let bestMatch = -1;\n            let max = ITFReader.PATTERNS.length;\n            for (let i = 0; i < max; i++) {\n                let pattern = ITFReader.PATTERNS[i];\n                let variance = OneDReader.patternMatchVariance(counters, pattern, ITFReader.MAX_INDIVIDUAL_VARIANCE);\n                if (variance < bestVariance) {\n                    bestVariance = variance;\n                    bestMatch = i;\n                }\n                else if (variance === bestVariance) {\n                    // if we find a second 'best match' with the same variance, we can not reliably report to have a suitable match\n                    bestMatch = -1;\n                }\n            }\n            if (bestMatch >= 0) {\n                return bestMatch % 10;\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n    }\n    ITFReader.PATTERNS = [\n        Int32Array.from([1, 1, 2, 2, 1]),\n        Int32Array.from([2, 1, 1, 1, 2]),\n        Int32Array.from([1, 2, 1, 1, 2]),\n        Int32Array.from([2, 2, 1, 1, 1]),\n        Int32Array.from([1, 1, 2, 1, 2]),\n        Int32Array.from([2, 1, 2, 1, 1]),\n        Int32Array.from([1, 2, 2, 1, 1]),\n        Int32Array.from([1, 1, 1, 2, 2]),\n        Int32Array.from([2, 1, 1, 2, 1]),\n        Int32Array.from([1, 2, 1, 2, 1]),\n        Int32Array.from([1, 1, 3, 3, 1]),\n        Int32Array.from([3, 1, 1, 1, 3]),\n        Int32Array.from([1, 3, 1, 1, 3]),\n        Int32Array.from([3, 3, 1, 1, 1]),\n        Int32Array.from([1, 1, 3, 1, 3]),\n        Int32Array.from([3, 1, 3, 1, 1]),\n        Int32Array.from([1, 3, 3, 1, 1]),\n        Int32Array.from([1, 1, 1, 3, 3]),\n        Int32Array.from([3, 1, 1, 3, 1]),\n        Int32Array.from([1, 3, 1, 3, 1]) // 9\n    ];\n    ITFReader.MAX_AVG_VARIANCE = 0.38;\n    ITFReader.MAX_INDIVIDUAL_VARIANCE = 0.5;\n    /* /!** Valid ITF lengths. Anything longer than the largest value is also allowed. *!/*/\n    ITFReader.DEFAULT_ALLOWED_LENGTHS = [6, 8, 10, 12, 14];\n    /*/!**\n     * Start/end guard pattern.\n     *\n     * Note: The end pattern is reversed because the row is reversed before\n     * searching for the END_PATTERN\n     *!/*/\n    ITFReader.START_PATTERN = Int32Array.from([1, 1, 1, 1]);\n    ITFReader.END_PATTERN_REVERSED = [\n        Int32Array.from([1, 1, 2]),\n        Int32Array.from([1, 1, 3]) // 3x\n    ];\n\n    /**\n     * <p>Encapsulates functionality and implementation that is common to UPC and EAN families\n     * of one-dimensional barcodes.</p>\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     * @author alasdair@google.com (Alasdair Mackintosh)\n     */\n    class AbstractUPCEANReader extends OneDReader {\n        constructor() {\n            super(...arguments);\n            this.decodeRowStringBuffer = '';\n        }\n\n        static findStartGuardPattern(row) {\n            let foundStart = false;\n            let startRange;\n            let nextStart = 0;\n            let counters = Int32Array.from([0, 0, 0]);\n            while (!foundStart) {\n                counters = Int32Array.from([0, 0, 0]);\n                startRange = AbstractUPCEANReader.findGuardPattern(row, nextStart, false, this.START_END_PATTERN, counters);\n                let start = startRange[0];\n                nextStart = startRange[1];\n                let quietStart = start - (nextStart - start);\n                if (quietStart >= 0) {\n                    foundStart = row.isRange(quietStart, start, false);\n                }\n            }\n            return startRange;\n        }\n        static checkChecksum(s) {\n            return AbstractUPCEANReader.checkStandardUPCEANChecksum(s);\n        }\n        static checkStandardUPCEANChecksum(s) {\n            let length = s.length;\n            if (length === 0)\n                return false;\n            let check = parseInt(s.charAt(length - 1), 10);\n            return AbstractUPCEANReader.getStandardUPCEANChecksum(s.substring(0, length - 1)) === check;\n        }\n        static getStandardUPCEANChecksum(s) {\n            let length = s.length;\n            let sum = 0;\n            for (let i = length - 1; i >= 0; i -= 2) {\n                let digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                if (digit < 0 || digit > 9) {\n                    throw new FormatException();\n                }\n                sum += digit;\n            }\n            sum *= 3;\n            for (let i = length - 2; i >= 0; i -= 2) {\n                let digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                if (digit < 0 || digit > 9) {\n                    throw new FormatException();\n                }\n                sum += digit;\n            }\n            return (1000 - sum) % 10;\n        }\n        static decodeEnd(row, endStart) {\n            return AbstractUPCEANReader.findGuardPattern(row, endStart, false, AbstractUPCEANReader.START_END_PATTERN, new Int32Array(AbstractUPCEANReader.START_END_PATTERN.length).fill(0));\n        }\n        /**\n         * @throws NotFoundException\n         */\n        static findGuardPatternWithoutCounters(row, rowOffset, whiteFirst, pattern) {\n            return this.findGuardPattern(row, rowOffset, whiteFirst, pattern, new Int32Array(pattern.length));\n        }\n        /**\n         * @param row row of black/white values to search\n         * @param rowOffset position to start search\n         * @param whiteFirst if true, indicates that the pattern specifies white/black/white/...\n         * pixel counts, otherwise, it is interpreted as black/white/black/...\n         * @param pattern pattern of counts of number of black and white pixels that are being\n         * searched for as a pattern\n         * @param counters array of counters, as long as pattern, to re-use\n         * @return start/end horizontal offset of guard pattern, as an array of two ints\n         * @throws NotFoundException if pattern is not found\n         */\n        static findGuardPattern(row, rowOffset, whiteFirst, pattern, counters) {\n            let width = row.getSize();\n            rowOffset = whiteFirst ? row.getNextUnset(rowOffset) : row.getNextSet(rowOffset);\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            let patternLength = pattern.length;\n            let isWhite = whiteFirst;\n            for (let x = rowOffset; x < width; x++) {\n                if (row.get(x) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === patternLength - 1) {\n                        if (OneDReader.patternMatchVariance(counters, pattern, AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE) < AbstractUPCEANReader.MAX_AVG_VARIANCE) {\n                            return Int32Array.from([patternStart, x]);\n                        }\n                        patternStart += counters[0] + counters[1];\n                        let slice = counters.slice(2, counters.length - 1);\n                        for (let i = 0; i < counterPosition - 1; i++) {\n                            counters[i] = slice[i];\n                        }\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        static decodeDigit(row, counters, rowOffset, patterns) {\n            this.recordPattern(row, rowOffset, counters);\n            let bestVariance = this.MAX_AVG_VARIANCE;\n            let bestMatch = -1;\n            let max = patterns.length;\n            for (let i = 0; i < max; i++) {\n                let pattern = patterns[i];\n                let variance = OneDReader.patternMatchVariance(counters, pattern, AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE);\n                if (variance < bestVariance) {\n                    bestVariance = variance;\n                    bestMatch = i;\n                }\n            }\n            if (bestMatch >= 0) {\n                return bestMatch;\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n    }\n    // These two values are critical for determining how permissive the decoding will be.\n    // We've arrived at these values through a lot of trial and error. Setting them any higher\n    // lets false positives creep in quickly.\n    AbstractUPCEANReader.MAX_AVG_VARIANCE = 0.48;\n    AbstractUPCEANReader.MAX_INDIVIDUAL_VARIANCE = 0.7;\n    /**\n     * Start/end guard pattern.\n     */\n    AbstractUPCEANReader.START_END_PATTERN = Int32Array.from([1, 1, 1]);\n    /**\n     * Pattern marking the middle of a UPC/EAN pattern, separating the two halves.\n     */\n    AbstractUPCEANReader.MIDDLE_PATTERN = Int32Array.from([1, 1, 1, 1, 1]);\n    /**\n     * end guard pattern.\n     */\n    AbstractUPCEANReader.END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]);\n    /**\n     * \"Odd\", or \"L\" patterns used to encode UPC/EAN digits.\n     */\n    AbstractUPCEANReader.L_PATTERNS = [\n        Int32Array.from([3, 2, 1, 1]),\n        Int32Array.from([2, 2, 2, 1]),\n        Int32Array.from([2, 1, 2, 2]),\n        Int32Array.from([1, 4, 1, 1]),\n        Int32Array.from([1, 1, 3, 2]),\n        Int32Array.from([1, 2, 3, 1]),\n        Int32Array.from([1, 1, 1, 4]),\n        Int32Array.from([1, 3, 1, 2]),\n        Int32Array.from([1, 2, 1, 3]),\n        Int32Array.from([3, 1, 1, 2]),\n    ];\n\n    /**\n     * @see UPCEANExtension2Support\n     */\n    class UPCEANExtension5Support {\n        constructor() {\n            this.CHECK_DIGIT_ENCODINGS = [0x18, 0x14, 0x12, 0x11, 0x0C, 0x06, 0x03, 0x0A, 0x09, 0x05];\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n            this.decodeRowStringBuffer = '';\n        }\n        decodeRow(rowNumber, row, extensionStartRange) {\n            let result = this.decodeRowStringBuffer;\n            let end = this.decodeMiddle(row, extensionStartRange, result);\n            let resultString = result.toString();\n            let extensionData = UPCEANExtension5Support.parseExtensionString(resultString);\n            let resultPoints = [\n                new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0, rowNumber),\n                new ResultPoint(end, rowNumber)\n            ];\n            let extensionResult = new Result(resultString, null, 0, resultPoints, BarcodeFormat$1.UPC_EAN_EXTENSION, new Date().getTime());\n            if (extensionData != null) {\n                extensionResult.putAllMetadata(extensionData);\n            }\n            return extensionResult;\n        }\n        decodeMiddle(row, startRange, resultString) {\n            let counters = this.decodeMiddleCounters;\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let end = row.getSize();\n            let rowOffset = startRange[1];\n            let lgPatternFound = 0;\n            for (let x = 0; x < 5 && rowOffset < end; x++) {\n                let bestMatch = AbstractUPCEANReader.decodeDigit(\n                    row,\n                    counters,\n                    rowOffset,\n                    AbstractUPCEANReader.L_AND_G_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n                if (bestMatch >= 10) {\n                    lgPatternFound |= 1 << (4 - x);\n                }\n                if (x !== 4) {\n                    // Read off separator if not last\n                    rowOffset = row.getNextSet(rowOffset);\n                    rowOffset = row.getNextUnset(rowOffset);\n                }\n            }\n            if (resultString.length !== 5) {\n                throw new NotFoundException();\n            }\n            let checkDigit = this.determineCheckDigit(lgPatternFound);\n            if (UPCEANExtension5Support.extensionChecksum(resultString.toString()) !== checkDigit) {\n                throw new NotFoundException();\n            }\n            return rowOffset;\n        }\n        static extensionChecksum(s) {\n            let length = s.length;\n            let sum = 0;\n            for (let i = length - 2; i >= 0; i -= 2) {\n                sum += s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n            }\n            sum *= 3;\n            for (let i = length - 1; i >= 0; i -= 2) {\n                sum += s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n            }\n            sum *= 3;\n            return sum % 10;\n        }\n        determineCheckDigit(lgPatternFound) {\n            for (let d = 0; d < 10; d++) {\n                if (lgPatternFound === this.CHECK_DIGIT_ENCODINGS[d]) {\n                    return d;\n                }\n            }\n            throw new NotFoundException();\n        }\n        static parseExtensionString(raw) {\n            if (raw.length !== 5) {\n                return null;\n            }\n            let value = UPCEANExtension5Support.parseExtension5String(raw);\n            if (value == null) {\n                return null;\n            }\n            return new Map([[ResultMetadataType$1.SUGGESTED_PRICE, value]]);\n        }\n        static parseExtension5String(raw) {\n            let currency;\n            switch (raw.charAt(0)) {\n                case '0':\n                    currency = '\u00A3';\n                    break;\n                case '5':\n                    currency = '$';\n                    break;\n                case '9':\n                    // Reference: http://www.jollytech.com\n                    switch (raw) {\n                        case '90000':\n                            // No suggested retail price\n                            return null;\n                        case '99991':\n                            // Complementary\n                            return '0.00';\n                        case '99990':\n                            return 'Used';\n                    }\n                    // Otherwise... unknown currency?\n                    currency = '';\n                    break;\n                default:\n                    currency = '';\n                    break;\n            }\n            let rawAmount = parseInt(raw.substring(1));\n            let unitsString = (rawAmount / 100).toString();\n            let hundredths = rawAmount % 100;\n            let hundredthsString = hundredths < 10 ? '0' + hundredths : hundredths.toString(); // fixme\n            return currency + unitsString + '.' + hundredthsString;\n        }\n    }\n\n    /**\n     * @see UPCEANExtension5Support\n     */\n    class UPCEANExtension2Support {\n        constructor() {\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n            this.decodeRowStringBuffer = '';\n        }\n        decodeRow(rowNumber, row, extensionStartRange) {\n            let result = this.decodeRowStringBuffer;\n            let end = this.decodeMiddle(row, extensionStartRange, result);\n            let resultString = result.toString();\n            let extensionData = UPCEANExtension2Support.parseExtensionString(resultString);\n            let resultPoints = [\n                new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0, rowNumber),\n                new ResultPoint(end, rowNumber)\n            ];\n            let extensionResult = new Result(resultString, null, 0, resultPoints, BarcodeFormat$1.UPC_EAN_EXTENSION, new Date().getTime());\n            if (extensionData != null) {\n                extensionResult.putAllMetadata(extensionData);\n            }\n            return extensionResult;\n        }\n        decodeMiddle(row, startRange, resultString) {\n            let counters = this.decodeMiddleCounters;\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let end = row.getSize();\n            let rowOffset = startRange[1];\n            let checkParity = 0;\n            for (let x = 0; x < 2 && rowOffset < end; x++) {\n                let bestMatch = AbstractUPCEANReader.decodeDigit(row, counters, rowOffset, AbstractUPCEANReader.L_AND_G_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n                if (bestMatch >= 10) {\n                    checkParity |= 1 << (1 - x);\n                }\n                if (x !== 1) {\n                    // Read off separator if not last\n                    rowOffset = row.getNextSet(rowOffset);\n                    rowOffset = row.getNextUnset(rowOffset);\n                }\n            }\n            if (resultString.length !== 2) {\n                throw new NotFoundException();\n            }\n            if (parseInt(resultString.toString()) % 4 !== checkParity) {\n                throw new NotFoundException();\n            }\n            return rowOffset;\n        }\n        static parseExtensionString(raw) {\n            if (raw.length !== 2) {\n                return null;\n            }\n            return new Map([[ResultMetadataType$1.ISSUE_NUMBER, parseInt(raw)]]);\n        }\n    }\n\n    class UPCEANExtensionSupport {\n        static decodeRow(rowNumber, row, rowOffset) {\n            let extensionStartRange = AbstractUPCEANReader.findGuardPattern(\n                row,\n                rowOffset,\n                false,\n                this.EXTENSION_START_PATTERN,\n                new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));\n            try {\n                // return null;\n                let fiveSupport = new UPCEANExtension5Support();\n                return fiveSupport.decodeRow(rowNumber, row, extensionStartRange);\n            }\n            catch (err) {\n                // return null;\n                let twoSupport = new UPCEANExtension2Support();\n                return twoSupport.decodeRow(rowNumber, row, extensionStartRange);\n            }\n        }\n    }\n    UPCEANExtensionSupport.EXTENSION_START_PATTERN = Int32Array.from([1, 1, 2]);\n\n    /**\n     * <p>Encapsulates functionality and implementation that is common to UPC and EAN families\n     * of one-dimensional barcodes.</p>\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     * @author alasdair@google.com (Alasdair Mackintosh)\n     */\n    class UPCEANReader extends AbstractUPCEANReader {\n        constructor() {\n            super();\n            this.decodeRowStringBuffer = '';\n            UPCEANReader.L_AND_G_PATTERNS = UPCEANReader.L_PATTERNS.map(arr => Int32Array.from(arr));\n            for (let i = 10; i < 20; i++) {\n                let widths = UPCEANReader.L_PATTERNS[i - 10];\n                let reversedWidths = new Int32Array(widths.length);\n                for (let j = 0; j < widths.length; j++) {\n                    reversedWidths[j] = widths[widths.length - j - 1];\n                }\n                UPCEANReader.L_AND_G_PATTERNS[i] = reversedWidths;\n            }\n        }\n        decodeRow(rowNumber, row, hints) {\n            let startGuardRange = UPCEANReader.findStartGuardPattern(row);\n            let resultPointCallback = hints == null ? null : hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n            if (resultPointCallback != null) {\n                const resultPoint = new ResultPoint((startGuardRange[0] + startGuardRange[1]) / 2.0, rowNumber);\n                resultPointCallback.foundPossibleResultPoint(resultPoint);\n            }\n            let budello = this.decodeMiddle(row, startGuardRange, this.decodeRowStringBuffer);\n            let endStart = budello.rowOffset;\n            let result = budello.resultString;\n            if (resultPointCallback != null) {\n                const resultPoint = new ResultPoint(endStart, rowNumber);\n                resultPointCallback.foundPossibleResultPoint(resultPoint);\n            }\n            let endRange = this.decodeEnd(row, endStart);\n            if (resultPointCallback != null) {\n                const resultPoint = new ResultPoint((endRange[0] + endRange[1]) / 2.0, rowNumber);\n                resultPointCallback.foundPossibleResultPoint(resultPoint);\n            }\n            // Make sure there is a quiet zone at least as big as the end pattern after the barcode. The\n            // spec might want more whitespace, but in practice this is the maximum we can count on.\n            let end = endRange[1];\n            let quietEnd = end + (end - endRange[0]);\n            if (quietEnd >= row.getSize() || !row.isRange(end, quietEnd, false)) {\n                throw new NotFoundException();\n            }\n            let resultString = result.toString();\n            // UPC/EAN should never be less than 8 chars anyway\n            if (resultString.length < 8) {\n                throw new FormatException();\n            }\n            if (!UPCEANReader.checkChecksum(resultString)) {\n                throw new ChecksumException();\n            }\n            let left = (startGuardRange[1] + startGuardRange[0]) / 2.0;\n            let right = (endRange[1] + endRange[0]) / 2.0;\n            let format = this.getBarcodeFormat();\n            let resultPoint = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)];\n            let decodeResult = new Result(resultString, null, 0, resultPoint, format, new Date().getTime());\n            let extensionLength = 0;\n            try {\n                let extensionResult = UPCEANExtensionSupport.decodeRow(rowNumber, row, endRange[1]);\n                decodeResult.putMetadata(ResultMetadataType$1.UPC_EAN_EXTENSION, extensionResult.getText());\n                decodeResult.putAllMetadata(extensionResult.getResultMetadata());\n                decodeResult.addResultPoints(extensionResult.getResultPoints());\n                extensionLength = extensionResult.getText().length;\n            }\n            catch (ignoreError) {}\n            let allowedExtensions = hints == null ? null : hints.get(DecodeHintType$1.ALLOWED_EAN_EXTENSIONS);\n            if (allowedExtensions != null) {\n                let valid = false;\n                for (let length in allowedExtensions) {\n                    if (extensionLength.toString() === length) { // check me\n                        valid = true;\n                        break;\n                    }\n                }\n                if (!valid) {\n                    throw new NotFoundException();\n                }\n            }\n            return decodeResult;\n        }\n        decodeEnd(row, endStart) {\n            return UPCEANReader.findGuardPattern(\n                row, endStart, false, UPCEANReader.START_END_PATTERN,\n                new Int32Array(UPCEANReader.START_END_PATTERN.length).fill(0));\n        }\n        static checkChecksum(s) {\n            return UPCEANReader.checkStandardUPCEANChecksum(s);\n        }\n        static checkStandardUPCEANChecksum(s) {\n            let length = s.length;\n            if (length === 0)\n                return false;\n            let check = parseInt(s.charAt(length - 1), 10);\n            return UPCEANReader.getStandardUPCEANChecksum(s.substring(0, length - 1)) === check;\n        }\n        static getStandardUPCEANChecksum(s) {\n            let length = s.length;\n            let sum = 0;\n            for (let i = length - 1; i >= 0; i -= 2) {\n                let digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                if (digit < 0 || digit > 9) {\n                    throw new FormatException();\n                }\n                sum += digit;\n            }\n            sum *= 3;\n            for (let i = length - 2; i >= 0; i -= 2) {\n                let digit = s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                if (digit < 0 || digit > 9) {\n                    throw new FormatException();\n                }\n                sum += digit;\n            }\n            return (1000 - sum) % 10;\n        }\n    }\n\n    /**\n     * <p>Implements decoding of the EAN-13 format.</p>\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     * @author alasdair@google.com (Alasdair Mackintosh)\n     */\n    class EAN13Reader extends UPCEANReader {\n        constructor() {\n            super();\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n        }\n        decodeMiddle(row, startRange, resultString) {\n            let counters = this.decodeMiddleCounters;\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let end = row.getSize();\n            let rowOffset = startRange[1];\n            let lgPatternFound = 0;\n            for (let x = 0; x < 6 && rowOffset < end; x++) {\n                let bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_AND_G_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n                if (bestMatch >= 10) {\n                    lgPatternFound |= 1 << (5 - x);\n                }\n            }\n            resultString = EAN13Reader.determineFirstDigit(resultString, lgPatternFound);\n            let middleRange = UPCEANReader.findGuardPattern(\n                row,\n                rowOffset,\n                true,\n                UPCEANReader.MIDDLE_PATTERN,\n                new Int32Array(UPCEANReader.MIDDLE_PATTERN.length).fill(0));\n            rowOffset = middleRange[1];\n            for (let x = 0; x < 6 && rowOffset < end; x++) {\n                let bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n            }\n            return { rowOffset, resultString };\n        }\n        getBarcodeFormat() {\n            return BarcodeFormat$1.EAN_13;\n        }\n        static determineFirstDigit(resultString, lgPatternFound) {\n            for (let d = 0; d < 10; d++) {\n                if (lgPatternFound === this.FIRST_DIGIT_ENCODINGS[d]) {\n                    resultString = String.fromCharCode(('0'.charCodeAt(0) + d)) + resultString;\n                    return resultString;\n                }\n            }\n            throw new NotFoundException();\n        }\n    }\n    EAN13Reader.FIRST_DIGIT_ENCODINGS = [0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A];\n\n    /**\n     * <p>Implements decoding of the EAN-8 format.</p>\n     *\n     * @author Sean Owen\n     */\n    class EAN8Reader extends UPCEANReader {\n        constructor() {\n            super();\n            this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n        }\n        decodeMiddle(row, startRange, resultString) {\n            const counters = this.decodeMiddleCounters;\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let end = row.getSize();\n            let rowOffset = startRange[1];\n            for (let x = 0; x < 4 && rowOffset < end; x++) {\n                let bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n            }\n            let middleRange = UPCEANReader.findGuardPattern(row, rowOffset, true, UPCEANReader.MIDDLE_PATTERN, new Int32Array(UPCEANReader.MIDDLE_PATTERN.length).fill(0));\n            rowOffset = middleRange[1];\n            for (let x = 0; x < 4 && rowOffset < end; x++) {\n                let bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n                resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n            }\n            return { rowOffset, resultString };\n        }\n        getBarcodeFormat() {\n            return BarcodeFormat$1.EAN_8;\n        }\n    }\n\n    /**\n     * Encapsulates functionality and implementation that is common to all families\n     * of one-dimensional barcodes.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Sean Owen\n     * @author sam2332 (Sam Rudloff)\n     *\n     * @source https://github.com/zxing/zxing/blob/3c96923276dd5785d58eb970b6ba3f80d36a9505/core/src/main/java/com/google/zxing/oned/UPCAReader.java\n     *\n     * @experimental\n     */\n    class UPCAReader extends UPCEANReader {\n        constructor() {\n            super(...arguments);\n            this.ean13Reader = new EAN13Reader();\n        }\n        // @Override\n        getBarcodeFormat() {\n            return BarcodeFormat$1.UPC_A;\n        }\n        // Note that we don't try rotation without the try harder flag, even if rotation was supported.\n        // @Override\n        decode(image, hints) {\n            return this.maybeReturnResult(this.ean13Reader.decode(image));\n        }\n        // @Override\n        decodeRow(rowNumber, row, hints) {\n            return this.maybeReturnResult(this.ean13Reader.decodeRow(rowNumber, row, hints));\n        }\n        // @Override\n        decodeMiddle(row, startRange, resultString) {\n            return this.ean13Reader.decodeMiddle(row, startRange, resultString);\n        }\n        maybeReturnResult(result) {\n            let text = result.getText();\n            if (text.charAt(0) === '0') {\n                let upcaResult = new Result(text.substring(1), null, null, result.getResultPoints(), BarcodeFormat$1.UPC_A);\n                if (result.getResultMetadata() != null) {\n                    upcaResult.putAllMetadata(result.getResultMetadata());\n                }\n                return upcaResult;\n            }\n            else {\n                throw new NotFoundException();\n            }\n        }\n        reset() {\n            this.ean13Reader.reset();\n        }\n    }\n\n    /**\n     * <p>Implements decoding of the UPC-E format.</p>\n     * <p><a href=\"http://www.barcodeisland.com/upce.phtml\">This</a> is a great reference for\n     * UPC-E information.</p>\n     *\n     * @author Sean Owen\n     *\n     * @source https://github.com/zxing/zxing/blob/3c96923276dd5785d58eb970b6ba3f80d36a9505/core/src/main/java/com/google/zxing/oned/UPCEReader.java\n     *\n     * @experimental\n     */\n    /* final */ class UPCEReader extends UPCEANReader {\n        constructor() {\n            super();\n            this.decodeMiddleCounters = new Int32Array(4);\n        }\n        /**\n         * @throws NotFoundException\n         */\n        // @Override\n        decodeMiddle(row, startRange, result) {\n            const counters = this.decodeMiddleCounters.map(x => x);\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            const end = row.getSize();\n            let rowOffset = startRange[1];\n            let lgPatternFound = 0;\n            for (let x = 0; x < 6 && rowOffset < end; x++) {\n                const bestMatch = UPCEReader.decodeDigit(\n                    row, counters, rowOffset, UPCEReader.L_AND_G_PATTERNS);\n                result += String.fromCharCode(('0'.charCodeAt(0) + (bestMatch % 10)));\n                for (let counter of counters) {\n                    rowOffset += counter;\n                }\n                if (bestMatch >= 10) {\n                    lgPatternFound |= (1 << (5 - x));\n                }\n            }\n            let resultString = UPCEReader.determineNumSysAndCheckDigit(\n                result, lgPatternFound);\n            return {rowOffset, resultString};\n        }\n        /**\n         * @throws NotFoundException\n         */\n        // @Override\n        decodeEnd(row, endStart) {\n            return UPCEReader.findGuardPatternWithoutCounters(\n                row, endStart, true, UPCEReader.MIDDLE_END_PATTERN);\n        }\n        /**\n         * @throws FormatException\n         */\n        // @Override\n        checkChecksum(s) {\n            return UPCEANReader.checkChecksum(UPCEReader.convertUPCEtoUPCA(s));\n        }\n        /**\n         * @throws NotFoundException\n         */\n        static determineNumSysAndCheckDigit(resultString, lgPatternFound) {\n            for (let numSys = 0; numSys <= 1; numSys++) {\n                for (let d = 0; d < 10; d++) {\n                    if (lgPatternFound === this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[numSys][d]) {\n                        let prefix = String.fromCharCode('0'.charCodeAt(0) + numSys);\n                        let suffix = String.fromCharCode('0'.charCodeAt(0) + d);\n                        return prefix + resultString + suffix;\n                    }\n                }\n            }\n            throw NotFoundException.getNotFoundInstance();\n        }\n        // @Override\n        getBarcodeFormat() {\n            return BarcodeFormat$1.UPC_E;\n        }\n        /**\n         * Expands a UPC-E value back into its full, equivalent UPC-A code value.\n         *\n         * @param upce UPC-E code as string of digits\n         * @return equivalent UPC-A code as string of digits\n         */\n        static convertUPCEtoUPCA(upce) {\n            // the following line is equivalent to upce.getChars(1, 7, upceChars, 0);\n            const upceChars = upce.slice(1, 7).split('').map(x => x.charCodeAt(0));\n            const result = new StringBuilder( /*12*/);\n            result.append(upce.charAt(0));\n            let lastChar = upceChars[5];\n            switch (lastChar) {\n                case 0:\n                case 1:\n                case 2:\n                    result.appendChars(upceChars, 0, 2);\n                    result.append(lastChar);\n                    result.append('0000');\n                    result.appendChars(upceChars, 2, 3);\n                    break;\n                case 3:\n                    result.appendChars(upceChars, 0, 3);\n                    result.append('00000');\n                    result.appendChars(upceChars, 3, 2);\n                    break;\n                case 4:\n                    result.appendChars(upceChars, 0, 4);\n                    result.append('00000');\n                    result.append(upceChars[4]);\n                    break;\n                default:\n                    result.appendChars(upceChars, 0, 5);\n                    result.append('0000');\n                    result.append(lastChar);\n                    break;\n            }\n            // Only append check digit in conversion if supplied\n            if (upce.length >= 8) {\n                result.append(upce.charAt(7));\n            }\n            return result.toString();\n        }\n    }\n    /**\n     * The pattern that marks the middle, and end, of a UPC-E pattern.\n     * There is no \"second half\" to a UPC-E barcode.\n     */\n    UPCEReader.MIDDLE_END_PATTERN = Int32Array.from([1, 1, 1, 1, 1, 1]);\n    // For an UPC-E barcode, the final digit is represented by the parities used\n    // to encode the middle six digits, according to the table below.\n    //\n    //                Parity of next 6 digits\n    //    Digit   0     1     2     3     4     5\n    //       0    Even   Even  Even Odd  Odd   Odd\n    //       1    Even   Even  Odd  Even Odd   Odd\n    //       2    Even   Even  Odd  Odd  Even  Odd\n    //       3    Even   Even  Odd  Odd  Odd   Even\n    //       4    Even   Odd   Even Even Odd   Odd\n    //       5    Even   Odd   Odd  Even Even  Odd\n    //       6    Even   Odd   Odd  Odd  Even  Even\n    //       7    Even   Odd   Even Odd  Even  Odd\n    //       8    Even   Odd   Even Odd  Odd   Even\n    //       9    Even   Odd   Odd  Even Odd   Even\n    //\n    // The encoding is represented by the following array, which is a bit pattern\n    // using Odd = 0 and Even = 1. For example, 5 is represented by:\n    //\n    //              Odd Even Even Odd Odd Even\n    // in binary:\n    //                0    1    1   0   0    1   == 0x19\n    //\n    /**\n     * See {@link #L_AND_G_PATTERNS}; these values similarly represent patterns of\n     * even-odd parity encodings of digits that imply both the number system (0 or 1)\n     * used, and the check digit.\n     */\n    UPCEReader.NUMSYS_AND_CHECK_DIGIT_PATTERNS = [\n        Int32Array.from([0x38, 0x34, 0x32, 0x31, 0x2C, 0x26, 0x23, 0x2A, 0x29, 0x25]),\n        Int32Array.from([0x07, 0x0B, 0x0D, 0x0E, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A]),\n    ];\n\n    /**\n     * <p>A reader that can read all available UPC/EAN formats. If a caller wants to try to\n     * read all such formats, it is most efficient to use this implementation rather than invoke\n     * individual readers.</p>\n     *\n     * @author Sean Owen\n     */\n    class MultiFormatUPCEANReader extends OneDReader {\n        constructor(hints) {\n            super();\n            let possibleFormats = hints == null ? null : hints.get(DecodeHintType$1.POSSIBLE_FORMATS);\n            let readers = [];\n            if (!isNullOrUndefined(possibleFormats)) {\n                if (possibleFormats.indexOf(BarcodeFormat$1.EAN_13) > -1) {\n                    readers.push(new EAN13Reader());\n                }\n                if (possibleFormats.indexOf(BarcodeFormat$1.UPC_A) > -1) {\n                    readers.push(new UPCAReader());\n                }\n                if (possibleFormats.indexOf(BarcodeFormat$1.EAN_8) > -1) {\n                    readers.push(new EAN8Reader());\n                }\n                if (possibleFormats.indexOf(BarcodeFormat$1.UPC_E) > -1) {\n                    readers.push(new UPCEReader());\n                }\n            } else {\n                // No hints provided.\n                readers.push(new EAN13Reader());\n                readers.push(new UPCAReader());\n                readers.push(new EAN8Reader());\n                readers.push(new UPCEReader());\n            }\n            this.readers = readers;\n        }\n        decodeRow(rowNumber, row, hints) {\n            for (let reader of this.readers) {\n                try {\n                    // const result: Result = reader.decodeRow(rowNumber, row, startGuardPattern, hints);\n                    const result = reader.decodeRow(rowNumber, row, hints);\n                    // Special case: a 12-digit code encoded in UPC-A is identical to a \"0\"\n                    // followed by those 12 digits encoded as EAN-13. Each will recognize such a code,\n                    // UPC-A as a 12-digit string and EAN-13 as a 13-digit string starting with \"0\".\n                    // Individually these are correct and their readers will both read such a code\n                    // and correctly call it EAN-13, or UPC-A, respectively.\n                    //\n                    // In this case, if we've been looking for both types, we'd like to call it\n                    // a UPC-A code. But for efficiency we only run the EAN-13 decoder to also read\n                    // UPC-A. So we special case it here, and convert an EAN-13 result to a UPC-A\n                    // result if appropriate.\n                    //\n                    // But, don't return UPC-A if UPC-A was not a requested format!\n                    const ean13MayBeUPCA = result.getBarcodeFormat() === BarcodeFormat$1.EAN_13 &&\n                        result.getText().charAt(0) === '0';\n                    // @SuppressWarnings(\"unchecked\")\n                    const possibleFormats = hints == null ? null : hints.get(DecodeHintType$1.POSSIBLE_FORMATS);\n                    const canReturnUPCA = possibleFormats == null || possibleFormats.includes(BarcodeFormat$1.UPC_A);\n                    if (ean13MayBeUPCA && canReturnUPCA) {\n                        const rawBytes = result.getRawBytes();\n                        // Transfer the metadata across\n                        const resultUPCA = new Result(\n                            result.getText().substring(1),\n                            rawBytes,\n                            (rawBytes ? rawBytes.length : null),\n                            result.getResultPoints(),\n                            BarcodeFormat$1.UPC_A);\n                        resultUPCA.putAllMetadata(result.getResultMetadata());\n                        return resultUPCA;\n                    }\n                    return result;\n                }\n                catch (err) {\n                    // continue;\n                }\n            }\n            throw new NotFoundException();\n        }\n        reset() {\n            for (let reader of this.readers) {\n                reader.reset();\n            }\n        }\n    }\n\n    // import Integer from '../../util/Integer';\n    // import Float from '../../util/Float';\n    class AbstractRSSReader extends OneDReader {\n        constructor() {\n            super();\n            this.decodeFinderCounters = new Int32Array(4);\n            this.dataCharacterCounters = new Int32Array(8);\n            this.oddRoundingErrors = new Array(4);\n            this.evenRoundingErrors = new Array(4);\n            this.oddCounts = new Array(this.dataCharacterCounters.length / 2);\n            this.evenCounts = new Array(this.dataCharacterCounters.length / 2);\n        }\n        getDecodeFinderCounters() {\n            return this.decodeFinderCounters;\n        }\n        getDataCharacterCounters() {\n            return this.dataCharacterCounters;\n        }\n        getOddRoundingErrors() {\n            return this.oddRoundingErrors;\n        }\n        getEvenRoundingErrors() {\n            return this.evenRoundingErrors;\n        }\n        getOddCounts() {\n            return this.oddCounts;\n        }\n        getEvenCounts() {\n            return this.evenCounts;\n        }\n        parseFinderValue(counters, finderPatterns) {\n            for (let value = 0; value < finderPatterns.length; value++) {\n                if (OneDReader.patternMatchVariance(counters, finderPatterns[value], AbstractRSSReader.MAX_INDIVIDUAL_VARIANCE) < AbstractRSSReader.MAX_AVG_VARIANCE) {\n                    return value;\n                }\n            }\n            throw new NotFoundException();\n        }\n        /**\n         * @param array values to sum\n         * @return sum of values\n         * @deprecated call {@link MathUtils#sum(int[])}\n         */\n        static count(array) {\n            return MathUtils.sum(new Int32Array(array));\n        }\n        static increment(array, errors) {\n            let index = 0;\n            let biggestError = errors[0];\n            for (let i = 1; i < array.length; i++) {\n                if (errors[i] > biggestError) {\n                    biggestError = errors[i];\n                    index = i;\n                }\n            }\n            array[index]++;\n        }\n        static decrement(array, errors) {\n            let index = 0;\n            let biggestError = errors[0];\n            for (let i = 1; i < array.length; i++) {\n                if (errors[i] < biggestError) {\n                    biggestError = errors[i];\n                    index = i;\n                }\n            }\n            array[index]--;\n        }\n        static isFinderPattern(counters) {\n            let firstTwoSum = counters[0] + counters[1];\n            let sum = firstTwoSum + counters[2] + counters[3];\n            let ratio = firstTwoSum / sum;\n            if (ratio >= AbstractRSSReader.MIN_FINDER_PATTERN_RATIO && ratio <= AbstractRSSReader.MAX_FINDER_PATTERN_RATIO) {\n                // passes ratio test in spec, but see if the counts are unreasonable\n                let minCounter = Number.MAX_SAFE_INTEGER;\n                let maxCounter = Number.MIN_SAFE_INTEGER;\n                for (let counter of counters) {\n                    if (counter > maxCounter) {\n                        maxCounter = counter;\n                    }\n                    if (counter < minCounter) {\n                        minCounter = counter;\n                    }\n                }\n                return maxCounter < 10 * minCounter;\n            }\n            return false;\n        }\n    }\n    AbstractRSSReader.MAX_AVG_VARIANCE = 0.2;\n    AbstractRSSReader.MAX_INDIVIDUAL_VARIANCE = 0.45;\n    AbstractRSSReader.MIN_FINDER_PATTERN_RATIO = 9.5 / 12.0;\n    AbstractRSSReader.MAX_FINDER_PATTERN_RATIO = 12.5 / 14.0;\n\n    class DataCharacter {\n        constructor(value, checksumPortion) {\n            this.value = value;\n            this.checksumPortion = checksumPortion;\n        }\n        getValue() {\n            return this.value;\n        }\n        getChecksumPortion() {\n            return this.checksumPortion;\n        }\n        toString() {\n            return this.value + '(' + this.checksumPortion + ')';\n        }\n        equals(o) {\n            if (!(o instanceof DataCharacter)) {\n                return false;\n            }\n            const that = o;\n            return this.value === that.value && this.checksumPortion === that.checksumPortion;\n        }\n        hashCode() {\n            return this.value ^ this.checksumPortion;\n        }\n    }\n\n    class FinderPattern {\n        constructor(value, startEnd, start, end, rowNumber) {\n            this.value = value;\n            this.startEnd = startEnd;\n            this.value = value;\n            this.startEnd = startEnd;\n            this.resultPoints = new Array();\n            this.resultPoints.push(new ResultPoint(start, rowNumber));\n            this.resultPoints.push(new ResultPoint(end, rowNumber));\n        }\n        getValue() {\n            return this.value;\n        }\n        getStartEnd() {\n            return this.startEnd;\n        }\n        getResultPoints() {\n            return this.resultPoints;\n        }\n        equals(o) {\n            if (!(o instanceof FinderPattern)) {\n                return false;\n            }\n            const that = o;\n            return this.value === that.value;\n        }\n        hashCode() {\n            return this.value;\n        }\n    }\n\n    /**\n     * RSS util functions.\n     */\n    class RSSUtils {\n        constructor() { }\n        static getRSSvalue(widths, maxWidth, noNarrow) {\n            let n = 0;\n            for (let width of widths) {\n                n += width;\n            }\n            let val = 0;\n            let narrowMask = 0;\n            let elements = widths.length;\n            for (let bar = 0; bar < elements - 1; bar++) {\n                let elmWidth;\n                for (elmWidth = 1, narrowMask |= 1 << bar; elmWidth < widths[bar]; elmWidth++, narrowMask &= ~(1 << bar)) {\n                    let subVal = RSSUtils.combins(n - elmWidth - 1, elements - bar - 2);\n                    if (noNarrow && (narrowMask === 0) && (n - elmWidth - (elements - bar - 1) >= elements - bar - 1)) {\n                        subVal -= RSSUtils.combins(n - elmWidth - (elements - bar), elements - bar - 2);\n                    }\n                    if (elements - bar - 1 > 1) {\n                        let lessVal = 0;\n                        for (let mxwElement = n - elmWidth - (elements - bar - 2); mxwElement > maxWidth; mxwElement--) {\n                            lessVal += RSSUtils.combins(n - elmWidth - mxwElement - 1, elements - bar - 3);\n                        }\n                        subVal -= lessVal * (elements - 1 - bar);\n                    }\n                    else if (n - elmWidth > maxWidth) {\n                        subVal--;\n                    }\n                    val += subVal;\n                }\n                n -= elmWidth;\n            }\n            return val;\n        }\n        static combins(n, r) {\n            let maxDenom;\n            let minDenom;\n            if (n - r > r) {\n                minDenom = r;\n                maxDenom = n - r;\n            }\n            else {\n                minDenom = n - r;\n                maxDenom = r;\n            }\n            let val = 1;\n            let j = 1;\n            for (let i = n; i > maxDenom; i--) {\n                val *= i;\n                if (j <= minDenom) {\n                    val /= j;\n                    j++;\n                }\n            }\n            while ((j <= minDenom)) {\n                val /= j;\n                j++;\n            }\n            return val;\n        }\n    }\n\n    class BitArrayBuilder {\n        static buildBitArray(pairs) {\n            let charNumber = (pairs.length * 2) - 1;\n            if (pairs[pairs.length - 1].getRightChar() == null) {\n                charNumber -= 1;\n            }\n            let size = 12 * charNumber;\n            let binary = new BitArray(size);\n            let accPos = 0;\n            let firstPair = pairs[0];\n            let firstValue = firstPair.getRightChar().getValue();\n            for (let i = 11; i >= 0; --i) {\n                if ((firstValue & (1 << i)) != 0) {\n                    binary.set(accPos);\n                }\n                accPos++;\n            }\n            for (let i = 1; i < pairs.length; ++i) {\n                let currentPair = pairs[i];\n                let leftValue = currentPair.getLeftChar().getValue();\n                for (let j = 11; j >= 0; --j) {\n                    if ((leftValue & (1 << j)) != 0) {\n                        binary.set(accPos);\n                    }\n                    accPos++;\n                }\n                if (currentPair.getRightChar() != null) {\n                    let rightValue = currentPair.getRightChar().getValue();\n                    for (let j = 11; j >= 0; --j) {\n                        if ((rightValue & (1 << j)) != 0) {\n                            binary.set(accPos);\n                        }\n                        accPos++;\n                    }\n                }\n            }\n            return binary;\n        }\n    }\n\n    class BlockParsedResult {\n        constructor(finished, decodedInformation) {\n            if (decodedInformation) {\n                this.decodedInformation = null;\n            }\n            else {\n                this.finished = finished;\n                this.decodedInformation = decodedInformation;\n            }\n        }\n        getDecodedInformation() {\n            return this.decodedInformation;\n        }\n        isFinished() {\n            return this.finished;\n        }\n    }\n\n    class DecodedObject {\n        constructor(newPosition) {\n            this.newPosition = newPosition;\n        }\n        getNewPosition() {\n            return this.newPosition;\n        }\n    }\n\n    class DecodedChar extends DecodedObject {\n        constructor(newPosition, value) {\n            super(newPosition);\n            this.value = value;\n        }\n        getValue() {\n            return this.value;\n        }\n        isFNC1() {\n            return this.value === DecodedChar.FNC1;\n        }\n    }\n    DecodedChar.FNC1 = '$';\n\n    class DecodedInformation extends DecodedObject {\n        constructor(newPosition, newString, remainingValue) {\n            super(newPosition);\n            if (remainingValue) {\n                this.remaining = true;\n                this.remainingValue = this.remainingValue;\n            }\n            else {\n                this.remaining = false;\n                this.remainingValue = 0;\n            }\n            this.newString = newString;\n        }\n        getNewString() {\n            return this.newString;\n        }\n        isRemaining() {\n            return this.remaining;\n        }\n        getRemainingValue() {\n            return this.remainingValue;\n        }\n    }\n\n    class DecodedNumeric extends DecodedObject {\n        constructor(newPosition, firstDigit, secondDigit) {\n            super(newPosition);\n            if (firstDigit < 0 || firstDigit > 10 || secondDigit < 0 || secondDigit > 10) {\n                throw new FormatException();\n            }\n            this.firstDigit = firstDigit;\n            this.secondDigit = secondDigit;\n        }\n        getFirstDigit() {\n            return this.firstDigit;\n        }\n        getSecondDigit() {\n            return this.secondDigit;\n        }\n        getValue() {\n            return this.firstDigit * 10 + this.secondDigit;\n        }\n        isFirstDigitFNC1() {\n            return this.firstDigit === DecodedNumeric.FNC1;\n        }\n        isSecondDigitFNC1() {\n            return this.secondDigit === DecodedNumeric.FNC1;\n        }\n        isAnyFNC1() {\n            return this.firstDigit === DecodedNumeric.FNC1 || this.secondDigit === DecodedNumeric.FNC1;\n        }\n    }\n    DecodedNumeric.FNC1 = 10;\n\n    class FieldParser {\n        constructor() {\n        }\n        static parseFieldsInGeneralPurpose(rawInformation) {\n            if (!rawInformation) {\n                return null;\n            }\n            // Processing 2-digit AIs\n            if (rawInformation.length < 2) {\n                throw new NotFoundException();\n            }\n            let firstTwoDigits = rawInformation.substring(0, 2);\n            for (let dataLength of FieldParser.TWO_DIGIT_DATA_LENGTH) {\n                if (dataLength[0] === firstTwoDigits) {\n                    if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n                        return FieldParser.processVariableAI(2, dataLength[2], rawInformation);\n                    }\n                    return FieldParser.processFixedAI(2, dataLength[1], rawInformation);\n                }\n            }\n            if (rawInformation.length < 3) {\n                throw new NotFoundException();\n            }\n            let firstThreeDigits = rawInformation.substring(0, 3);\n            for (let dataLength of FieldParser.THREE_DIGIT_DATA_LENGTH) {\n                if (dataLength[0] === firstThreeDigits) {\n                    if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n                        return FieldParser.processVariableAI(3, dataLength[2], rawInformation);\n                    }\n                    return FieldParser.processFixedAI(3, dataLength[1], rawInformation);\n                }\n            }\n            for (let dataLength of FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH) {\n                if (dataLength[0] === firstThreeDigits) {\n                    if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n                        return FieldParser.processVariableAI(4, dataLength[2], rawInformation);\n                    }\n                    return FieldParser.processFixedAI(4, dataLength[1], rawInformation);\n                }\n            }\n            if (rawInformation.length < 4) {\n                throw new NotFoundException();\n            }\n            let firstFourDigits = rawInformation.substring(0, 4);\n            for (let dataLength of FieldParser.FOUR_DIGIT_DATA_LENGTH) {\n                if (dataLength[0] === firstFourDigits) {\n                    if (dataLength[1] === FieldParser.VARIABLE_LENGTH) {\n                        return FieldParser.processVariableAI(4, dataLength[2], rawInformation);\n                    }\n                    return FieldParser.processFixedAI(4, dataLength[1], rawInformation);\n                }\n            }\n            throw new NotFoundException();\n        }\n        static processFixedAI(aiSize, fieldSize, rawInformation) {\n            if (rawInformation.length < aiSize) {\n                throw new NotFoundException();\n            }\n            let ai = rawInformation.substring(0, aiSize);\n            if (rawInformation.length < aiSize + fieldSize) {\n                throw new NotFoundException();\n            }\n            let field = rawInformation.substring(aiSize, aiSize + fieldSize);\n            let remaining = rawInformation.substring(aiSize + fieldSize);\n            let result = '(' + ai + ')' + field;\n            let parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);\n            return parsedAI == null ? result : result + parsedAI;\n        }\n        static processVariableAI(aiSize, variableFieldSize, rawInformation) {\n            let ai = rawInformation.substring(0, aiSize);\n            let maxSize;\n            if (rawInformation.length < aiSize + variableFieldSize) {\n                maxSize = rawInformation.length;\n            }\n            else {\n                maxSize = aiSize + variableFieldSize;\n            }\n            let field = rawInformation.substring(aiSize, maxSize);\n            let remaining = rawInformation.substring(maxSize);\n            let result = '(' + ai + ')' + field;\n            let parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);\n            return parsedAI == null ? result : result + parsedAI;\n        }\n    }\n    FieldParser.VARIABLE_LENGTH = [];\n    FieldParser.TWO_DIGIT_DATA_LENGTH = [\n        ['00', 18],\n        ['01', 14],\n        ['02', 14],\n        ['10', FieldParser.VARIABLE_LENGTH, 20],\n        ['11', 6],\n        ['12', 6],\n        ['13', 6],\n        ['15', 6],\n        ['17', 6],\n        ['20', 2],\n        ['21', FieldParser.VARIABLE_LENGTH, 20],\n        ['22', FieldParser.VARIABLE_LENGTH, 29],\n        ['30', FieldParser.VARIABLE_LENGTH, 8],\n        ['37', FieldParser.VARIABLE_LENGTH, 8],\n        // internal company codes\n        ['90', FieldParser.VARIABLE_LENGTH, 30],\n        ['91', FieldParser.VARIABLE_LENGTH, 30],\n        ['92', FieldParser.VARIABLE_LENGTH, 30],\n        ['93', FieldParser.VARIABLE_LENGTH, 30],\n        ['94', FieldParser.VARIABLE_LENGTH, 30],\n        ['95', FieldParser.VARIABLE_LENGTH, 30],\n        ['96', FieldParser.VARIABLE_LENGTH, 30],\n        ['97', FieldParser.VARIABLE_LENGTH, 3],\n        ['98', FieldParser.VARIABLE_LENGTH, 30],\n        ['99', FieldParser.VARIABLE_LENGTH, 30],\n    ];\n    FieldParser.THREE_DIGIT_DATA_LENGTH = [\n        // Same format as above\n        ['240', FieldParser.VARIABLE_LENGTH, 30],\n        ['241', FieldParser.VARIABLE_LENGTH, 30],\n        ['242', FieldParser.VARIABLE_LENGTH, 6],\n        ['250', FieldParser.VARIABLE_LENGTH, 30],\n        ['251', FieldParser.VARIABLE_LENGTH, 30],\n        ['253', FieldParser.VARIABLE_LENGTH, 17],\n        ['254', FieldParser.VARIABLE_LENGTH, 20],\n        ['400', FieldParser.VARIABLE_LENGTH, 30],\n        ['401', FieldParser.VARIABLE_LENGTH, 30],\n        ['402', 17],\n        ['403', FieldParser.VARIABLE_LENGTH, 30],\n        ['410', 13],\n        ['411', 13],\n        ['412', 13],\n        ['413', 13],\n        ['414', 13],\n        ['420', FieldParser.VARIABLE_LENGTH, 20],\n        ['421', FieldParser.VARIABLE_LENGTH, 15],\n        ['422', 3],\n        ['423', FieldParser.VARIABLE_LENGTH, 15],\n        ['424', 3],\n        ['425', 3],\n        ['426', 3],\n    ];\n    FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH = [\n        // Same format as above\n        ['310', 6],\n        ['311', 6],\n        ['312', 6],\n        ['313', 6],\n        ['314', 6],\n        ['315', 6],\n        ['316', 6],\n        ['320', 6],\n        ['321', 6],\n        ['322', 6],\n        ['323', 6],\n        ['324', 6],\n        ['325', 6],\n        ['326', 6],\n        ['327', 6],\n        ['328', 6],\n        ['329', 6],\n        ['330', 6],\n        ['331', 6],\n        ['332', 6],\n        ['333', 6],\n        ['334', 6],\n        ['335', 6],\n        ['336', 6],\n        ['340', 6],\n        ['341', 6],\n        ['342', 6],\n        ['343', 6],\n        ['344', 6],\n        ['345', 6],\n        ['346', 6],\n        ['347', 6],\n        ['348', 6],\n        ['349', 6],\n        ['350', 6],\n        ['351', 6],\n        ['352', 6],\n        ['353', 6],\n        ['354', 6],\n        ['355', 6],\n        ['356', 6],\n        ['357', 6],\n        ['360', 6],\n        ['361', 6],\n        ['362', 6],\n        ['363', 6],\n        ['364', 6],\n        ['365', 6],\n        ['366', 6],\n        ['367', 6],\n        ['368', 6],\n        ['369', 6],\n        ['390', FieldParser.VARIABLE_LENGTH, 15],\n        ['391', FieldParser.VARIABLE_LENGTH, 18],\n        ['392', FieldParser.VARIABLE_LENGTH, 15],\n        ['393', FieldParser.VARIABLE_LENGTH, 18],\n        ['703', FieldParser.VARIABLE_LENGTH, 30],\n    ];\n    FieldParser.FOUR_DIGIT_DATA_LENGTH = [\n        // Same format as above\n        ['7001', 13],\n        ['7002', FieldParser.VARIABLE_LENGTH, 30],\n        ['7003', 10],\n        ['8001', 14],\n        ['8002', FieldParser.VARIABLE_LENGTH, 20],\n        ['8003', FieldParser.VARIABLE_LENGTH, 30],\n        ['8004', FieldParser.VARIABLE_LENGTH, 30],\n        ['8005', 6],\n        ['8006', 18],\n        ['8007', FieldParser.VARIABLE_LENGTH, 30],\n        ['8008', FieldParser.VARIABLE_LENGTH, 12],\n        ['8018', 18],\n        ['8020', FieldParser.VARIABLE_LENGTH, 25],\n        ['8100', 6],\n        ['8101', 10],\n        ['8102', 2],\n        ['8110', FieldParser.VARIABLE_LENGTH, 70],\n        ['8200', FieldParser.VARIABLE_LENGTH, 70],\n    ];\n\n    class GeneralAppIdDecoder {\n        constructor(information) {\n            this.buffer = new StringBuilder();\n            this.information = information;\n        }\n        decodeAllCodes(buff, initialPosition) {\n            let currentPosition = initialPosition;\n            let remaining = null;\n            do {\n                let info = this.decodeGeneralPurposeField(currentPosition, remaining);\n                let parsedFields = FieldParser.parseFieldsInGeneralPurpose(info.getNewString());\n                if (parsedFields != null) {\n                    buff.append(parsedFields);\n                }\n                if (info.isRemaining()) {\n                    remaining = '' + info.getRemainingValue();\n                }\n                else {\n                    remaining = null;\n                }\n                if (currentPosition === info.getNewPosition()) { // No step forward!\n                    break;\n                }\n                currentPosition = info.getNewPosition();\n            } while (true);\n            return buff.toString();\n        }\n        isStillNumeric(pos) {\n            // It's numeric if it still has 7 positions\n            // and one of the first 4 bits is \"1\".\n            if (pos + 7 > this.information.getSize()) {\n                return pos + 4 <= this.information.getSize();\n            }\n            for (let i = pos; i < pos + 3; ++i) {\n                if (this.information.get(i)) {\n                    return true;\n                }\n            }\n            return this.information.get(pos + 3);\n        }\n        decodeNumeric(pos) {\n            if (pos + 7 > this.information.getSize()) {\n                let numeric = this.extractNumericValueFromBitArray(pos, 4);\n                if (numeric === 0) {\n                    return new DecodedNumeric(this.information.getSize(), DecodedNumeric.FNC1, DecodedNumeric.FNC1);\n                }\n                return new DecodedNumeric(this.information.getSize(), numeric - 1, DecodedNumeric.FNC1);\n            }\n            let numeric = this.extractNumericValueFromBitArray(pos, 7);\n            let digit1 = (numeric - 8) / 11;\n            let digit2 = (numeric - 8) % 11;\n            return new DecodedNumeric(pos + 7, digit1, digit2);\n        }\n        extractNumericValueFromBitArray(pos, bits) {\n            return GeneralAppIdDecoder.extractNumericValueFromBitArray(this.information, pos, bits);\n        }\n        static extractNumericValueFromBitArray(information, pos, bits) {\n            let value = 0;\n            for (let i = 0; i < bits; ++i) {\n                if (information.get(pos + i)) {\n                    value |= 1 << (bits - i - 1);\n                }\n            }\n            return value;\n        }\n        decodeGeneralPurposeField(pos, remaining) {\n            // this.buffer.setLength(0);\n            this.buffer.setLengthToZero();\n            if (remaining != null) {\n                this.buffer.append(remaining);\n            }\n            this.current.setPosition(pos);\n            let lastDecoded = this.parseBlocks();\n            if (lastDecoded != null && lastDecoded.isRemaining()) {\n                return new DecodedInformation(this.current.getPosition(), this.buffer.toString(), lastDecoded.getRemainingValue());\n            }\n            return new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n        }\n        parseBlocks() {\n            let isFinished;\n            let result;\n            do {\n                let initialPosition = this.current.getPosition();\n                if (this.current.isAlpha()) {\n                    result = this.parseAlphaBlock();\n                    isFinished = result.isFinished();\n                }\n                else if (this.current.isIsoIec646()) {\n                    result = this.parseIsoIec646Block();\n                    isFinished = result.isFinished();\n                }\n                else { // it must be numeric\n                    result = this.parseNumericBlock();\n                    isFinished = result.isFinished();\n                }\n                let positionChanged = initialPosition !== this.current.getPosition();\n                if (!positionChanged && !isFinished) {\n                    break;\n                }\n            } while (!isFinished);\n            return result.getDecodedInformation();\n        }\n        parseNumericBlock() {\n            while (this.isStillNumeric(this.current.getPosition())) {\n                let numeric = this.decodeNumeric(this.current.getPosition());\n                this.current.setPosition(numeric.getNewPosition());\n                if (numeric.isFirstDigitFNC1()) {\n                    let information;\n                    if (numeric.isSecondDigitFNC1()) {\n                        information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n                    }\n                    else {\n                        information = new DecodedInformation(this.current.getPosition(), this.buffer.toString(), numeric.getSecondDigit());\n                    }\n                    return new BlockParsedResult(true, information);\n                }\n                this.buffer.append(numeric.getFirstDigit());\n                if (numeric.isSecondDigitFNC1()) {\n                    let information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n                    return new BlockParsedResult(true, information);\n                }\n                this.buffer.append(numeric.getSecondDigit());\n            }\n            if (this.isNumericToAlphaNumericLatch(this.current.getPosition())) {\n                this.current.setAlpha();\n                this.current.incrementPosition(4);\n            }\n            return new BlockParsedResult(false);\n        }\n        parseIsoIec646Block() {\n            while (this.isStillIsoIec646(this.current.getPosition())) {\n                let iso = this.decodeIsoIec646(this.current.getPosition());\n                this.current.setPosition(iso.getNewPosition());\n                if (iso.isFNC1()) {\n                    let information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n                    return new BlockParsedResult(true, information);\n                }\n                this.buffer.append(iso.getValue());\n            }\n            if (this.isAlphaOr646ToNumericLatch(this.current.getPosition())) {\n                this.current.incrementPosition(3);\n                this.current.setNumeric();\n            }\n            else if (this.isAlphaTo646ToAlphaLatch(this.current.getPosition())) {\n                if (this.current.getPosition() + 5 < this.information.getSize()) {\n                    this.current.incrementPosition(5);\n                }\n                else {\n                    this.current.setPosition(this.information.getSize());\n                }\n                this.current.setAlpha();\n            }\n            return new BlockParsedResult(false);\n        }\n        parseAlphaBlock() {\n            while (this.isStillAlpha(this.current.getPosition())) {\n                let alpha = this.decodeAlphanumeric(this.current.getPosition());\n                this.current.setPosition(alpha.getNewPosition());\n                if (alpha.isFNC1()) {\n                    let information = new DecodedInformation(this.current.getPosition(), this.buffer.toString());\n                    return new BlockParsedResult(true, information); // end of the char block\n                }\n                this.buffer.append(alpha.getValue());\n            }\n            if (this.isAlphaOr646ToNumericLatch(this.current.getPosition())) {\n                this.current.incrementPosition(3);\n                this.current.setNumeric();\n            }\n            else if (this.isAlphaTo646ToAlphaLatch(this.current.getPosition())) {\n                if (this.current.getPosition() + 5 < this.information.getSize()) {\n                    this.current.incrementPosition(5);\n                }\n                else {\n                    this.current.setPosition(this.information.getSize());\n                }\n                this.current.setIsoIec646();\n            }\n            return new BlockParsedResult(false);\n        }\n        isStillIsoIec646(pos) {\n            if (pos + 5 > this.information.getSize()) {\n                return false;\n            }\n            let fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n            if (fiveBitValue >= 5 && fiveBitValue < 16) {\n                return true;\n            }\n            if (pos + 7 > this.information.getSize()) {\n                return false;\n            }\n            let sevenBitValue = this.extractNumericValueFromBitArray(pos, 7);\n            if (sevenBitValue >= 64 && sevenBitValue < 116) {\n                return true;\n            }\n            if (pos + 8 > this.information.getSize()) {\n                return false;\n            }\n            let eightBitValue = this.extractNumericValueFromBitArray(pos, 8);\n            return eightBitValue >= 232 && eightBitValue < 253;\n        }\n        decodeIsoIec646(pos) {\n            let fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n            if (fiveBitValue === 15) {\n                return new DecodedChar(pos + 5, DecodedChar.FNC1);\n            }\n            if (fiveBitValue >= 5 && fiveBitValue < 15) {\n                return new DecodedChar(pos + 5, ('0' + (fiveBitValue - 5)));\n            }\n            let sevenBitValue = this.extractNumericValueFromBitArray(pos, 7);\n            if (sevenBitValue >= 64 && sevenBitValue < 90) {\n                return new DecodedChar(pos + 7, ('' + (sevenBitValue + 1)));\n            }\n            if (sevenBitValue >= 90 && sevenBitValue < 116) {\n                return new DecodedChar(pos + 7, ('' + (sevenBitValue + 7)));\n            }\n            let eightBitValue = this.extractNumericValueFromBitArray(pos, 8);\n            let c;\n            switch (eightBitValue) {\n                case 232:\n                    c = '!';\n                    break;\n                case 233:\n                    c = '\"';\n                    break;\n                case 234:\n                    c = '%';\n                    break;\n                case 235:\n                    c = '&';\n                    break;\n                case 236:\n                    c = '\\'';\n                    break;\n                case 237:\n                    c = '(';\n                    break;\n                case 238:\n                    c = ')';\n                    break;\n                case 239:\n                    c = '*';\n                    break;\n                case 240:\n                    c = '+';\n                    break;\n                case 241:\n                    c = ',';\n                    break;\n                case 242:\n                    c = '-';\n                    break;\n                case 243:\n                    c = '.';\n                    break;\n                case 244:\n                    c = '/';\n                    break;\n                case 245:\n                    c = ':';\n                    break;\n                case 246:\n                    c = ';';\n                    break;\n                case 247:\n                    c = '<';\n                    break;\n                case 248:\n                    c = '=';\n                    break;\n                case 249:\n                    c = '>';\n                    break;\n                case 250:\n                    c = '?';\n                    break;\n                case 251:\n                    c = '_';\n                    break;\n                case 252:\n                    c = ' ';\n                    break;\n                default:\n                    throw new FormatException();\n            }\n            return new DecodedChar(pos + 8, c);\n        }\n        isStillAlpha(pos) {\n            if (pos + 5 > this.information.getSize()) {\n                return false;\n            }\n            // We now check if it's a valid 5-bit value (0..9 and FNC1)\n            let fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n            if (fiveBitValue >= 5 && fiveBitValue < 16) {\n                return true;\n            }\n            if (pos + 6 > this.information.getSize()) {\n                return false;\n            }\n            let sixBitValue = this.extractNumericValueFromBitArray(pos, 6);\n            return sixBitValue >= 16 && sixBitValue < 63; // 63 not included\n        }\n        decodeAlphanumeric(pos) {\n            let fiveBitValue = this.extractNumericValueFromBitArray(pos, 5);\n            if (fiveBitValue === 15) {\n                return new DecodedChar(pos + 5, DecodedChar.FNC1);\n            }\n            if (fiveBitValue >= 5 && fiveBitValue < 15) {\n                return new DecodedChar(pos + 5, ('0' + (fiveBitValue - 5)));\n            }\n            let sixBitValue = this.extractNumericValueFromBitArray(pos, 6);\n            if (sixBitValue >= 32 && sixBitValue < 58) {\n                return new DecodedChar(pos + 6, ('' + (sixBitValue + 33)));\n            }\n            let c;\n            switch (sixBitValue) {\n                case 58:\n                    c = '*';\n                    break;\n                case 59:\n                    c = ',';\n                    break;\n                case 60:\n                    c = '-';\n                    break;\n                case 61:\n                    c = '.';\n                    break;\n                case 62:\n                    c = '/';\n                    break;\n                default:\n                    throw new IllegalStateException('Decoding invalid alphanumeric value: ' + sixBitValue);\n            }\n            return new DecodedChar(pos + 6, c);\n        }\n        isAlphaTo646ToAlphaLatch(pos) {\n            if (pos + 1 > this.information.getSize()) {\n                return false;\n            }\n            for (let i = 0; i < 5 && i + pos < this.information.getSize(); ++i) {\n                if (i === 2) {\n                    if (!this.information.get(pos + 2)) {\n                        return false;\n                    }\n                }\n                else if (this.information.get(pos + i)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        isAlphaOr646ToNumericLatch(pos) {\n            // Next is alphanumeric if there are 3 positions and they are all zeros\n            if (pos + 3 > this.information.getSize()) {\n                return false;\n            }\n            for (let i = pos; i < pos + 3; ++i) {\n                if (this.information.get(i)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        isNumericToAlphaNumericLatch(pos) {\n            // Next is alphanumeric if there are 4 positions and they are all zeros, or\n            // if there is a subset of this just before the end of the symbol\n            if (pos + 1 > this.information.getSize()) {\n                return false;\n            }\n            for (let i = 0; i < 4 && i + pos < this.information.getSize(); ++i) {\n                if (this.information.get(pos + i)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    class AbstractExpandedDecoder {\n        constructor(information) {\n            this.information = information;\n            this.generalDecoder = new GeneralAppIdDecoder(information);\n        }\n        getInformation() {\n            return this.information;\n        }\n        getGeneralDecoder() {\n            return this.generalDecoder;\n        }\n    }\n\n    class AI01decoder extends AbstractExpandedDecoder {\n        constructor(information) {\n            super(information);\n        }\n        encodeCompressedGtin(buf, currentPos) {\n            buf.append('(01)');\n            let initialPosition = buf.length();\n            buf.append('9');\n            this.encodeCompressedGtinWithoutAI(buf, currentPos, initialPosition);\n        }\n        encodeCompressedGtinWithoutAI(buf, currentPos, initialBufferPosition) {\n            for (let i = 0; i < 4; ++i) {\n                let currentBlock = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos + 10 * i, 10);\n                if (currentBlock / 100 === 0) {\n                    buf.append('0');\n                }\n                if (currentBlock / 10 === 0) {\n                    buf.append('0');\n                }\n                buf.append(currentBlock);\n            }\n            AI01decoder.appendCheckDigit(buf, initialBufferPosition);\n        }\n        static appendCheckDigit(buf, currentPos) {\n            let checkDigit = 0;\n            for (let i = 0; i < 13; i++) {\n                // let digit = buf.charAt(i + currentPos) - '0';\n                // To be checked\n                let digit = buf.charAt(i + currentPos).charCodeAt(0) - '0'.charCodeAt(0);\n                checkDigit += (i & 0x01) === 0 ? 3 * digit : digit;\n            }\n            checkDigit = 10 - (checkDigit % 10);\n            if (checkDigit === 10) {\n                checkDigit = 0;\n            }\n            buf.append(checkDigit);\n        }\n    }\n    AI01decoder.GTIN_SIZE = 40;\n\n    class AI01AndOtherAIs extends AI01decoder {\n        // the second one is the encodation method, and the other two are for the variable length\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            let buff = new StringBuilder();\n            buff.append('(01)');\n            let initialGtinPosition = buff.length();\n            let firstGtinDigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01AndOtherAIs.HEADER_SIZE, 4);\n            buff.append(firstGtinDigit);\n            this.encodeCompressedGtinWithoutAI(buff, AI01AndOtherAIs.HEADER_SIZE + 4, initialGtinPosition);\n            return this.getGeneralDecoder().decodeAllCodes(buff, AI01AndOtherAIs.HEADER_SIZE + 44);\n        }\n    }\n    AI01AndOtherAIs.HEADER_SIZE = 1 + 1 + 2; // first bit encodes the linkage flag,\n\n    class AnyAIDecoder extends AbstractExpandedDecoder {\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            let buf = new StringBuilder();\n            return this.getGeneralDecoder().decodeAllCodes(buf, AnyAIDecoder.HEADER_SIZE);\n        }\n    }\n    AnyAIDecoder.HEADER_SIZE = 2 + 1 + 2;\n\n    class AI01weightDecoder extends AI01decoder {\n        constructor(information) {\n            super(information);\n        }\n        encodeCompressedWeight(buf, currentPos, weightSize) {\n            let originalWeightNumeric = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos, weightSize);\n            this.addWeightCode(buf, originalWeightNumeric);\n            let weightNumeric = this.checkWeight(originalWeightNumeric);\n            let currentDivisor = 100000;\n            for (let i = 0; i < 5; ++i) {\n                if (weightNumeric / currentDivisor === 0) {\n                    buf.append('0');\n                }\n                currentDivisor /= 10;\n            }\n            buf.append(weightNumeric);\n        }\n    }\n\n    class AI013x0xDecoder extends AI01weightDecoder {\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            if (this.getInformation().getSize() != AI013x0xDecoder.HEADER_SIZE + AI01weightDecoder.GTIN_SIZE + AI013x0xDecoder.WEIGHT_SIZE) {\n                throw new NotFoundException();\n            }\n            let buf = new StringBuilder();\n            this.encodeCompressedGtin(buf, AI013x0xDecoder.HEADER_SIZE);\n            this.encodeCompressedWeight(buf, AI013x0xDecoder.HEADER_SIZE + AI01weightDecoder.GTIN_SIZE, AI013x0xDecoder.WEIGHT_SIZE);\n            return buf.toString();\n        }\n    }\n    AI013x0xDecoder.HEADER_SIZE = 4 + 1;\n    AI013x0xDecoder.WEIGHT_SIZE = 15;\n\n    class AI013103decoder extends AI013x0xDecoder {\n        constructor(information) {\n            super(information);\n        }\n        addWeightCode(buf, weight) {\n            buf.append('(3103)');\n        }\n        checkWeight(weight) {\n            return weight;\n        }\n    }\n\n    class AI01320xDecoder extends AI013x0xDecoder {\n        constructor(information) {\n            super(information);\n        }\n        addWeightCode(buf, weight) {\n            if (weight < 10000) {\n                buf.append('(3202)');\n            }\n            else {\n                buf.append('(3203)');\n            }\n        }\n        checkWeight(weight) {\n            if (weight < 10000) {\n                return weight;\n            }\n            return weight - 10000;\n        }\n    }\n\n    class AI01392xDecoder extends AI01decoder {\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            if (this.getInformation().getSize() < AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE) {\n                throw new NotFoundException();\n            }\n            let buf = new StringBuilder();\n            this.encodeCompressedGtin(buf, AI01392xDecoder.HEADER_SIZE);\n            let lastAIdigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE, AI01392xDecoder.LAST_DIGIT_SIZE);\n            buf.append('(392');\n            buf.append(lastAIdigit);\n            buf.append(')');\n            let decodedInformation = this.getGeneralDecoder().decodeGeneralPurposeField(AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE + AI01392xDecoder.LAST_DIGIT_SIZE, null);\n            buf.append(decodedInformation.getNewString());\n            return buf.toString();\n        }\n    }\n    AI01392xDecoder.HEADER_SIZE = 5 + 1 + 2;\n    AI01392xDecoder.LAST_DIGIT_SIZE = 2;\n\n    class AI01393xDecoder extends AI01decoder {\n        constructor(information) {\n            super(information);\n        }\n        parseInformation() {\n            if (this.getInformation().getSize() < AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE) {\n                throw new NotFoundException();\n            }\n            let buf = new StringBuilder();\n            this.encodeCompressedGtin(buf, AI01393xDecoder.HEADER_SIZE);\n            let lastAIdigit = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE, AI01393xDecoder.LAST_DIGIT_SIZE);\n            buf.append('(393');\n            buf.append(lastAIdigit);\n            buf.append(')');\n            let firstThreeDigits = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE + AI01393xDecoder.LAST_DIGIT_SIZE, AI01393xDecoder.FIRST_THREE_DIGITS_SIZE);\n            if (firstThreeDigits / 100 == 0) {\n                buf.append('0');\n            }\n            if (firstThreeDigits / 10 == 0) {\n                buf.append('0');\n            }\n            buf.append(firstThreeDigits);\n            let generalInformation = this.getGeneralDecoder().decodeGeneralPurposeField(AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE + AI01393xDecoder.LAST_DIGIT_SIZE + AI01393xDecoder.FIRST_THREE_DIGITS_SIZE, null);\n            buf.append(generalInformation.getNewString());\n            return buf.toString();\n        }\n    }\n    AI01393xDecoder.HEADER_SIZE = 5 + 1 + 2;\n    AI01393xDecoder.LAST_DIGIT_SIZE = 2;\n    AI01393xDecoder.FIRST_THREE_DIGITS_SIZE = 10;\n\n    class AI013x0x1xDecoder extends AI01weightDecoder {\n        constructor(information, firstAIdigits, dateCode) {\n            super(information);\n            this.dateCode = dateCode;\n            this.firstAIdigits = firstAIdigits;\n        }\n        parseInformation() {\n            if (this.getInformation().getSize() != AI013x0x1xDecoder.HEADER_SIZE + AI013x0x1xDecoder.GTIN_SIZE + AI013x0x1xDecoder.WEIGHT_SIZE + AI013x0x1xDecoder.DATE_SIZE) {\n                throw new NotFoundException();\n            }\n            let buf = new StringBuilder();\n            this.encodeCompressedGtin(buf, AI013x0x1xDecoder.HEADER_SIZE);\n            this.encodeCompressedWeight(buf, AI013x0x1xDecoder.HEADER_SIZE + AI013x0x1xDecoder.GTIN_SIZE, AI013x0x1xDecoder.WEIGHT_SIZE);\n            this.encodeCompressedDate(buf, AI013x0x1xDecoder.HEADER_SIZE + AI013x0x1xDecoder.GTIN_SIZE + AI013x0x1xDecoder.WEIGHT_SIZE);\n            return buf.toString();\n        }\n        encodeCompressedDate(buf, currentPos) {\n            let numericDate = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos, AI013x0x1xDecoder.DATE_SIZE);\n            if (numericDate == 38400) {\n                return;\n            }\n            buf.append('(');\n            buf.append(this.dateCode);\n            buf.append(')');\n            let day = numericDate % 32;\n            numericDate /= 32;\n            let month = numericDate % 12 + 1;\n            numericDate /= 12;\n            let year = numericDate;\n            if (year / 10 == 0) {\n                buf.append('0');\n            }\n            buf.append(year);\n            if (month / 10 == 0) {\n                buf.append('0');\n            }\n            buf.append(month);\n            if (day / 10 == 0) {\n                buf.append('0');\n            }\n            buf.append(day);\n        }\n        addWeightCode(buf, weight) {\n            buf.append('(');\n            buf.append(this.firstAIdigits);\n            buf.append(weight / 100000);\n            buf.append(')');\n        }\n        checkWeight(weight) {\n            return weight % 100000;\n        }\n    }\n    AI013x0x1xDecoder.HEADER_SIZE = 7 + 1;\n    AI013x0x1xDecoder.WEIGHT_SIZE = 20;\n    AI013x0x1xDecoder.DATE_SIZE = 16;\n\n    function createDecoder(information) {\n        try {\n            if (information.get(1)) {\n                return new AI01AndOtherAIs(information);\n            }\n            if (!information.get(2)) {\n                return new AnyAIDecoder(information);\n            }\n            let fourBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 4);\n            switch (fourBitEncodationMethod) {\n                case 4: return new AI013103decoder(information);\n                case 5: return new AI01320xDecoder(information);\n            }\n            let fiveBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 5);\n            switch (fiveBitEncodationMethod) {\n                case 12: return new AI01392xDecoder(information);\n                case 13: return new AI01393xDecoder(information);\n            }\n            let sevenBitEncodationMethod = GeneralAppIdDecoder.extractNumericValueFromBitArray(information, 1, 7);\n            switch (sevenBitEncodationMethod) {\n                case 56: return new AI013x0x1xDecoder(information, '310', '11');\n                case 57: return new AI013x0x1xDecoder(information, '320', '11');\n                case 58: return new AI013x0x1xDecoder(information, '310', '13');\n                case 59: return new AI013x0x1xDecoder(information, '320', '13');\n                case 60: return new AI013x0x1xDecoder(information, '310', '15');\n                case 61: return new AI013x0x1xDecoder(information, '320', '15');\n                case 62: return new AI013x0x1xDecoder(information, '310', '17');\n                case 63: return new AI013x0x1xDecoder(information, '320', '17');\n            }\n        }\n        catch (e) {\n            console.log(e);\n            throw new IllegalStateException('unknown decoder: ' + information);\n        }\n    }\n\n    class ExpandedPair {\n        constructor(leftChar, rightChar, finderPatter, mayBeLast) {\n            this.leftchar = leftChar;\n            this.rightchar = rightChar;\n            this.finderpattern = finderPatter;\n            this.maybeLast = mayBeLast;\n        }\n        mayBeLast() {\n            return this.maybeLast;\n        }\n        getLeftChar() {\n            return this.leftchar;\n        }\n        getRightChar() {\n            return this.rightchar;\n        }\n        getFinderPattern() {\n            return this.finderpattern;\n        }\n        mustBeLast() {\n            return this.rightchar == null;\n        }\n        toString() {\n            return '[ ' + this.leftchar + ', ' + this.rightchar + ' : ' + (this.finderpattern == null ? 'null' : this.finderpattern.getValue()) + ' ]';\n        }\n        static equals(o1, o2) {\n            if (!(o1 instanceof ExpandedPair)) {\n                return false;\n            }\n            return ExpandedPair.equalsOrNull(o1.leftchar, o2.leftchar) &&\n                ExpandedPair.equalsOrNull(o1.rightchar, o2.rightchar) &&\n                ExpandedPair.equalsOrNull(o1.finderpattern, o2.finderpattern);\n        }\n        static equalsOrNull(o1, o2) {\n            return o1 === null ? o2 === null : ExpandedPair.equals(o1, o2);\n        }\n        hashCode() {\n            // return ExpandedPair.hashNotNull(leftChar) ^ hashNotNull(rightChar) ^ hashNotNull(finderPattern);\n            let value = this.leftchar.getValue() ^ this.rightchar.getValue() ^ this.finderpattern.getValue();\n            return value;\n        }\n    }\n\n    class ExpandedRow {\n        constructor(pairs, rowNumber, wasReversed) {\n            this.pairs = pairs;\n            this.rowNumber = rowNumber;\n            this.wasReversed = wasReversed;\n        }\n        getPairs() {\n            return this.pairs;\n        }\n        getRowNumber() {\n            return this.rowNumber;\n        }\n        isReversed() {\n            return this.wasReversed;\n        }\n        // check implementation\n        isEquivalent(otherPairs) {\n            return this.checkEqualitity(this, otherPairs);\n        }\n        // @Override\n        toString() {\n            return '{ ' + this.pairs + ' }';\n        }\n        /**\n         * Two rows are equal if they contain the same pairs in the same order.\n         */\n        // @Override\n        // check implementation\n        equals(o1, o2) {\n            if (!(o1 instanceof ExpandedRow)) {\n                return false;\n            }\n            return this.checkEqualitity(o1, o2) && o1.wasReversed === o2.wasReversed;\n        }\n        checkEqualitity(pair1, pair2) {\n            if (!pair1 || !pair2)\n                return;\n            let result;\n            pair1.forEach((e1, i) => {\n                pair2.forEach(e2 => {\n                    if (e1.getLeftChar().getValue() === e2.getLeftChar().getValue() && e1.getRightChar().getValue() === e2.getRightChar().getValue() && e1.getFinderPatter().getValue() === e2.getFinderPatter().getValue()) {\n                        result = true;\n                    }\n                });\n            });\n            return result;\n        }\n    }\n\n    // import java.util.ArrayList;\n    // import java.util.Iterator;\n    // import java.util.List;\n    // import java.util.Map;\n    // import java.util.Collections;\n    class RSSExpandedReader extends AbstractRSSReader {\n        constructor(verbose) {\n            super(...arguments);\n            this.pairs = new Array(RSSExpandedReader.MAX_PAIRS);\n            this.rows = new Array();\n            this.startEnd = [2];\n            this.verbose = (verbose === true);\n        }\n        decodeRow(rowNumber, row, hints) {\n            // Rows can start with even pattern in case in prev rows there where odd number of patters.\n            // So lets try twice\n            // this.pairs.clear();\n            this.pairs.length = 0;\n            this.startFromEven = false;\n            try {\n                return RSSExpandedReader.constructResult(this.decodeRow2pairs(rowNumber, row));\n            }\n            catch (e) {\n                // OK\n                if (this.verbose) {\n                    console.log(e);\n                }\n            }\n            this.pairs.length = 0;\n            this.startFromEven = true;\n            return RSSExpandedReader.constructResult(this.decodeRow2pairs(rowNumber, row));\n        }\n        reset() {\n            this.pairs.length = 0;\n            this.rows.length = 0;\n        }\n        // Not private for testing\n        decodeRow2pairs(rowNumber, row) {\n            let done = false;\n            while (!done) {\n                try {\n                    this.pairs.push(this.retrieveNextPair(row, this.pairs, rowNumber));\n                }\n                catch (error) {\n                    if (error instanceof NotFoundException) {\n                        if (!this.pairs.length) {\n                            throw new NotFoundException();\n                        }\n                        // exit this loop when retrieveNextPair() fails and throws\n                        done = true;\n                    }\n                }\n            }\n            // TODO: verify sequence of finder patterns as in checkPairSequence()\n            if (this.checkChecksum()) {\n                return this.pairs;\n            }\n            let tryStackedDecode;\n            if (this.rows.length) {\n                tryStackedDecode = true;\n            }\n            else {\n                tryStackedDecode = false;\n            }\n            // let tryStackedDecode = !this.rows.isEmpty();\n            this.storeRow(rowNumber, false); // TODO: deal with reversed rows\n            if (tryStackedDecode) {\n                // When the image is 180-rotated, then rows are sorted in wrong direction.\n                // Try twice with both the directions.\n                let ps = this.checkRowsBoolean(false);\n                if (ps != null) {\n                    return ps;\n                }\n                ps = this.checkRowsBoolean(true);\n                if (ps != null) {\n                    return ps;\n                }\n            }\n            throw new NotFoundException();\n        }\n        // Need to Verify\n        checkRowsBoolean(reverse) {\n            // Limit number of rows we are checking\n            // We use recursive algorithm with pure complexity and don't want it to take forever\n            // Stacked barcode can have up to 11 rows, so 25 seems reasonable enough\n            if (this.rows.length > 25) {\n                this.rows.length = 0; // We will never have a chance to get result, so clear it\n                return null;\n            }\n            this.pairs.length = 0;\n            if (reverse) {\n                this.rows = this.rows.reverse();\n                // Collections.reverse(this.rows);\n            }\n            let ps = null;\n            try {\n                ps = this.checkRows(new Array(), 0);\n            }\n            catch (e) {\n                // OK\n                if (this.verbose) {\n                    console.log(e);\n                }\n            }\n            if (reverse) {\n                this.rows = this.rows.reverse();\n                // Collections.reverse(this.rows);\n            }\n            return ps;\n        }\n        // Try to construct a valid rows sequence\n        // Recursion is used to implement backtracking\n        checkRows(collectedRows, currentRow) {\n            for (let i = currentRow; i < this.rows.length; i++) {\n                let row = this.rows[i];\n                this.pairs.length = 0;\n                for (let collectedRow of collectedRows) {\n                    this.pairs.push(collectedRow.getPairs());\n                }\n                this.pairs.push(row.getPairs());\n                if (!RSSExpandedReader.isValidSequence(this.pairs)) {\n                    continue;\n                }\n                if (this.checkChecksum()) {\n                    return this.pairs;\n                }\n                let rs = new Array(collectedRows);\n                rs.push(row);\n                try {\n                    // Recursion: try to add more rows\n                    return this.checkRows(rs, i + 1);\n                }\n                catch (e) {\n                    // We failed, try the next candidate\n                    if (this.verbose) {\n                        console.log(e);\n                    }\n                }\n            }\n            throw new NotFoundException();\n        }\n        // Whether the pairs form a valid find pattern sequence,\n        // either complete or a prefix\n        static isValidSequence(pairs) {\n            for (let sequence of RSSExpandedReader.FINDER_PATTERN_SEQUENCES) {\n                if (pairs.length > sequence.length) {\n                    continue;\n                }\n                let stop = true;\n                for (let j = 0; j < pairs.length; j++) {\n                    if (pairs[j].getFinderPattern().getValue() != sequence[j]) {\n                        stop = false;\n                        break;\n                    }\n                }\n                if (stop) {\n                    return true;\n                }\n            }\n            return false;\n        }\n        storeRow(rowNumber, wasReversed) {\n            // Discard if duplicate above or below; otherwise insert in order by row number.\n            let insertPos = 0;\n            let prevIsSame = false;\n            let nextIsSame = false;\n            while (insertPos < this.rows.length) {\n                let erow = this.rows[insertPos];\n                if (erow.getRowNumber() > rowNumber) {\n                    nextIsSame = erow.isEquivalent(this.pairs);\n                    break;\n                }\n                prevIsSame = erow.isEquivalent(this.pairs);\n                insertPos++;\n            }\n            if (nextIsSame || prevIsSame) {\n                return;\n            }\n            // When the row was partially decoded (e.g. 2 pairs found instead of 3),\n            // it will prevent us from detecting the barcode.\n            // Try to merge partial rows\n            // Check whether the row is part of an allready detected row\n            if (RSSExpandedReader.isPartialRow(this.pairs, this.rows)) {\n                return;\n            }\n            this.rows.push(insertPos, new ExpandedRow(this.pairs, rowNumber, wasReversed));\n            this.removePartialRows(this.pairs, this.rows);\n        }\n        // Remove all the rows that contains only specified pairs\n        removePartialRows(pairs, rows) {\n            // for (Iterator<ExpandedRow> iterator = rows.iterator(); iterator.hasNext();) {\n            //   ExpandedRow r = iterator.next();\n            //   if (r.getPairs().size() == pairs.size()) {\n            //     continue;\n            //   }\n            //   boolean allFound = true;\n            //   for (ExpandedPair p : r.getPairs()) {\n            //     boolean found = false;\n            //     for (ExpandedPair pp : pairs) {\n            //       if (p.equals(pp)) {\n            //         found = true;\n            //         break;\n            //       }\n            //     }\n            //     if (!found) {\n            //       allFound = false;\n            //       break;\n            //     }\n            //   }\n            //   if (allFound) {\n            //     // 'pairs' contains all the pairs from the row 'r'\n            //     iterator.remove();\n            //   }\n            // }\n            for (let row of rows) {\n                if (row.getPairs().length === pairs.length) {\n                    continue;\n                }\n                for (let p of row.getPairs()) {\n                    for (let pp of pairs) {\n                        if (ExpandedPair.equals(p, pp)) {\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n        // Returns true when one of the rows already contains all the pairs\n        static isPartialRow(pairs, rows) {\n            for (let r of rows) {\n                let allFound = true;\n                for (let p of pairs) {\n                    let found = false;\n                    for (let pp of r.getPairs()) {\n                        if (p.equals(pp)) {\n                            found = true;\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        allFound = false;\n                        break;\n                    }\n                }\n                if (allFound) {\n                    // the row 'r' contain all the pairs from 'pairs'\n                    return true;\n                }\n            }\n            return false;\n        }\n        // Only used for unit testing\n        getRows() {\n            return this.rows;\n        }\n        // Not private for unit testing\n        static constructResult(pairs) {\n            let binary = BitArrayBuilder.buildBitArray(pairs);\n            let decoder = createDecoder(binary);\n            let resultingString = decoder.parseInformation();\n            let firstPoints = pairs[0].getFinderPattern().getResultPoints();\n            let lastPoints = pairs[pairs.length - 1].getFinderPattern().getResultPoints();\n            let points = [firstPoints[0], firstPoints[1], lastPoints[0], lastPoints[1]];\n            return new Result(resultingString, null, null, points, BarcodeFormat$1.RSS_EXPANDED, null);\n        }\n        checkChecksum() {\n            let firstPair = this.pairs.get(0);\n            let checkCharacter = firstPair.getLeftChar();\n            let firstCharacter = firstPair.getRightChar();\n            if (firstCharacter == null) {\n                return false;\n            }\n            let checksum = firstCharacter.getChecksumPortion();\n            let s = 2;\n            for (let i = 1; i < this.pairs.size(); ++i) {\n                let currentPair = this.pairs.get(i);\n                checksum += currentPair.getLeftChar().getChecksumPortion();\n                s++;\n                let currentRightChar = currentPair.getRightChar();\n                if (currentRightChar != null) {\n                    checksum += currentRightChar.getChecksumPortion();\n                    s++;\n                }\n            }\n            checksum %= 211;\n            let checkCharacterValue = 211 * (s - 4) + checksum;\n            return checkCharacterValue == checkCharacter.getValue();\n        }\n        static getNextSecondBar(row, initialPos) {\n            let currentPos;\n            if (row.get(initialPos)) {\n                currentPos = row.getNextUnset(initialPos);\n                currentPos = row.getNextSet(currentPos);\n            }\n            else {\n                currentPos = row.getNextSet(initialPos);\n                currentPos = row.getNextUnset(currentPos);\n            }\n            return currentPos;\n        }\n        // not private for testing\n        retrieveNextPair(row, previousPairs, rowNumber) {\n            let isOddPattern = previousPairs.length % 2 == 0;\n            if (this.startFromEven) {\n                isOddPattern = !isOddPattern;\n            }\n            let pattern;\n            let keepFinding = true;\n            let forcedOffset = -1;\n            do {\n                this.findNextPair(row, previousPairs, forcedOffset);\n                pattern = this.parseFoundFinderPattern(row, rowNumber, isOddPattern);\n                if (pattern == null) {\n                    forcedOffset = RSSExpandedReader.getNextSecondBar(row, this.startEnd[0]);\n                }\n                else {\n                    keepFinding = false;\n                }\n            } while (keepFinding);\n            // When stacked symbol is split over multiple rows, there's no way to guess if this pair can be last or not.\n            // boolean mayBeLast = checkPairSequence(previousPairs, pattern);\n            let leftChar = this.decodeDataCharacter(row, pattern, isOddPattern, true);\n            if (!this.isEmptyPair(previousPairs) && previousPairs[previousPairs.length - 1].mustBeLast()) {\n                throw new NotFoundException();\n            }\n            let rightChar;\n            try {\n                rightChar = this.decodeDataCharacter(row, pattern, isOddPattern, false);\n            }\n            catch (e) {\n                rightChar = null;\n                if (this.verbose) {\n                    console.log(e);\n                }\n            }\n            return new ExpandedPair(leftChar, rightChar, pattern, true);\n        }\n        isEmptyPair(pairs) {\n            if (pairs.length === 0) {\n                return true;\n            }\n            return false;\n        }\n        findNextPair(row, previousPairs, forcedOffset) {\n            let counters = this.getDecodeFinderCounters();\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let width = row.getSize();\n            let rowOffset;\n            if (forcedOffset >= 0) {\n                rowOffset = forcedOffset;\n            }\n            else if (this.isEmptyPair(previousPairs)) {\n                rowOffset = 0;\n            }\n            else {\n                let lastPair = previousPairs[previousPairs.length - 1];\n                rowOffset = lastPair.getFinderPattern().getStartEnd()[1];\n            }\n            let searchingEvenPair = previousPairs.length % 2 != 0;\n            if (this.startFromEven) {\n                searchingEvenPair = !searchingEvenPair;\n            }\n            let isWhite = false;\n            while (rowOffset < width) {\n                isWhite = !row.get(rowOffset);\n                if (!isWhite) {\n                    break;\n                }\n                rowOffset++;\n            }\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            for (let x = rowOffset; x < width; x++) {\n                if (row.get(x) != isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition == 3) {\n                        if (searchingEvenPair) {\n                            RSSExpandedReader.reverseCounters(counters);\n                        }\n                        if (RSSExpandedReader.isFinderPattern(counters)) {\n                            this.startEnd[0] = patternStart;\n                            this.startEnd[1] = x;\n                            return;\n                        }\n                        if (searchingEvenPair) {\n                            RSSExpandedReader.reverseCounters(counters);\n                        }\n                        patternStart += counters[0] + counters[1];\n                        counters[0] = counters[2];\n                        counters[1] = counters[3];\n                        counters[2] = 0;\n                        counters[3] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        static reverseCounters(counters) {\n            let length = counters.length;\n            for (let i = 0; i < length / 2; ++i) {\n                let tmp = counters[i];\n                counters[i] = counters[length - i - 1];\n                counters[length - i - 1] = tmp;\n            }\n        }\n        parseFoundFinderPattern(row, rowNumber, oddPattern) {\n            // Actually we found elements 2-5.\n            let firstCounter;\n            let start;\n            let end;\n            if (oddPattern) {\n                // If pattern number is odd, we need to locate element 1 *before* the current block.\n                let firstElementStart = this.startEnd[0] - 1;\n                // Locate element 1\n                while (firstElementStart >= 0 && !row.get(firstElementStart)) {\n                    firstElementStart--;\n                }\n                firstElementStart++;\n                firstCounter = this.startEnd[0] - firstElementStart;\n                start = firstElementStart;\n                end = this.startEnd[1];\n            }\n            else {\n                // If pattern number is even, the pattern is reversed, so we need to locate element 1 *after* the current block.\n                start = this.startEnd[0];\n                end = row.getNextUnset(this.startEnd[1] + 1);\n                firstCounter = end - this.startEnd[1];\n            }\n            // Make 'counters' hold 1-4\n            let counters = this.getDecodeFinderCounters();\n            System.arraycopy(counters, 0, counters, 1, counters.length - 1);\n            counters[0] = firstCounter;\n            let value;\n            try {\n                value = this.parseFinderValue(counters, RSSExpandedReader.FINDER_PATTERNS);\n            }\n            catch (e) {\n                return null;\n            }\n            // return new FinderPattern(value, new int[] { start, end }, start, end, rowNumber});\n            return new FinderPattern(value, [start, end], start, end, rowNumber);\n        }\n        decodeDataCharacter(row, pattern, isOddPattern, leftChar) {\n            let counters = this.getDataCharacterCounters();\n            for (let x = 0; x < counters.length; x++) {\n                counters[x] = 0;\n            }\n            if (leftChar) {\n                RSSExpandedReader.recordPatternInReverse(row, pattern.getStartEnd()[0], counters);\n            }\n            else {\n                RSSExpandedReader.recordPattern(row, pattern.getStartEnd()[1], counters);\n                // reverse it\n                for (let i = 0, j = counters.length - 1; i < j; i++, j--) {\n                    let temp = counters[i];\n                    counters[i] = counters[j];\n                    counters[j] = temp;\n                }\n            } // counters[] has the pixels of the module\n            let numModules = 17; // left and right data characters have all the same length\n            let elementWidth = MathUtils.sum(new Int32Array(counters)) / numModules;\n            // Sanity check: element width for pattern and the character should match\n            let expectedElementWidth = (pattern.getStartEnd()[1] - pattern.getStartEnd()[0]) / 15.0;\n            if (Math.abs(elementWidth - expectedElementWidth) / expectedElementWidth > 0.3) {\n                throw new NotFoundException();\n            }\n            let oddCounts = this.getOddCounts();\n            let evenCounts = this.getEvenCounts();\n            let oddRoundingErrors = this.getOddRoundingErrors();\n            let evenRoundingErrors = this.getEvenRoundingErrors();\n            for (let i = 0; i < counters.length; i++) {\n                let value = 1.0 * counters[i] / elementWidth;\n                let count = value + 0.5; // Round\n                if (count < 1) {\n                    if (value < 0.3) {\n                        throw new NotFoundException();\n                    }\n                    count = 1;\n                }\n                else if (count > 8) {\n                    if (value > 8.7) {\n                        throw new NotFoundException();\n                    }\n                    count = 8;\n                }\n                let offset = i / 2;\n                if ((i & 0x01) == 0) {\n                    oddCounts[offset] = count;\n                    oddRoundingErrors[offset] = value - count;\n                }\n                else {\n                    evenCounts[offset] = count;\n                    evenRoundingErrors[offset] = value - count;\n                }\n            }\n            this.adjustOddEvenCounts(numModules);\n            let weightRowNumber = 4 * pattern.getValue() + (isOddPattern ? 0 : 2) + (leftChar ? 0 : 1) - 1;\n            let oddSum = 0;\n            let oddChecksumPortion = 0;\n            for (let i = oddCounts.length - 1; i >= 0; i--) {\n                if (RSSExpandedReader.isNotA1left(pattern, isOddPattern, leftChar)) {\n                    let weight = RSSExpandedReader.WEIGHTS[weightRowNumber][2 * i];\n                    oddChecksumPortion += oddCounts[i] * weight;\n                }\n                oddSum += oddCounts[i];\n            }\n            let evenChecksumPortion = 0;\n            // int evenSum = 0;\n            for (let i = evenCounts.length - 1; i >= 0; i--) {\n                if (RSSExpandedReader.isNotA1left(pattern, isOddPattern, leftChar)) {\n                    let weight = RSSExpandedReader.WEIGHTS[weightRowNumber][2 * i + 1];\n                    evenChecksumPortion += evenCounts[i] * weight;\n                }\n                // evenSum += evenCounts[i];\n            }\n            let checksumPortion = oddChecksumPortion + evenChecksumPortion;\n            if ((oddSum & 0x01) != 0 || oddSum > 13 || oddSum < 4) {\n                throw new NotFoundException();\n            }\n            let group = (13 - oddSum) / 2;\n            let oddWidest = RSSExpandedReader.SYMBOL_WIDEST[group];\n            let evenWidest = 9 - oddWidest;\n            let vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);\n            let vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);\n            let tEven = RSSExpandedReader.EVEN_TOTAL_SUBSET[group];\n            let gSum = RSSExpandedReader.GSUM[group];\n            let value = vOdd * tEven + vEven + gSum;\n            return new DataCharacter(value, checksumPortion);\n        }\n        static isNotA1left(pattern, isOddPattern, leftChar) {\n            // A1: pattern.getValue is 0 (A), and it's an oddPattern, and it is a left char\n            return !(pattern.getValue() == 0 && isOddPattern && leftChar);\n        }\n        adjustOddEvenCounts(numModules) {\n            let oddSum = MathUtils.sum(new Int32Array(this.getOddCounts()));\n            let evenSum = MathUtils.sum(new Int32Array(this.getEvenCounts()));\n            let incrementOdd = false;\n            let decrementOdd = false;\n            if (oddSum > 13) {\n                decrementOdd = true;\n            }\n            else if (oddSum < 4) {\n                incrementOdd = true;\n            }\n            let incrementEven = false;\n            let decrementEven = false;\n            if (evenSum > 13) {\n                decrementEven = true;\n            }\n            else if (evenSum < 4) {\n                incrementEven = true;\n            }\n            let mismatch = oddSum + evenSum - numModules;\n            let oddParityBad = (oddSum & 0x01) == 1;\n            let evenParityBad = (evenSum & 0x01) == 0;\n            if (mismatch == 1) {\n                if (oddParityBad) {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    decrementOdd = true;\n                }\n                else {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    decrementEven = true;\n                }\n            }\n            else if (mismatch == -1) {\n                if (oddParityBad) {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    incrementOdd = true;\n                }\n                else {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    incrementEven = true;\n                }\n            }\n            else if (mismatch == 0) {\n                if (oddParityBad) {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    // Both bad\n                    if (oddSum < evenSum) {\n                        incrementOdd = true;\n                        decrementEven = true;\n                    }\n                    else {\n                        decrementOdd = true;\n                        incrementEven = true;\n                    }\n                }\n                else {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    // Nothing to do!\n                }\n            }\n            else {\n                throw new NotFoundException();\n            }\n            if (incrementOdd) {\n                if (decrementOdd) {\n                    throw new NotFoundException();\n                }\n                RSSExpandedReader.increment(this.getOddCounts(), this.getOddRoundingErrors());\n            }\n            if (decrementOdd) {\n                RSSExpandedReader.decrement(this.getOddCounts(), this.getOddRoundingErrors());\n            }\n            if (incrementEven) {\n                if (decrementEven) {\n                    throw new NotFoundException();\n                }\n                RSSExpandedReader.increment(this.getEvenCounts(), this.getOddRoundingErrors());\n            }\n            if (decrementEven) {\n                RSSExpandedReader.decrement(this.getEvenCounts(), this.getEvenRoundingErrors());\n            }\n        }\n    }\n    RSSExpandedReader.SYMBOL_WIDEST = [7, 5, 4, 3, 1];\n    RSSExpandedReader.EVEN_TOTAL_SUBSET = [4, 20, 52, 104, 204];\n    RSSExpandedReader.GSUM = [0, 348, 1388, 2948, 3988];\n    RSSExpandedReader.FINDER_PATTERNS = [\n        Int32Array.from([1, 8, 4, 1]),\n        Int32Array.from([3, 6, 4, 1]),\n        Int32Array.from([3, 4, 6, 1]),\n        Int32Array.from([3, 2, 8, 1]),\n        Int32Array.from([2, 6, 5, 1]),\n        Int32Array.from([2, 2, 9, 1]) // F\n    ];\n    RSSExpandedReader.WEIGHTS = [\n        [1, 3, 9, 27, 81, 32, 96, 77],\n        [20, 60, 180, 118, 143, 7, 21, 63],\n        [189, 145, 13, 39, 117, 140, 209, 205],\n        [193, 157, 49, 147, 19, 57, 171, 91],\n        [62, 186, 136, 197, 169, 85, 44, 132],\n        [185, 133, 188, 142, 4, 12, 36, 108],\n        [113, 128, 173, 97, 80, 29, 87, 50],\n        [150, 28, 84, 41, 123, 158, 52, 156],\n        [46, 138, 203, 187, 139, 206, 196, 166],\n        [76, 17, 51, 153, 37, 111, 122, 155],\n        [43, 129, 176, 106, 107, 110, 119, 146],\n        [16, 48, 144, 10, 30, 90, 59, 177],\n        [109, 116, 137, 200, 178, 112, 125, 164],\n        [70, 210, 208, 202, 184, 130, 179, 115],\n        [134, 191, 151, 31, 93, 68, 204, 190],\n        [148, 22, 66, 198, 172, 94, 71, 2],\n        [6, 18, 54, 162, 64, 192, 154, 40],\n        [120, 149, 25, 75, 14, 42, 126, 167],\n        [79, 26, 78, 23, 69, 207, 199, 175],\n        [103, 98, 83, 38, 114, 131, 182, 124],\n        [161, 61, 183, 127, 170, 88, 53, 159],\n        [55, 165, 73, 8, 24, 72, 5, 15],\n        [45, 135, 194, 160, 58, 174, 100, 89]\n    ];\n    RSSExpandedReader.FINDER_PAT_A = 0;\n    RSSExpandedReader.FINDER_PAT_B = 1;\n    RSSExpandedReader.FINDER_PAT_C = 2;\n    RSSExpandedReader.FINDER_PAT_D = 3;\n    RSSExpandedReader.FINDER_PAT_E = 4;\n    RSSExpandedReader.FINDER_PAT_F = 5;\n    RSSExpandedReader.FINDER_PATTERN_SEQUENCES = [\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_D],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_C],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_F],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_F, RSSExpandedReader.FINDER_PAT_F],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_D],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_E],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_F, RSSExpandedReader.FINDER_PAT_F],\n        [RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_A, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_B, RSSExpandedReader.FINDER_PAT_C, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_D, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_E, RSSExpandedReader.FINDER_PAT_F, RSSExpandedReader.FINDER_PAT_F],\n    ];\n    RSSExpandedReader.MAX_PAIRS = 11;\n\n    class Pair extends DataCharacter {\n        constructor(value, checksumPortion, finderPattern) {\n            super(value, checksumPortion);\n            this.count = 0;\n            this.finderPattern = finderPattern;\n        }\n        getFinderPattern() {\n            return this.finderPattern;\n        }\n        getCount() {\n            return this.count;\n        }\n        incrementCount() {\n            this.count++;\n        }\n    }\n\n    class RSS14Reader extends AbstractRSSReader {\n        constructor() {\n            super(...arguments);\n            this.possibleLeftPairs = [];\n            this.possibleRightPairs = [];\n        }\n        decodeRow(rowNumber, row, hints) {\n            const leftPair = this.decodePair(row, false, rowNumber, hints);\n            RSS14Reader.addOrTally(this.possibleLeftPairs, leftPair);\n            row.reverse();\n            let rightPair = this.decodePair(row, true, rowNumber, hints);\n            RSS14Reader.addOrTally(this.possibleRightPairs, rightPair);\n            row.reverse();\n            for (let left of this.possibleLeftPairs) {\n                if (left.getCount() > 1) {\n                    for (let right of this.possibleRightPairs) {\n                        if (right.getCount() > 1 && RSS14Reader.checkChecksum(left, right)) {\n                            return RSS14Reader.constructResult(left, right);\n                        }\n                    }\n                }\n            }\n            throw new NotFoundException();\n        }\n        static addOrTally(possiblePairs, pair) {\n            if (pair == null) {\n                return;\n            }\n            let found = false;\n            for (let other of possiblePairs) {\n                if (other.getValue() === pair.getValue()) {\n                    other.incrementCount();\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                possiblePairs.push(pair);\n            }\n        }\n        reset() {\n            this.possibleLeftPairs.length = 0;\n            this.possibleRightPairs.length = 0;\n        }\n        static constructResult(leftPair, rightPair) {\n            let symbolValue = 4537077 * leftPair.getValue() + rightPair.getValue();\n            let text = new String(symbolValue).toString();\n            let buffer = new StringBuilder();\n            for (let i = 13 - text.length; i > 0; i--) {\n                buffer.append('0');\n            }\n            buffer.append(text);\n            let checkDigit = 0;\n            for (let i = 0; i < 13; i++) {\n                let digit = buffer.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n                checkDigit += ((i & 0x01) === 0) ? 3 * digit : digit;\n            }\n            checkDigit = 10 - (checkDigit % 10);\n            if (checkDigit === 10) {\n                checkDigit = 0;\n            }\n            buffer.append(checkDigit.toString());\n            let leftPoints = leftPair.getFinderPattern().getResultPoints();\n            let rightPoints = rightPair.getFinderPattern().getResultPoints();\n            return new Result(buffer.toString(), null, 0, [leftPoints[0], leftPoints[1], rightPoints[0], rightPoints[1]], BarcodeFormat$1.RSS_14, new Date().getTime());\n        }\n        static checkChecksum(leftPair, rightPair) {\n            let checkValue = (leftPair.getChecksumPortion() + 16 * rightPair.getChecksumPortion()) % 79;\n            let targetCheckValue = 9 * leftPair.getFinderPattern().getValue() + rightPair.getFinderPattern().getValue();\n            if (targetCheckValue > 72) {\n                targetCheckValue--;\n            }\n            if (targetCheckValue > 8) {\n                targetCheckValue--;\n            }\n            return checkValue === targetCheckValue;\n        }\n        decodePair(row, right, rowNumber, hints) {\n            try {\n                let startEnd = this.findFinderPattern(row, right);\n                let pattern = this.parseFoundFinderPattern(row, rowNumber, right, startEnd);\n                let resultPointCallback = hints == null ? null : hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n                if (resultPointCallback != null) {\n                    let center = (startEnd[0] + startEnd[1]) / 2.0;\n                    if (right) {\n                        // row is actually reversed\n                        center = row.getSize() - 1 - center;\n                    }\n                    resultPointCallback.foundPossibleResultPoint(new ResultPoint(center, rowNumber));\n                }\n                let outside = this.decodeDataCharacter(row, pattern, true);\n                let inside = this.decodeDataCharacter(row, pattern, false);\n                return new Pair(1597 * outside.getValue() + inside.getValue(), outside.getChecksumPortion() + 4 * inside.getChecksumPortion(), pattern);\n            }\n            catch (err) {\n                return null;\n            }\n        }\n        decodeDataCharacter(row, pattern, outsideChar) {\n            let counters = this.getDataCharacterCounters();\n            for (let x = 0; x < counters.length; x++) {\n                counters[x] = 0;\n            }\n            if (outsideChar) {\n                OneDReader.recordPatternInReverse(row, pattern.getStartEnd()[0], counters);\n            }\n            else {\n                OneDReader.recordPattern(row, pattern.getStartEnd()[1] + 1, counters);\n                // reverse it\n                for (let i = 0, j = counters.length - 1; i < j; i++, j--) {\n                    let temp = counters[i];\n                    counters[i] = counters[j];\n                    counters[j] = temp;\n                }\n            }\n            let numModules = outsideChar ? 16 : 15;\n            let elementWidth = MathUtils.sum(new Int32Array(counters)) / numModules;\n            let oddCounts = this.getOddCounts();\n            let evenCounts = this.getEvenCounts();\n            let oddRoundingErrors = this.getOddRoundingErrors();\n            let evenRoundingErrors = this.getEvenRoundingErrors();\n            for (let i = 0; i < counters.length; i++) {\n                let value = counters[i] / elementWidth;\n                let count = Math.floor(value + 0.5);\n                if (count < 1) {\n                    count = 1;\n                }\n                else if (count > 8) {\n                    count = 8;\n                }\n                let offset = Math.floor(i / 2);\n                if ((i & 0x01) === 0) {\n                    oddCounts[offset] = count;\n                    oddRoundingErrors[offset] = value - count;\n                }\n                else {\n                    evenCounts[offset] = count;\n                    evenRoundingErrors[offset] = value - count;\n                }\n            }\n            this.adjustOddEvenCounts(outsideChar, numModules);\n            let oddSum = 0;\n            let oddChecksumPortion = 0;\n            for (let i = oddCounts.length - 1; i >= 0; i--) {\n                oddChecksumPortion *= 9;\n                oddChecksumPortion += oddCounts[i];\n                oddSum += oddCounts[i];\n            }\n            let evenChecksumPortion = 0;\n            let evenSum = 0;\n            for (let i = evenCounts.length - 1; i >= 0; i--) {\n                evenChecksumPortion *= 9;\n                evenChecksumPortion += evenCounts[i];\n                evenSum += evenCounts[i];\n            }\n            let checksumPortion = oddChecksumPortion + 3 * evenChecksumPortion;\n            if (outsideChar) {\n                if ((oddSum & 0x01) !== 0 || oddSum > 12 || oddSum < 4) {\n                    throw new NotFoundException();\n                }\n                let group = (12 - oddSum) / 2;\n                let oddWidest = RSS14Reader.OUTSIDE_ODD_WIDEST[group];\n                let evenWidest = 9 - oddWidest;\n                let vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, false);\n                let vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, true);\n                let tEven = RSS14Reader.OUTSIDE_EVEN_TOTAL_SUBSET[group];\n                let gSum = RSS14Reader.OUTSIDE_GSUM[group];\n                return new DataCharacter(vOdd * tEven + vEven + gSum, checksumPortion);\n            }\n            else {\n                if ((evenSum & 0x01) !== 0 || evenSum > 10 || evenSum < 4) {\n                    throw new NotFoundException();\n                }\n                let group = (10 - evenSum) / 2;\n                let oddWidest = RSS14Reader.INSIDE_ODD_WIDEST[group];\n                let evenWidest = 9 - oddWidest;\n                let vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);\n                let vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);\n                let tOdd = RSS14Reader.INSIDE_ODD_TOTAL_SUBSET[group];\n                let gSum = RSS14Reader.INSIDE_GSUM[group];\n                return new DataCharacter(vEven * tOdd + vOdd + gSum, checksumPortion);\n            }\n        }\n        findFinderPattern(row, rightFinderPattern) {\n            let counters = this.getDecodeFinderCounters();\n            counters[0] = 0;\n            counters[1] = 0;\n            counters[2] = 0;\n            counters[3] = 0;\n            let width = row.getSize();\n            let isWhite = false;\n            let rowOffset = 0;\n            while (rowOffset < width) {\n                isWhite = !row.get(rowOffset);\n                if (rightFinderPattern === isWhite) {\n                    // Will encounter white first when searching for right finder pattern\n                    break;\n                }\n                rowOffset++;\n            }\n            let counterPosition = 0;\n            let patternStart = rowOffset;\n            for (let x = rowOffset; x < width; x++) {\n                if (row.get(x) !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === 3) {\n                        if (AbstractRSSReader.isFinderPattern(counters)) {\n                            return [patternStart, x];\n                        }\n                        patternStart += counters[0] + counters[1];\n                        counters[0] = counters[2];\n                        counters[1] = counters[3];\n                        counters[2] = 0;\n                        counters[3] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            throw new NotFoundException();\n        }\n        parseFoundFinderPattern(row, rowNumber, right, startEnd) {\n            // Actually we found elements 2-5\n            let firstIsBlack = row.get(startEnd[0]);\n            let firstElementStart = startEnd[0] - 1;\n            // Locate element 1\n            while (firstElementStart >= 0 && firstIsBlack !== row.get(firstElementStart)) {\n                firstElementStart--;\n            }\n            firstElementStart++;\n            const firstCounter = startEnd[0] - firstElementStart;\n            // Make 'counters' hold 1-4\n            const counters = this.getDecodeFinderCounters();\n            const copy = new Int32Array(counters.length);\n            System.arraycopy(counters, 0, copy, 1, counters.length - 1);\n            copy[0] = firstCounter;\n            const value = this.parseFinderValue(copy, RSS14Reader.FINDER_PATTERNS);\n            let start = firstElementStart;\n            let end = startEnd[1];\n            if (right) {\n                // row is actually reversed\n                start = row.getSize() - 1 - start;\n                end = row.getSize() - 1 - end;\n            }\n            return new FinderPattern(value, [firstElementStart, startEnd[1]], start, end, rowNumber);\n        }\n        adjustOddEvenCounts(outsideChar, numModules) {\n            let oddSum = MathUtils.sum(new Int32Array(this.getOddCounts()));\n            let evenSum = MathUtils.sum(new Int32Array(this.getEvenCounts()));\n            let incrementOdd = false;\n            let decrementOdd = false;\n            let incrementEven = false;\n            let decrementEven = false;\n            if (outsideChar) {\n                if (oddSum > 12) {\n                    decrementOdd = true;\n                }\n                else if (oddSum < 4) {\n                    incrementOdd = true;\n                }\n                if (evenSum > 12) {\n                    decrementEven = true;\n                }\n                else if (evenSum < 4) {\n                    incrementEven = true;\n                }\n            }\n            else {\n                if (oddSum > 11) {\n                    decrementOdd = true;\n                }\n                else if (oddSum < 5) {\n                    incrementOdd = true;\n                }\n                if (evenSum > 10) {\n                    decrementEven = true;\n                }\n                else if (evenSum < 4) {\n                    incrementEven = true;\n                }\n            }\n            let mismatch = oddSum + evenSum - numModules;\n            let oddParityBad = (oddSum & 0x01) === (outsideChar ? 1 : 0);\n            let evenParityBad = (evenSum & 0x01) === 1;\n            if (mismatch === 1) {\n                if (oddParityBad) {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    decrementOdd = true;\n                }\n                else {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    decrementEven = true;\n                }\n            }\n            else if (mismatch === -1) {\n                if (oddParityBad) {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    incrementOdd = true;\n                }\n                else {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    incrementEven = true;\n                }\n            }\n            else if (mismatch === 0) {\n                if (oddParityBad) {\n                    if (!evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    // Both bad\n                    if (oddSum < evenSum) {\n                        incrementOdd = true;\n                        decrementEven = true;\n                    }\n                    else {\n                        decrementOdd = true;\n                        incrementEven = true;\n                    }\n                }\n                else {\n                    if (evenParityBad) {\n                        throw new NotFoundException();\n                    }\n                    // Nothing to do!\n                }\n            }\n            else {\n                throw new NotFoundException();\n            }\n            if (incrementOdd) {\n                if (decrementOdd) {\n                    throw new NotFoundException();\n                }\n                AbstractRSSReader.increment(this.getOddCounts(), this.getOddRoundingErrors());\n            }\n            if (decrementOdd) {\n                AbstractRSSReader.decrement(this.getOddCounts(), this.getOddRoundingErrors());\n            }\n            if (incrementEven) {\n                if (decrementEven) {\n                    throw new NotFoundException();\n                }\n                AbstractRSSReader.increment(this.getEvenCounts(), this.getOddRoundingErrors());\n            }\n            if (decrementEven) {\n                AbstractRSSReader.decrement(this.getEvenCounts(), this.getEvenRoundingErrors());\n            }\n        }\n    }\n    RSS14Reader.OUTSIDE_EVEN_TOTAL_SUBSET = [1, 10, 34, 70, 126];\n    RSS14Reader.INSIDE_ODD_TOTAL_SUBSET = [4, 20, 48, 81];\n    RSS14Reader.OUTSIDE_GSUM = [0, 161, 961, 2015, 2715];\n    RSS14Reader.INSIDE_GSUM = [0, 336, 1036, 1516];\n    RSS14Reader.OUTSIDE_ODD_WIDEST = [8, 6, 4, 3, 1];\n    RSS14Reader.INSIDE_ODD_WIDEST = [2, 4, 6, 8];\n    RSS14Reader.FINDER_PATTERNS = [\n        Int32Array.from([3, 8, 2, 1]),\n        Int32Array.from([3, 5, 5, 1]),\n        Int32Array.from([3, 3, 7, 1]),\n        Int32Array.from([3, 1, 9, 1]),\n        Int32Array.from([2, 7, 4, 1]),\n        Int32Array.from([2, 5, 6, 1]),\n        Int32Array.from([2, 3, 8, 1]),\n        Int32Array.from([1, 5, 7, 1]),\n        Int32Array.from([1, 3, 9, 1]),\n    ];\n\n    /**\n     * @author Daniel Switkin <dswitkin@google.com>\n     * @author Sean Owen\n     */\n    class MultiFormatOneDReader extends OneDReader {\n        constructor(hints, verbose) {\n            super();\n            this.readers = [];\n            this.verbose = (verbose === true);\n            const possibleFormats = !hints ? null : hints.get(DecodeHintType$1.POSSIBLE_FORMATS);\n            const useCode39CheckDigit = hints && hints.get(DecodeHintType$1.ASSUME_CODE_39_CHECK_DIGIT) !== undefined;\n            if (possibleFormats) {\n                if (possibleFormats.includes(BarcodeFormat$1.EAN_13) ||\n                    possibleFormats.includes(BarcodeFormat$1.UPC_A) ||\n                    possibleFormats.includes(BarcodeFormat$1.EAN_8) ||\n                    possibleFormats.includes(BarcodeFormat$1.UPC_E)) {\n                    this.readers.push(new MultiFormatUPCEANReader(hints));\n                }\n                if (possibleFormats.includes(BarcodeFormat$1.CODE_39)) {\n                    this.readers.push(new Code39Reader(useCode39CheckDigit));\n                }\n                // if (possibleFormats.includes(BarcodeFormat.CODE_93)) {\n                //    this.readers.push(new Code93Reader());\n                // }\n                if (possibleFormats.includes(BarcodeFormat$1.CODE_128)) {\n                    this.readers.push(new Code128Reader());\n                }\n                if (possibleFormats.includes(BarcodeFormat$1.ITF)) {\n                    this.readers.push(new ITFReader());\n                }\n                // if (possibleFormats.includes(BarcodeFormat.CODABAR)) {\n                //    this.readers.push(new CodaBarReader());\n                // }\n                if (possibleFormats.includes(BarcodeFormat$1.RSS_14)) {\n                    this.readers.push(new RSS14Reader());\n                }\n                if (possibleFormats.includes(BarcodeFormat$1.RSS_EXPANDED)) {\n                    this.readers.push(new RSSExpandedReader(this.verbose));\n                }\n            } else {\n                // Case when no hints were provided -> add all.\n                this.readers.push(new MultiFormatUPCEANReader(hints));\n                this.readers.push(new Code39Reader());\n                // this.readers.push(new CodaBarReader());\n                // this.readers.push(new Code93Reader());\n                this.readers.push(new MultiFormatUPCEANReader(hints));\n                this.readers.push(new Code128Reader());\n                this.readers.push(new ITFReader());\n                this.readers.push(new RSS14Reader());\n                this.readers.push(new RSSExpandedReader(this.verbose));\n            }\n        }\n        // @Override\n        decodeRow(rowNumber, row, hints) {\n            for (let i = 0; i < this.readers.length; i++) {\n                try {\n                    return this.readers[i].decodeRow(rowNumber, row, hints);\n                }\n                catch (re) {\n                    // continue\n                }\n            }\n            throw new NotFoundException();\n        }\n        // @Override\n        reset() {\n            this.readers.forEach(reader => reader.reset());\n        }\n    }\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * Barcode reader reader to use from browser.\n     */\n    class BrowserBarcodeReader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserBarcodeReader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         * @param {Map<DecodeHintType, any>} hints\n         */\n        constructor(timeBetweenScansMillis = 500, hints) {\n            super(new MultiFormatOneDReader(hints), timeBetweenScansMillis, hints);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a set of error-correction blocks in one symbol version. Most versions will\n     * use blocks of differing sizes within one version, so, this encapsulates the parameters for\n     * each set of blocks. It also holds the number of error-correction codewords per block since it\n     * will be the same across all blocks within one version.</p>\n     */\n    class ECBlocks {\n        constructor(ecCodewords, ecBlocks1, ecBlocks2) {\n            this.ecCodewords = ecCodewords;\n            this.ecBlocks = [ecBlocks1];\n            ecBlocks2 && this.ecBlocks.push(ecBlocks2);\n        }\n        getECCodewords() {\n            return this.ecCodewords;\n        }\n        getECBlocks() {\n            return this.ecBlocks;\n        }\n    }\n    /**\n     * <p>Encapsulates the parameters for one error-correction block in one symbol version.\n     * This includes the number of data codewords, and the number of times a block with these\n     * parameters is used consecutively in the Data Matrix code version's format.</p>\n     */\n    class ECB {\n        constructor(count, dataCodewords) {\n            this.count = count;\n            this.dataCodewords = dataCodewords;\n        }\n        getCount() {\n            return this.count;\n        }\n        getDataCodewords() {\n            return this.dataCodewords;\n        }\n    }\n    /**\n     * The Version object encapsulates attributes about a particular\n     * size Data Matrix Code.\n     *\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class Version {\n        constructor(versionNumber, symbolSizeRows, symbolSizeColumns, dataRegionSizeRows, dataRegionSizeColumns, ecBlocks) {\n            this.versionNumber = versionNumber;\n            this.symbolSizeRows = symbolSizeRows;\n            this.symbolSizeColumns = symbolSizeColumns;\n            this.dataRegionSizeRows = dataRegionSizeRows;\n            this.dataRegionSizeColumns = dataRegionSizeColumns;\n            this.ecBlocks = ecBlocks;\n            // Calculate the total number of codewords\n            let total = 0;\n            const ecCodewords = ecBlocks.getECCodewords();\n            const ecbArray = ecBlocks.getECBlocks();\n            for (let ecBlock of ecbArray) {\n                total += ecBlock.getCount() * (ecBlock.getDataCodewords() + ecCodewords);\n            }\n            this.totalCodewords = total;\n        }\n        getVersionNumber() {\n            return this.versionNumber;\n        }\n        getSymbolSizeRows() {\n            return this.symbolSizeRows;\n        }\n        getSymbolSizeColumns() {\n            return this.symbolSizeColumns;\n        }\n        getDataRegionSizeRows() {\n            return this.dataRegionSizeRows;\n        }\n        getDataRegionSizeColumns() {\n            return this.dataRegionSizeColumns;\n        }\n        getTotalCodewords() {\n            return this.totalCodewords;\n        }\n        getECBlocks() {\n            return this.ecBlocks;\n        }\n        /**\n         * <p>Deduces version information from Data Matrix dimensions.</p>\n         *\n         * @param numRows Number of rows in modules\n         * @param numColumns Number of columns in modules\n         * @return Version for a Data Matrix Code of those dimensions\n         * @throws FormatException if dimensions do correspond to a valid Data Matrix size\n         */\n        static getVersionForDimensions(numRows, numColumns) {\n            if ((numRows & 0x01) !== 0 || (numColumns & 0x01) !== 0) {\n                throw new FormatException();\n            }\n            for (let version of Version.VERSIONS) {\n                if (version.symbolSizeRows === numRows && version.symbolSizeColumns === numColumns) {\n                    return version;\n                }\n            }\n            throw new FormatException();\n        }\n        //  @Override\n        toString() {\n            return '' + this.versionNumber;\n        }\n        /**\n         * See ISO 16022:2006 5.5.1 Table 7\n         */\n        static buildVersions() {\n            return [\n                new Version(1, 10, 10, 8, 8, new ECBlocks(5, new ECB(1, 3))),\n                new Version(2, 12, 12, 10, 10, new ECBlocks(7, new ECB(1, 5))),\n                new Version(3, 14, 14, 12, 12, new ECBlocks(10, new ECB(1, 8))),\n                new Version(4, 16, 16, 14, 14, new ECBlocks(12, new ECB(1, 12))),\n                new Version(5, 18, 18, 16, 16, new ECBlocks(14, new ECB(1, 18))),\n                new Version(6, 20, 20, 18, 18, new ECBlocks(18, new ECB(1, 22))),\n                new Version(7, 22, 22, 20, 20, new ECBlocks(20, new ECB(1, 30))),\n                new Version(8, 24, 24, 22, 22, new ECBlocks(24, new ECB(1, 36))),\n                new Version(9, 26, 26, 24, 24, new ECBlocks(28, new ECB(1, 44))),\n                new Version(10, 32, 32, 14, 14, new ECBlocks(36, new ECB(1, 62))),\n                new Version(11, 36, 36, 16, 16, new ECBlocks(42, new ECB(1, 86))),\n                new Version(12, 40, 40, 18, 18, new ECBlocks(48, new ECB(1, 114))),\n                new Version(13, 44, 44, 20, 20, new ECBlocks(56, new ECB(1, 144))),\n                new Version(14, 48, 48, 22, 22, new ECBlocks(68, new ECB(1, 174))),\n                new Version(15, 52, 52, 24, 24, new ECBlocks(42, new ECB(2, 102))),\n                new Version(16, 64, 64, 14, 14, new ECBlocks(56, new ECB(2, 140))),\n                new Version(17, 72, 72, 16, 16, new ECBlocks(36, new ECB(4, 92))),\n                new Version(18, 80, 80, 18, 18, new ECBlocks(48, new ECB(4, 114))),\n                new Version(19, 88, 88, 20, 20, new ECBlocks(56, new ECB(4, 144))),\n                new Version(20, 96, 96, 22, 22, new ECBlocks(68, new ECB(4, 174))),\n                new Version(21, 104, 104, 24, 24, new ECBlocks(56, new ECB(6, 136))),\n                new Version(22, 120, 120, 18, 18, new ECBlocks(68, new ECB(6, 175))),\n                new Version(23, 132, 132, 20, 20, new ECBlocks(62, new ECB(8, 163))),\n                new Version(24, 144, 144, 22, 22, new ECBlocks(62, new ECB(8, 156), new ECB(2, 155))),\n                new Version(25, 8, 18, 6, 16, new ECBlocks(7, new ECB(1, 5))),\n                new Version(26, 8, 32, 6, 14, new ECBlocks(11, new ECB(1, 10))),\n                new Version(27, 12, 26, 10, 24, new ECBlocks(14, new ECB(1, 16))),\n                new Version(28, 12, 36, 10, 16, new ECBlocks(18, new ECB(1, 22))),\n                new Version(29, 16, 36, 14, 16, new ECBlocks(24, new ECB(1, 32))),\n                new Version(30, 16, 48, 14, 22, new ECBlocks(28, new ECB(1, 49)))\n            ];\n        }\n    }\n    Version.VERSIONS = Version.buildVersions();\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class BitMatrixParser {\n        /**\n         * @param bitMatrix {@link BitMatrix} to parse\n         * @throws FormatException if dimension is < 8 or > 144 or not 0 mod 2\n         */\n        constructor(bitMatrix) {\n            const dimension = bitMatrix.getHeight();\n            if (dimension < 8 || dimension > 144 || (dimension & 0x01) !== 0) {\n                throw new FormatException();\n            }\n            this.version = BitMatrixParser.readVersion(bitMatrix);\n            this.mappingBitMatrix = this.extractDataRegion(bitMatrix);\n            this.readMappingMatrix = new BitMatrix(this.mappingBitMatrix.getWidth(), this.mappingBitMatrix.getHeight());\n        }\n        getVersion() {\n            return this.version;\n        }\n        /**\n         * <p>Creates the version object based on the dimension of the original bit matrix from\n         * the datamatrix code.</p>\n         *\n         * <p>See ISO 16022:2006 Table 7 - ECC 200 symbol attributes</p>\n         *\n         * @param bitMatrix Original {@link BitMatrix} including alignment patterns\n         * @return {@link Version} encapsulating the Data Matrix Code's \"version\"\n         * @throws FormatException if the dimensions of the mapping matrix are not valid\n         * Data Matrix dimensions.\n         */\n        static readVersion(bitMatrix) {\n            const numRows = bitMatrix.getHeight();\n            const numColumns = bitMatrix.getWidth();\n            return Version.getVersionForDimensions(numRows, numColumns);\n        }\n        /**\n         * <p>Reads the bits in the {@link BitMatrix} representing the mapping matrix (No alignment patterns)\n         * in the correct order in order to reconstitute the codewords bytes contained within the\n         * Data Matrix Code.</p>\n         *\n         * @return bytes encoded within the Data Matrix Code\n         * @throws FormatException if the exact number of bytes expected is not read\n         */\n        readCodewords() {\n            const result = new Int8Array(this.version.getTotalCodewords());\n            let resultOffset = 0;\n            let row = 4;\n            let column = 0;\n            const numRows = this.mappingBitMatrix.getHeight();\n            const numColumns = this.mappingBitMatrix.getWidth();\n            let corner1Read = false;\n            let corner2Read = false;\n            let corner3Read = false;\n            let corner4Read = false;\n            // Read all of the codewords\n            do {\n                // Check the four corner cases\n                if ((row === numRows) && (column === 0) && !corner1Read) {\n                    result[resultOffset++] = this.readCorner1(numRows, numColumns) & 0xff;\n                    row -= 2;\n                    column += 2;\n                    corner1Read = true;\n                }\n                else if ((row === numRows - 2) && (column === 0) && ((numColumns & 0x03) !== 0) && !corner2Read) {\n                    result[resultOffset++] = this.readCorner2(numRows, numColumns) & 0xff;\n                    row -= 2;\n                    column += 2;\n                    corner2Read = true;\n                }\n                else if ((row === numRows + 4) && (column === 2) && ((numColumns & 0x07) === 0) && !corner3Read) {\n                    result[resultOffset++] = this.readCorner3(numRows, numColumns) & 0xff;\n                    row -= 2;\n                    column += 2;\n                    corner3Read = true;\n                }\n                else if ((row === numRows - 2) && (column === 0) && ((numColumns & 0x07) === 4) && !corner4Read) {\n                    result[resultOffset++] = this.readCorner4(numRows, numColumns) & 0xff;\n                    row -= 2;\n                    column += 2;\n                    corner4Read = true;\n                }\n                else {\n                    // Sweep upward diagonally to the right\n                    do {\n                        if ((row < numRows) && (column >= 0) && !this.readMappingMatrix.get(column, row)) {\n                            result[resultOffset++] = this.readUtah(row, column, numRows, numColumns) & 0xff;\n                        }\n                        row -= 2;\n                        column += 2;\n                    } while ((row >= 0) && (column < numColumns));\n                    row += 1;\n                    column += 3;\n                    // Sweep downward diagonally to the left\n                    do {\n                        if ((row >= 0) && (column < numColumns) && !this.readMappingMatrix.get(column, row)) {\n                            result[resultOffset++] = this.readUtah(row, column, numRows, numColumns) & 0xff;\n                        }\n                        row += 2;\n                        column -= 2;\n                    } while ((row < numRows) && (column >= 0));\n                    row += 3;\n                    column += 1;\n                }\n            } while ((row < numRows) || (column < numColumns));\n            if (resultOffset !== this.version.getTotalCodewords()) {\n                throw new FormatException();\n            }\n            return result;\n        }\n        /**\n         * <p>Reads a bit of the mapping matrix accounting for boundary wrapping.</p>\n         *\n         * @param row Row to read in the mapping matrix\n         * @param column Column to read in the mapping matrix\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return value of the given bit in the mapping matrix\n         */\n        readModule(row, column, numRows, numColumns) {\n            // Adjust the row and column indices based on boundary wrapping\n            if (row < 0) {\n                row += numRows;\n                column += 4 - ((numRows + 4) & 0x07);\n            }\n            if (column < 0) {\n                column += numColumns;\n                row += 4 - ((numColumns + 4) & 0x07);\n            }\n            this.readMappingMatrix.set(column, row);\n            return this.mappingBitMatrix.get(column, row);\n        }\n        /**\n         * <p>Reads the 8 bits of the standard Utah-shaped pattern.</p>\n         *\n         * <p>See ISO 16022:2006, 5.8.1 Figure 6</p>\n         *\n         * @param row Current row in the mapping matrix, anchored at the 8th bit (LSB) of the pattern\n         * @param column Current column in the mapping matrix, anchored at the 8th bit (LSB) of the pattern\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the utah shape\n         */\n        readUtah(row, column, numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(row - 2, column - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row - 2, column - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row - 1, column - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row - 1, column - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row - 1, column, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row, column - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row, column - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(row, column, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Reads the 8 bits of the special corner condition 1.</p>\n         *\n         * <p>See ISO 16022:2006, Figure F.3</p>\n         *\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the Corner condition 1\n         */\n        readCorner1(numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(2, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(3, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Reads the 8 bits of the special corner condition 2.</p>\n         *\n         * <p>See ISO 16022:2006, Figure F.4</p>\n         *\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the Corner condition 2\n         */\n        readCorner2(numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(numRows - 3, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 2, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 4, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 3, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Reads the 8 bits of the special corner condition 3.</p>\n         *\n         * <p>See ISO 16022:2006, Figure F.5</p>\n         *\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the Corner condition 3\n         */\n        readCorner3(numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 3, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 3, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Reads the 8 bits of the special corner condition 4.</p>\n         *\n         * <p>See ISO 16022:2006, Figure F.6</p>\n         *\n         * @param numRows Number of rows in the mapping matrix\n         * @param numColumns Number of columns in the mapping matrix\n         * @return byte from the Corner condition 4\n         */\n        readCorner4(numRows, numColumns) {\n            let currentByte = 0;\n            if (this.readModule(numRows - 3, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 2, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(numRows - 1, 0, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 2, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(0, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(1, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(2, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            currentByte <<= 1;\n            if (this.readModule(3, numColumns - 1, numRows, numColumns)) {\n                currentByte |= 1;\n            }\n            return currentByte;\n        }\n        /**\n         * <p>Extracts the data region from a {@link BitMatrix} that contains\n         * alignment patterns.</p>\n         *\n         * @param bitMatrix Original {@link BitMatrix} with alignment patterns\n         * @return BitMatrix that has the alignment patterns removed\n         */\n        extractDataRegion(bitMatrix) {\n            const symbolSizeRows = this.version.getSymbolSizeRows();\n            const symbolSizeColumns = this.version.getSymbolSizeColumns();\n            if (bitMatrix.getHeight() !== symbolSizeRows) {\n                throw new IllegalArgumentException('Dimension of bitMatrix must match the version size');\n            }\n            const dataRegionSizeRows = this.version.getDataRegionSizeRows();\n            const dataRegionSizeColumns = this.version.getDataRegionSizeColumns();\n            const numDataRegionsRow = symbolSizeRows / dataRegionSizeRows | 0;\n            const numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns | 0;\n            const sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;\n            const sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;\n            const bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionColumn, sizeDataRegionRow);\n            for (let dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {\n                const dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;\n                for (let dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {\n                    const dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns;\n                    for (let i = 0; i < dataRegionSizeRows; ++i) {\n                        const readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i;\n                        const writeRowOffset = dataRegionRowOffset + i;\n                        for (let j = 0; j < dataRegionSizeColumns; ++j) {\n                            const readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j;\n                            if (bitMatrix.get(readColumnOffset, readRowOffset)) {\n                                const writeColumnOffset = dataRegionColumnOffset + j;\n                                bitMatrixWithoutAlignment.set(writeColumnOffset, writeRowOffset);\n                            }\n                        }\n                    }\n                }\n            }\n            return bitMatrixWithoutAlignment;\n        }\n    }\n\n    /**\n     * <p>Encapsulates a block of data within a Data Matrix Code. Data Matrix Codes may split their data into\n     * multiple blocks, each of which is a unit of data and error-correction codewords. Each\n     * is represented by an instance of this class.</p>\n     *\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class DataBlock {\n        constructor(numDataCodewords, codewords) {\n            this.numDataCodewords = numDataCodewords;\n            this.codewords = codewords;\n        }\n        /**\n         * <p>When Data Matrix Codes use multiple data blocks, they actually interleave the bytes of each of them.\n         * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This\n         * method will separate the data into original blocks.</p>\n         *\n         * @param rawCodewords bytes as read directly from the Data Matrix Code\n         * @param version version of the Data Matrix Code\n         * @return DataBlocks containing original bytes, \"de-interleaved\" from representation in the\n         *         Data Matrix Code\n         */\n        static getDataBlocks(rawCodewords, version) {\n            // Figure out the number and size of data blocks used by this version\n            const ecBlocks = version.getECBlocks();\n            // First count the total number of data blocks\n            let totalBlocks = 0;\n            const ecBlockArray = ecBlocks.getECBlocks();\n            for (let ecBlock of ecBlockArray) {\n                totalBlocks += ecBlock.getCount();\n            }\n            // Now establish DataBlocks of the appropriate size and number of data codewords\n            const result = new Array(totalBlocks);\n            let numResultBlocks = 0;\n            for (let ecBlock of ecBlockArray) {\n                for (let i = 0; i < ecBlock.getCount(); i++) {\n                    const numDataCodewords = ecBlock.getDataCodewords();\n                    const numBlockCodewords = ecBlocks.getECCodewords() + numDataCodewords;\n                    result[numResultBlocks++] = new DataBlock(numDataCodewords, new Uint8Array(numBlockCodewords));\n                }\n            }\n            // All blocks have the same amount of data, except that the last n\n            // (where n may be 0) have 1 less byte. Figure out where these start.\n            // TODO(bbrown): There is only one case where there is a difference for Data Matrix for size 144\n            const longerBlocksTotalCodewords = result[0].codewords.length;\n            // int shorterBlocksTotalCodewords = longerBlocksTotalCodewords - 1;\n            const longerBlocksNumDataCodewords = longerBlocksTotalCodewords - ecBlocks.getECCodewords();\n            const shorterBlocksNumDataCodewords = longerBlocksNumDataCodewords - 1;\n            // The last elements of result may be 1 element shorter for 144 matrix\n            // first fill out as many elements as all of them have minus 1\n            let rawCodewordsOffset = 0;\n            for (let i = 0; i < shorterBlocksNumDataCodewords; i++) {\n                for (let j = 0; j < numResultBlocks; j++) {\n                    result[j].codewords[i] = rawCodewords[rawCodewordsOffset++];\n                }\n            }\n            // Fill out the last data block in the longer ones\n            const specialVersion = version.getVersionNumber() === 24;\n            const numLongerBlocks = specialVersion ? 8 : numResultBlocks;\n            for (let j = 0; j < numLongerBlocks; j++) {\n                result[j].codewords[longerBlocksNumDataCodewords - 1] = rawCodewords[rawCodewordsOffset++];\n            }\n            // Now add in error correction blocks\n            const max = result[0].codewords.length;\n            for (let i = longerBlocksNumDataCodewords; i < max; i++) {\n                for (let j = 0; j < numResultBlocks; j++) {\n                    const jOffset = specialVersion ? (j + 8) % numResultBlocks : j;\n                    const iOffset = specialVersion && jOffset > 7 ? i - 1 : i;\n                    result[jOffset].codewords[iOffset] = rawCodewords[rawCodewordsOffset++];\n                }\n            }\n            if (rawCodewordsOffset !== rawCodewords.length) {\n                throw new IllegalArgumentException();\n            }\n            return result;\n        }\n        getNumDataCodewords() {\n            return this.numDataCodewords;\n        }\n        getCodewords() {\n            return this.codewords;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>This provides an easy abstraction to read bits at a time from a sequence of bytes, where the\n     * number of bits read is not often a multiple of 8.</p>\n     *\n     * <p>This class is thread-safe but not reentrant -- unless the caller modifies the bytes array\n     * it passed in, in which case all bets are off.</p>\n     *\n     * @author Sean Owen\n     */\n    class BitSource {\n        /**\n         * @param bytes bytes from which this will read bits. Bits will be read from the first byte first.\n         * Bits are read within a byte from most-significant to least-significant bit.\n         */\n        constructor(bytes) {\n            this.bytes = bytes;\n            this.byteOffset = 0;\n            this.bitOffset = 0;\n        }\n        /**\n         * @return index of next bit in current byte which would be read by the next call to {@link #readBits(int)}.\n         */\n        getBitOffset() {\n            return this.bitOffset;\n        }\n        /**\n         * @return index of next byte in input byte array which would be read by the next call to {@link #readBits(int)}.\n         */\n        getByteOffset() {\n            return this.byteOffset;\n        }\n        /**\n         * @param numBits number of bits to read\n         * @return int representing the bits read. The bits will appear as the least-significant\n         *         bits of the int\n         * @throws IllegalArgumentException if numBits isn't in [1,32] or more than is available\n         */\n        readBits(numBits /*int*/) {\n            if (numBits < 1 || numBits > 32 || numBits > this.available()) {\n                throw new IllegalArgumentException('' + numBits);\n            }\n            let result = 0;\n            let bitOffset = this.bitOffset;\n            let byteOffset = this.byteOffset;\n            const bytes = this.bytes;\n            // First, read remainder from current byte\n            if (bitOffset > 0) {\n                const bitsLeft = 8 - bitOffset;\n                const toRead = numBits < bitsLeft ? numBits : bitsLeft;\n                const bitsToNotRead = bitsLeft - toRead;\n                const mask = (0xFF >> (8 - toRead)) << bitsToNotRead;\n                result = (bytes[byteOffset] & mask) >> bitsToNotRead;\n                numBits -= toRead;\n                bitOffset += toRead;\n                if (bitOffset === 8) {\n                    bitOffset = 0;\n                    byteOffset++;\n                }\n            }\n            // Next read whole bytes\n            if (numBits > 0) {\n                while (numBits >= 8) {\n                    result = (result << 8) | (bytes[byteOffset] & 0xFF);\n                    byteOffset++;\n                    numBits -= 8;\n                }\n                // Finally read a partial byte\n                if (numBits > 0) {\n                    const bitsToNotRead = 8 - numBits;\n                    const mask = (0xFF >> bitsToNotRead) << bitsToNotRead;\n                    result = (result << numBits) | ((bytes[byteOffset] & mask) >> bitsToNotRead);\n                    bitOffset += numBits;\n                }\n            }\n            this.bitOffset = bitOffset;\n            this.byteOffset = byteOffset;\n            return result;\n        }\n        /**\n         * @return number of bits that can be read successfully\n         */\n        available() {\n            return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset;\n        }\n    }\n\n    var Mode;\n    (function (Mode) {\n        Mode[Mode[\"PAD_ENCODE\"] = 0] = \"PAD_ENCODE\";\n        Mode[Mode[\"ASCII_ENCODE\"] = 1] = \"ASCII_ENCODE\";\n        Mode[Mode[\"C40_ENCODE\"] = 2] = \"C40_ENCODE\";\n        Mode[Mode[\"TEXT_ENCODE\"] = 3] = \"TEXT_ENCODE\";\n        Mode[Mode[\"ANSIX12_ENCODE\"] = 4] = \"ANSIX12_ENCODE\";\n        Mode[Mode[\"EDIFACT_ENCODE\"] = 5] = \"EDIFACT_ENCODE\";\n        Mode[Mode[\"BASE256_ENCODE\"] = 6] = \"BASE256_ENCODE\";\n    })(Mode || (Mode = {}));\n    /**\n     * <p>Data Matrix Codes can encode text as bits in one of several modes, and can use multiple modes\n     * in one Data Matrix Code. This class decodes the bits back into text.</p>\n     *\n     * <p>See ISO 16022:2006, 5.2.1 - 5.2.9.2</p>\n     *\n     * @author bbrown@google.com (Brian Brown)\n     * @author Sean Owen\n     */\n    class DecodedBitStreamParser {\n        static decode(bytes) {\n            const bits = new BitSource(bytes);\n            const result = new StringBuilder();\n            const resultTrailer = new StringBuilder();\n            const byteSegments = new Array();\n            let mode = Mode.ASCII_ENCODE;\n            do {\n                if (mode === Mode.ASCII_ENCODE) {\n                    mode = this.decodeAsciiSegment(bits, result, resultTrailer);\n                }\n                else {\n                    switch (mode) {\n                        case Mode.C40_ENCODE:\n                            this.decodeC40Segment(bits, result);\n                            break;\n                        case Mode.TEXT_ENCODE:\n                            this.decodeTextSegment(bits, result);\n                            break;\n                        case Mode.ANSIX12_ENCODE:\n                            this.decodeAnsiX12Segment(bits, result);\n                            break;\n                        case Mode.EDIFACT_ENCODE:\n                            this.decodeEdifactSegment(bits, result);\n                            break;\n                        case Mode.BASE256_ENCODE:\n                            this.decodeBase256Segment(bits, result, byteSegments);\n                            break;\n                        default:\n                            throw new FormatException();\n                    }\n                    mode = Mode.ASCII_ENCODE;\n                }\n            } while (mode !== Mode.PAD_ENCODE && bits.available() > 0);\n            if (resultTrailer.length() > 0) {\n                result.append(resultTrailer.toString());\n            }\n            return new DecoderResult(bytes, result.toString(), byteSegments.length === 0 ? null : byteSegments, null);\n        }\n        /**\n         * See ISO 16022:2006, 5.2.3 and Annex C, Table C.2\n         */\n        static decodeAsciiSegment(bits, result, resultTrailer) {\n            let upperShift = false;\n            do {\n                let oneByte = bits.readBits(8);\n                if (oneByte === 0) {\n                    throw new FormatException();\n                }\n                else if (oneByte <= 128) { // ASCII data (ASCII value + 1)\n                    if (upperShift) {\n                        oneByte += 128;\n                        // upperShift = false;\n                    }\n                    result.append(String.fromCharCode(oneByte - 1));\n                    return Mode.ASCII_ENCODE;\n                }\n                else if (oneByte === 129) { // Pad\n                    return Mode.PAD_ENCODE;\n                }\n                else if (oneByte <= 229) { // 2-digit data 00-99 (Numeric Value + 130)\n                    const value = oneByte - 130;\n                    if (value < 10) { // pad with '0' for single digit values\n                        result.append('0');\n                    }\n                    result.append('' + value);\n                }\n                else {\n                    switch (oneByte) {\n                        case 230: // Latch to C40 encodation\n                            return Mode.C40_ENCODE;\n                        case 231: // Latch to Base 256 encodation\n                            return Mode.BASE256_ENCODE;\n                        case 232: // FNC1\n                            result.append(String.fromCharCode(29)); // translate as ASCII 29\n                            break;\n                        case 233: // Structured Append\n                        case 234: // Reader Programming\n                            // Ignore these symbols for now\n                            // throw ReaderException.getInstance();\n                            break;\n                        case 235: // Upper Shift (shift to Extended ASCII)\n                            upperShift = true;\n                            break;\n                        case 236: // 05 Macro\n                            result.append('[)>\\u001E05\\u001D');\n                            resultTrailer.insert(0, '\\u001E\\u0004');\n                            break;\n                        case 237: // 06 Macro\n                            result.append('[)>\\u001E06\\u001D');\n                            resultTrailer.insert(0, '\\u001E\\u0004');\n                            break;\n                        case 238: // Latch to ANSI X12 encodation\n                            return Mode.ANSIX12_ENCODE;\n                        case 239: // Latch to Text encodation\n                            return Mode.TEXT_ENCODE;\n                        case 240: // Latch to EDIFACT encodation\n                            return Mode.EDIFACT_ENCODE;\n                        case 241: // ECI Character\n                            // TODO(bbrown): I think we need to support ECI\n                            // throw ReaderException.getInstance();\n                            // Ignore this symbol for now\n                            break;\n                        default:\n                            // Not to be used in ASCII encodation\n                            // but work around encoders that end with 254, latch back to ASCII\n                            if (oneByte !== 254 || bits.available() !== 0) {\n                                throw new FormatException();\n                            }\n                            break;\n                    }\n                }\n            } while (bits.available() > 0);\n            return Mode.ASCII_ENCODE;\n        }\n        /**\n         * See ISO 16022:2006, 5.2.5 and Annex C, Table C.1\n         */\n        static decodeC40Segment(bits, result) {\n            // Three C40 values are encoded in a 16-bit value as\n            // (1600 * C1) + (40 * C2) + C3 + 1\n            // TODO(bbrown): The Upper Shift with C40 doesn't work in the 4 value scenario all the time\n            let upperShift = false;\n            const cValues = [];\n            let shift = 0;\n            do {\n                // If there is only one byte left then it will be encoded as ASCII\n                if (bits.available() === 8) {\n                    return;\n                }\n                const firstByte = bits.readBits(8);\n                if (firstByte === 254) { // Unlatch codeword\n                    return;\n                }\n                this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n                for (let i = 0; i < 3; i++) {\n                    const cValue = cValues[i];\n                    switch (shift) {\n                        case 0:\n                            if (cValue < 3) {\n                                shift = cValue + 1;\n                            }\n                            else if (cValue < this.C40_BASIC_SET_CHARS.length) {\n                                const c40char = this.C40_BASIC_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(c40char.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(c40char);\n                                }\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case 1:\n                            if (upperShift) {\n                                result.append(String.fromCharCode(cValue + 128));\n                                upperShift = false;\n                            }\n                            else {\n                                result.append(String.fromCharCode(cValue));\n                            }\n                            shift = 0;\n                            break;\n                        case 2:\n                            if (cValue < this.C40_SHIFT2_SET_CHARS.length) {\n                                const c40char = this.C40_SHIFT2_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(c40char.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(c40char);\n                                }\n                            }\n                            else {\n                                switch (cValue) {\n                                    case 27: // FNC1\n                                        result.append(String.fromCharCode(29)); // translate as ASCII 29\n                                        break;\n                                    case 30: // Upper Shift\n                                        upperShift = true;\n                                        break;\n                                    default:\n                                        throw new FormatException();\n                                }\n                            }\n                            shift = 0;\n                            break;\n                        case 3:\n                            if (upperShift) {\n                                result.append(String.fromCharCode(cValue + 224));\n                                upperShift = false;\n                            }\n                            else {\n                                result.append(String.fromCharCode(cValue + 96));\n                            }\n                            shift = 0;\n                            break;\n                        default:\n                            throw new FormatException();\n                    }\n                }\n            } while (bits.available() > 0);\n        }\n        /**\n         * See ISO 16022:2006, 5.2.6 and Annex C, Table C.2\n         */\n        static decodeTextSegment(bits, result) {\n            // Three Text values are encoded in a 16-bit value as\n            // (1600 * C1) + (40 * C2) + C3 + 1\n            // TODO(bbrown): The Upper Shift with Text doesn't work in the 4 value scenario all the time\n            let upperShift = false;\n            let cValues = [];\n            let shift = 0;\n            do {\n                // If there is only one byte left then it will be encoded as ASCII\n                if (bits.available() === 8) {\n                    return;\n                }\n                const firstByte = bits.readBits(8);\n                if (firstByte === 254) { // Unlatch codeword\n                    return;\n                }\n                this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n                for (let i = 0; i < 3; i++) {\n                    const cValue = cValues[i];\n                    switch (shift) {\n                        case 0:\n                            if (cValue < 3) {\n                                shift = cValue + 1;\n                            }\n                            else if (cValue < this.TEXT_BASIC_SET_CHARS.length) {\n                                const textChar = this.TEXT_BASIC_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(textChar);\n                                }\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        case 1:\n                            if (upperShift) {\n                                result.append(String.fromCharCode(cValue + 128));\n                                upperShift = false;\n                            }\n                            else {\n                                result.append(String.fromCharCode(cValue));\n                            }\n                            shift = 0;\n                            break;\n                        case 2:\n                            // Shift 2 for Text is the same encoding as C40\n                            if (cValue < this.TEXT_SHIFT2_SET_CHARS.length) {\n                                const textChar = this.TEXT_SHIFT2_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(textChar);\n                                }\n                            }\n                            else {\n                                switch (cValue) {\n                                    case 27: // FNC1\n                                        result.append(String.fromCharCode(29)); // translate as ASCII 29\n                                        break;\n                                    case 30: // Upper Shift\n                                        upperShift = true;\n                                        break;\n                                    default:\n                                        throw new FormatException();\n                                }\n                            }\n                            shift = 0;\n                            break;\n                        case 3:\n                            if (cValue < this.TEXT_SHIFT3_SET_CHARS.length) {\n                                const textChar = this.TEXT_SHIFT3_SET_CHARS[cValue];\n                                if (upperShift) {\n                                    result.append(String.fromCharCode(textChar.charCodeAt(0) + 128));\n                                    upperShift = false;\n                                }\n                                else {\n                                    result.append(textChar);\n                                }\n                                shift = 0;\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                        default:\n                            throw new FormatException();\n                    }\n                }\n            } while (bits.available() > 0);\n        }\n        /**\n         * See ISO 16022:2006, 5.2.7\n         */\n        static decodeAnsiX12Segment(bits, result) {\n            // Three ANSI X12 values are encoded in a 16-bit value as\n            // (1600 * C1) + (40 * C2) + C3 + 1\n            const cValues = [];\n            do {\n                // If there is only one byte left then it will be encoded as ASCII\n                if (bits.available() === 8) {\n                    return;\n                }\n                const firstByte = bits.readBits(8);\n                if (firstByte === 254) { // Unlatch codeword\n                    return;\n                }\n                this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n                for (let i = 0; i < 3; i++) {\n                    const cValue = cValues[i];\n                    switch (cValue) {\n                        case 0: // X12 segment terminator <CR>\n                            result.append('\\r');\n                            break;\n                        case 1: // X12 segment separator *\n                            result.append('*');\n                            break;\n                        case 2: // X12 sub-element separator >\n                            result.append('>');\n                            break;\n                        case 3: // space\n                            result.append(' ');\n                            break;\n                        default:\n                            if (cValue < 14) { // 0 - 9\n                                result.append(String.fromCharCode(cValue + 44));\n                            }\n                            else if (cValue < 40) { // A - Z\n                                result.append(String.fromCharCode(cValue + 51));\n                            }\n                            else {\n                                throw new FormatException();\n                            }\n                            break;\n                    }\n                }\n            } while (bits.available() > 0);\n        }\n        static parseTwoBytes(firstByte, secondByte, result) {\n            let fullBitValue = (firstByte << 8) + secondByte - 1;\n            let temp = Math.floor(fullBitValue / 1600);\n            result[0] = temp;\n            fullBitValue -= temp * 1600;\n            temp = Math.floor(fullBitValue / 40);\n            result[1] = temp;\n            result[2] = fullBitValue - temp * 40;\n        }\n        /**\n         * See ISO 16022:2006, 5.2.8 and Annex C Table C.3\n         */\n        static decodeEdifactSegment(bits, result) {\n            do {\n                // If there is only two or less bytes left then it will be encoded as ASCII\n                if (bits.available() <= 16) {\n                    return;\n                }\n                for (let i = 0; i < 4; i++) {\n                    let edifactValue = bits.readBits(6);\n                    // Check for the unlatch character\n                    if (edifactValue === 0x1F) { // 011111\n                        // Read rest of byte, which should be 0, and stop\n                        const bitsLeft = 8 - bits.getBitOffset();\n                        if (bitsLeft !== 8) {\n                            bits.readBits(bitsLeft);\n                        }\n                        return;\n                    }\n                    if ((edifactValue & 0x20) === 0) { // no 1 in the leading (6th) bit\n                        edifactValue |= 0x40; // Add a leading 01 to the 6 bit binary value\n                    }\n                    result.append(String.fromCharCode(edifactValue));\n                }\n            } while (bits.available() > 0);\n        }\n        /**\n         * See ISO 16022:2006, 5.2.9 and Annex B, B.2\n         */\n        static decodeBase256Segment(bits, result, byteSegments) {\n            // Figure out how long the Base 256 Segment is.\n            let codewordPosition = 1 + bits.getByteOffset(); // position is 1-indexed\n            const d1 = this.unrandomize255State(bits.readBits(8), codewordPosition++);\n            let count;\n            if (d1 === 0) { // Read the remainder of the symbol\n                count = bits.available() / 8 | 0;\n            }\n            else if (d1 < 250) {\n                count = d1;\n            }\n            else {\n                count = 250 * (d1 - 249) + this.unrandomize255State(bits.readBits(8), codewordPosition++);\n            }\n            // We're seeing NegativeArraySizeException errors from users.\n            if (count < 0) {\n                throw new FormatException();\n            }\n            const bytes = new Uint8Array(count);\n            for (let i = 0; i < count; i++) {\n                // Have seen this particular error in the wild, such as at\n                // http://www.bcgen.com/demo/IDAutomationStreamingDataMatrix.aspx?MODE=3&D=Fred&PFMT=3&PT=F&X=0.3&O=0&LM=0.2\n                if (bits.available() < 8) {\n                    throw new FormatException();\n                }\n                bytes[i] = this.unrandomize255State(bits.readBits(8), codewordPosition++);\n            }\n            byteSegments.push(bytes);\n            try {\n                result.append(StringEncoding.decode(bytes, StringUtils.ISO88591));\n            }\n            catch (uee) {\n                throw new IllegalStateException('Platform does not support required encoding: ' + uee.message);\n            }\n        }\n        /**\n         * See ISO 16022:2006, Annex B, B.2\n         */\n        static unrandomize255State(randomizedBase256Codeword, base256CodewordPosition) {\n            const pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1;\n            const tempVariable = randomizedBase256Codeword - pseudoRandomNumber;\n            return tempVariable >= 0 ? tempVariable : tempVariable + 256;\n        }\n    }\n    /**\n     * See ISO 16022:2006, Annex C Table C.1\n     * The C40 Basic Character Set (*'s used for placeholders for the shift values)\n     */\n    DecodedBitStreamParser.C40_BASIC_SET_CHARS = [\n        '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',\n        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n    ];\n    DecodedBitStreamParser.C40_SHIFT2_SET_CHARS = [\n        '!', '\"', '#', '$', '%', '&', '\\'', '(', ')', '*', '+', ',', '-', '.',\n        '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\\\', ']', '^', '_'\n    ];\n    /**\n     * See ISO 16022:2006, Annex C Table C.2\n     * The Text Basic Character Set (*'s used for placeholders for the shift values)\n     */\n    DecodedBitStreamParser.TEXT_BASIC_SET_CHARS = [\n        '*', '*', '*', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n        'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',\n        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'\n    ];\n    // Shift 2 for Text is the same encoding as C40\n    DecodedBitStreamParser.TEXT_SHIFT2_SET_CHARS = DecodedBitStreamParser.C40_SHIFT2_SET_CHARS;\n    DecodedBitStreamParser.TEXT_SHIFT3_SET_CHARS = [\n        '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',\n        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~', String.fromCharCode(127)\n    ];\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>The main class which implements Data Matrix Code decoding -- as opposed to locating and extracting\n     * the Data Matrix Code from an image.</p>\n     *\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class Decoder$1 {\n        constructor() {\n            this.rsDecoder = new ReedSolomonDecoder(GenericGF.DATA_MATRIX_FIELD_256);\n        }\n        /**\n         * <p>Decodes a Data Matrix Code represented as a {@link BitMatrix}. A 1 or \"true\" is taken\n         * to mean a black module.</p>\n         *\n         * @param bits booleans representing white/black Data Matrix Code modules\n         * @return text and bytes encoded within the Data Matrix Code\n         * @throws FormatException if the Data Matrix Code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        decode(bits) {\n            // Construct a parser and read version, error-correction level\n            const parser = new BitMatrixParser(bits);\n            const version = parser.getVersion();\n            // Read codewords\n            const codewords = parser.readCodewords();\n            // Separate into data blocks\n            const dataBlocks = DataBlock.getDataBlocks(codewords, version);\n            // Count total number of data bytes\n            let totalBytes = 0;\n            for (let db of dataBlocks) {\n                totalBytes += db.getNumDataCodewords();\n            }\n            const resultBytes = new Uint8Array(totalBytes);\n            const dataBlocksCount = dataBlocks.length;\n            // Error-correct and copy data blocks together into a stream of bytes\n            for (let j = 0; j < dataBlocksCount; j++) {\n                const dataBlock = dataBlocks[j];\n                const codewordBytes = dataBlock.getCodewords();\n                const numDataCodewords = dataBlock.getNumDataCodewords();\n                this.correctErrors(codewordBytes, numDataCodewords);\n                for (let i = 0; i < numDataCodewords; i++) {\n                    // De-interlace data blocks.\n                    resultBytes[i * dataBlocksCount + j] = codewordBytes[i];\n                }\n            }\n            // Decode the contents of that stream of bytes\n            return DecodedBitStreamParser.decode(resultBytes);\n        }\n        /**\n         * <p>Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n         * correct the errors in-place using Reed-Solomon error correction.</p>\n         *\n         * @param codewordBytes data and error correction codewords\n         * @param numDataCodewords number of codewords that are data bytes\n         * @throws ChecksumException if error correction fails\n         */\n        correctErrors(codewordBytes, numDataCodewords) {\n            // const numCodewords = codewordBytes.length;\n            // First read into an array of ints\n            const codewordsInts = new Int32Array(codewordBytes);\n            // for (let i = 0; i < numCodewords; i++) {\n            //   codewordsInts[i] = codewordBytes[i] & 0xFF;\n            // }\n            try {\n                this.rsDecoder.decode(codewordsInts, codewordBytes.length - numDataCodewords);\n            }\n            catch (ignored /* ReedSolomonException */) {\n                throw new ChecksumException();\n            }\n            // Copy back into array of bytes -- only need to worry about the bytes that were data\n            // We don't care about errors in the error-correction codewords\n            for (let i = 0; i < numDataCodewords; i++) {\n                codewordBytes[i] = codewordsInts[i];\n            }\n        }\n    }\n\n    /**\n     * <p>Encapsulates logic that can detect a Data Matrix Code in an image, even if the Data Matrix Code\n     * is rotated or skewed, or partially obscured.</p>\n     *\n     * @author Sean Owen\n     */\n    class Detector$1 {\n        constructor(image) {\n            this.image = image;\n            this.rectangleDetector = new WhiteRectangleDetector(this.image);\n        }\n        /**\n         * <p>Detects a Data Matrix Code in an image.</p>\n         *\n         * @return {@link DetectorResult} encapsulating results of detecting a Data Matrix Code\n         * @throws NotFoundException if no Data Matrix Code can be found\n         */\n        detect() {\n            const cornerPoints = this.rectangleDetector.detect();\n            let points = this.detectSolid1(cornerPoints);\n            points = this.detectSolid2(points);\n            points[3] = this.correctTopRight(points);\n            if (!points[3]) {\n                throw new NotFoundException();\n            }\n            points = this.shiftToModuleCenter(points);\n            const topLeft = points[0];\n            const bottomLeft = points[1];\n            const bottomRight = points[2];\n            const topRight = points[3];\n            let dimensionTop = this.transitionsBetween(topLeft, topRight) + 1;\n            let dimensionRight = this.transitionsBetween(bottomRight, topRight) + 1;\n            if ((dimensionTop & 0x01) === 1) {\n                dimensionTop += 1;\n            }\n            if ((dimensionRight & 0x01) === 1) {\n                dimensionRight += 1;\n            }\n            if (4 * dimensionTop < 7 * dimensionRight && 4 * dimensionRight < 7 * dimensionTop) {\n                // The matrix is square\n                dimensionTop = dimensionRight = Math.max(dimensionTop, dimensionRight);\n            }\n            let bits = Detector$1.sampleGrid(this.image, topLeft, bottomLeft, bottomRight, topRight, dimensionTop, dimensionRight);\n            return new DetectorResult(bits, [topLeft, bottomLeft, bottomRight, topRight]);\n        }\n        static shiftPoint(point, to, div) {\n            let x = (to.getX() - point.getX()) / (div + 1);\n            let y = (to.getY() - point.getY()) / (div + 1);\n            return new ResultPoint(point.getX() + x, point.getY() + y);\n        }\n        static moveAway(point, fromX, fromY) {\n            let x = point.getX();\n            let y = point.getY();\n            if (x < fromX) {\n                x -= 1;\n            }\n            else {\n                x += 1;\n            }\n            if (y < fromY) {\n                y -= 1;\n            }\n            else {\n                y += 1;\n            }\n            return new ResultPoint(x, y);\n        }\n        /**\n         * Detect a solid side which has minimum transition.\n         */\n        detectSolid1(cornerPoints) {\n            // 0  2\n            // 1  3\n            let pointA = cornerPoints[0];\n            let pointB = cornerPoints[1];\n            let pointC = cornerPoints[3];\n            let pointD = cornerPoints[2];\n            let trAB = this.transitionsBetween(pointA, pointB);\n            let trBC = this.transitionsBetween(pointB, pointC);\n            let trCD = this.transitionsBetween(pointC, pointD);\n            let trDA = this.transitionsBetween(pointD, pointA);\n            // 0..3\n            // :  :\n            // 1--2\n            let min = trAB;\n            let points = [pointD, pointA, pointB, pointC];\n            if (min > trBC) {\n                min = trBC;\n                points[0] = pointA;\n                points[1] = pointB;\n                points[2] = pointC;\n                points[3] = pointD;\n            }\n            if (min > trCD) {\n                min = trCD;\n                points[0] = pointB;\n                points[1] = pointC;\n                points[2] = pointD;\n                points[3] = pointA;\n            }\n            if (min > trDA) {\n                points[0] = pointC;\n                points[1] = pointD;\n                points[2] = pointA;\n                points[3] = pointB;\n            }\n            return points;\n        }\n        /**\n         * Detect a second solid side next to first solid side.\n         */\n        detectSolid2(points) {\n            // A..D\n            // :  :\n            // B--C\n            let pointA = points[0];\n            let pointB = points[1];\n            let pointC = points[2];\n            let pointD = points[3];\n            // Transition detection on the edge is not stable.\n            // To safely detect, shift the points to the module center.\n            let tr = this.transitionsBetween(pointA, pointD);\n            let pointBs = Detector$1.shiftPoint(pointB, pointC, (tr + 1) * 4);\n            let pointCs = Detector$1.shiftPoint(pointC, pointB, (tr + 1) * 4);\n            let trBA = this.transitionsBetween(pointBs, pointA);\n            let trCD = this.transitionsBetween(pointCs, pointD);\n            // 0..3\n            // |  :\n            // 1--2\n            if (trBA < trCD) {\n                // solid sides: A-B-C\n                points[0] = pointA;\n                points[1] = pointB;\n                points[2] = pointC;\n                points[3] = pointD;\n            }\n            else {\n                // solid sides: B-C-D\n                points[0] = pointB;\n                points[1] = pointC;\n                points[2] = pointD;\n                points[3] = pointA;\n            }\n            return points;\n        }\n        /**\n         * Calculates the corner position of the white top right module.\n         */\n        correctTopRight(points) {\n            // A..D\n            // |  :\n            // B--C\n            let pointA = points[0];\n            let pointB = points[1];\n            let pointC = points[2];\n            let pointD = points[3];\n            // shift points for safe transition detection.\n            let trTop = this.transitionsBetween(pointA, pointD);\n            let trRight = this.transitionsBetween(pointB, pointD);\n            let pointAs = Detector$1.shiftPoint(pointA, pointB, (trRight + 1) * 4);\n            let pointCs = Detector$1.shiftPoint(pointC, pointB, (trTop + 1) * 4);\n            trTop = this.transitionsBetween(pointAs, pointD);\n            trRight = this.transitionsBetween(pointCs, pointD);\n            let candidate1 = new ResultPoint(pointD.getX() + (pointC.getX() - pointB.getX()) / (trTop + 1), pointD.getY() + (pointC.getY() - pointB.getY()) / (trTop + 1));\n            let candidate2 = new ResultPoint(pointD.getX() + (pointA.getX() - pointB.getX()) / (trRight + 1), pointD.getY() + (pointA.getY() - pointB.getY()) / (trRight + 1));\n            if (!this.isValid(candidate1)) {\n                if (this.isValid(candidate2)) {\n                    return candidate2;\n                }\n                return null;\n            }\n            if (!this.isValid(candidate2)) {\n                return candidate1;\n            }\n            let sumc1 = this.transitionsBetween(pointAs, candidate1) + this.transitionsBetween(pointCs, candidate1);\n            let sumc2 = this.transitionsBetween(pointAs, candidate2) + this.transitionsBetween(pointCs, candidate2);\n            if (sumc1 > sumc2) {\n                return candidate1;\n            }\n            else {\n                return candidate2;\n            }\n        }\n        /**\n         * Shift the edge points to the module center.\n         */\n        shiftToModuleCenter(points) {\n            // A..D\n            // |  :\n            // B--C\n            let pointA = points[0];\n            let pointB = points[1];\n            let pointC = points[2];\n            let pointD = points[3];\n            // calculate pseudo dimensions\n            let dimH = this.transitionsBetween(pointA, pointD) + 1;\n            let dimV = this.transitionsBetween(pointC, pointD) + 1;\n            // shift points for safe dimension detection\n            let pointAs = Detector$1.shiftPoint(pointA, pointB, dimV * 4);\n            let pointCs = Detector$1.shiftPoint(pointC, pointB, dimH * 4);\n            //  calculate more precise dimensions\n            dimH = this.transitionsBetween(pointAs, pointD) + 1;\n            dimV = this.transitionsBetween(pointCs, pointD) + 1;\n            if ((dimH & 0x01) === 1) {\n                dimH += 1;\n            }\n            if ((dimV & 0x01) === 1) {\n                dimV += 1;\n            }\n            // WhiteRectangleDetector returns points inside of the rectangle.\n            // I want points on the edges.\n            let centerX = (pointA.getX() + pointB.getX() + pointC.getX() + pointD.getX()) / 4;\n            let centerY = (pointA.getY() + pointB.getY() + pointC.getY() + pointD.getY()) / 4;\n            pointA = Detector$1.moveAway(pointA, centerX, centerY);\n            pointB = Detector$1.moveAway(pointB, centerX, centerY);\n            pointC = Detector$1.moveAway(pointC, centerX, centerY);\n            pointD = Detector$1.moveAway(pointD, centerX, centerY);\n            let pointBs;\n            let pointDs;\n            // shift points to the center of each modules\n            pointAs = Detector$1.shiftPoint(pointA, pointB, dimV * 4);\n            pointAs = Detector$1.shiftPoint(pointAs, pointD, dimH * 4);\n            pointBs = Detector$1.shiftPoint(pointB, pointA, dimV * 4);\n            pointBs = Detector$1.shiftPoint(pointBs, pointC, dimH * 4);\n            pointCs = Detector$1.shiftPoint(pointC, pointD, dimV * 4);\n            pointCs = Detector$1.shiftPoint(pointCs, pointB, dimH * 4);\n            pointDs = Detector$1.shiftPoint(pointD, pointC, dimV * 4);\n            pointDs = Detector$1.shiftPoint(pointDs, pointA, dimH * 4);\n            return [pointAs, pointBs, pointCs, pointDs];\n        }\n        isValid(p) {\n            return p.getX() >= 0 && p.getX() < this.image.getWidth() && p.getY() > 0 && p.getY() < this.image.getHeight();\n        }\n        static sampleGrid(image, topLeft, bottomLeft, bottomRight, topRight, dimensionX, dimensionY) {\n            const sampler = GridSamplerInstance.getInstance();\n            return sampler.sampleGrid(image, dimensionX, dimensionY, 0.5, 0.5, dimensionX - 0.5, 0.5, dimensionX - 0.5, dimensionY - 0.5, 0.5, dimensionY - 0.5, topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRight.getX(), bottomRight.getY(), bottomLeft.getX(), bottomLeft.getY());\n        }\n        /**\n         * Counts the number of black/white transitions between two points, using something like Bresenham's algorithm.\n         */\n        transitionsBetween(from, to) {\n            // See QR Code Detector, sizeOfBlackWhiteBlackRun()\n            let fromX = Math.trunc(from.getX());\n            let fromY = Math.trunc(from.getY());\n            let toX = Math.trunc(to.getX());\n            let toY = Math.trunc(to.getY());\n            let steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);\n            if (steep) {\n                let temp = fromX;\n                fromX = fromY;\n                fromY = temp;\n                temp = toX;\n                toX = toY;\n                toY = temp;\n            }\n            let dx = Math.abs(toX - fromX);\n            let dy = Math.abs(toY - fromY);\n            let error = -dx / 2;\n            let ystep = fromY < toY ? 1 : -1;\n            let xstep = fromX < toX ? 1 : -1;\n            let transitions = 0;\n            let inBlack = this.image.get(steep ? fromY : fromX, steep ? fromX : fromY);\n            for (let x = fromX, y = fromY; x !== toX; x += xstep) {\n                let isBlack = this.image.get(steep ? y : x, steep ? x : y);\n                if (isBlack !== inBlack) {\n                    transitions++;\n                    inBlack = isBlack;\n                }\n                error += dy;\n                if (error > 0) {\n                    if (y === toY) {\n                        break;\n                    }\n                    y += ystep;\n                    error -= dx;\n                }\n            }\n            return transitions;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This implementation can detect and decode Data Matrix codes in an image.\n     *\n     * @author bbrown@google.com (Brian Brown)\n     */\n    class DataMatrixReader {\n        constructor() {\n            this.decoder = new Decoder$1();\n        }\n        /**\n         * Locates and decodes a Data Matrix code in an image.\n         *\n         * @return a String representing the content encoded by the Data Matrix code\n         * @throws NotFoundException if a Data Matrix code cannot be found\n         * @throws FormatException if a Data Matrix code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        // @Override\n        // public Result decode(BinaryBitmap image) throws NotFoundException, ChecksumException, FormatException {\n        //   return decode(image, null);\n        // }\n        // @Override\n        decode(image, hints = null) {\n            let decoderResult;\n            let points;\n            if (hints != null && hints.has(DecodeHintType$1.PURE_BARCODE)) {\n                const bits = DataMatrixReader.extractPureBits(image.getBlackMatrix());\n                decoderResult = this.decoder.decode(bits);\n                points = DataMatrixReader.NO_POINTS;\n            }\n            else {\n                const detectorResult = new Detector$1(image.getBlackMatrix()).detect();\n                decoderResult = this.decoder.decode(detectorResult.getBits());\n                points = detectorResult.getPoints();\n            }\n            const rawBytes = decoderResult.getRawBytes();\n            const result = new Result(decoderResult.getText(), rawBytes, 8 * rawBytes.length, points, BarcodeFormat$1.DATA_MATRIX, System.currentTimeMillis());\n            const byteSegments = decoderResult.getByteSegments();\n            if (byteSegments != null) {\n                result.putMetadata(ResultMetadataType$1.BYTE_SEGMENTS, byteSegments);\n            }\n            const ecLevel = decoderResult.getECLevel();\n            if (ecLevel != null) {\n                result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, ecLevel);\n            }\n            return result;\n        }\n        // @Override\n        reset() {\n            // do nothing\n        }\n        /**\n         * This method detects a code in a \"pure\" image -- that is, pure monochrome image\n         * which contains only an unrotated, unskewed, image of a code, with some white border\n         * around it. This is a specialized method that works exceptionally fast in this special\n         * case.\n         *\n         * @see com.google.zxing.qrcode.QRCodeReader#extractPureBits(BitMatrix)\n         */\n        static extractPureBits(image) {\n            const leftTopBlack = image.getTopLeftOnBit();\n            const rightBottomBlack = image.getBottomRightOnBit();\n            if (leftTopBlack == null || rightBottomBlack == null) {\n                throw new NotFoundException();\n            }\n            const moduleSize = this.moduleSize(leftTopBlack, image);\n            let top = leftTopBlack[1];\n            const bottom = rightBottomBlack[1];\n            let left = leftTopBlack[0];\n            const right = rightBottomBlack[0];\n            const matrixWidth = (right - left + 1) / moduleSize;\n            const matrixHeight = (bottom - top + 1) / moduleSize;\n            if (matrixWidth <= 0 || matrixHeight <= 0) {\n                throw new NotFoundException();\n            }\n            // Push in the \"border\" by half the module width so that we start\n            // sampling in the middle of the module. Just in case the image is a\n            // little off, this will help recover.\n            const nudge = moduleSize / 2;\n            top += nudge;\n            left += nudge;\n            // Now just read off the bits\n            const bits = new BitMatrix(matrixWidth, matrixHeight);\n            for (let y = 0; y < matrixHeight; y++) {\n                const iOffset = top + y * moduleSize;\n                for (let x = 0; x < matrixWidth; x++) {\n                    if (image.get(left + x * moduleSize, iOffset)) {\n                        bits.set(x, y);\n                    }\n                }\n            }\n            return bits;\n        }\n        static moduleSize(leftTopBlack, image) {\n            const width = image.getWidth();\n            let x = leftTopBlack[0];\n            const y = leftTopBlack[1];\n            while (x < width && image.get(x, y)) {\n                x++;\n            }\n            if (x === width) {\n                throw new NotFoundException();\n            }\n            const moduleSize = x - leftTopBlack[0];\n            if (moduleSize === 0) {\n                throw new NotFoundException();\n            }\n            return moduleSize;\n        }\n    }\n    DataMatrixReader.NO_POINTS = [];\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * QR Code reader to use from browser.\n     */\n    class BrowserDatamatrixCodeReader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserQRCodeReader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         */\n        constructor(timeBetweenScansMillis = 500) {\n            super(new DataMatrixReader(), timeBetweenScansMillis);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    var ErrorCorrectionLevelValues;\n    (function (ErrorCorrectionLevelValues) {\n        ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"L\"] = 0] = \"L\";\n        ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"M\"] = 1] = \"M\";\n        ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"Q\"] = 2] = \"Q\";\n        ErrorCorrectionLevelValues[ErrorCorrectionLevelValues[\"H\"] = 3] = \"H\";\n    })(ErrorCorrectionLevelValues || (ErrorCorrectionLevelValues = {}));\n    /**\n     * <p>See ISO 18004:2006, 6.5.1. This enum encapsulates the four error correction levels\n     * defined by the QR code standard.</p>\n     *\n     * @author Sean Owen\n     */\n    class ErrorCorrectionLevel {\n        constructor(value, stringValue, bits /*int*/) {\n            this.value = value;\n            this.stringValue = stringValue;\n            this.bits = bits;\n            ErrorCorrectionLevel.FOR_BITS.set(bits, this);\n            ErrorCorrectionLevel.FOR_VALUE.set(value, this);\n        }\n        getValue() {\n            return this.value;\n        }\n        getBits() {\n            return this.bits;\n        }\n        static fromString(s) {\n            switch (s) {\n                case 'L': return ErrorCorrectionLevel.L;\n                case 'M': return ErrorCorrectionLevel.M;\n                case 'Q': return ErrorCorrectionLevel.Q;\n                case 'H': return ErrorCorrectionLevel.H;\n                default: throw new ArgumentException(s + 'not available');\n            }\n        }\n        toString() {\n            return this.stringValue;\n        }\n        equals(o) {\n            if (!(o instanceof ErrorCorrectionLevel)) {\n                return false;\n            }\n            const other = o;\n            return this.value === other.value;\n        }\n        /**\n         * @param bits int containing the two bits encoding a QR Code's error correction level\n         * @return ErrorCorrectionLevel representing the encoded error correction level\n         */\n        static forBits(bits /*int*/) {\n            if (bits < 0 || bits >= ErrorCorrectionLevel.FOR_BITS.size) {\n                throw new IllegalArgumentException();\n            }\n            return ErrorCorrectionLevel.FOR_BITS.get(bits);\n        }\n    }\n    ErrorCorrectionLevel.FOR_BITS = new Map();\n    ErrorCorrectionLevel.FOR_VALUE = new Map();\n    /** L = ~7% correction */\n    ErrorCorrectionLevel.L = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.L, 'L', 0x01);\n    /** M = ~15% correction */\n    ErrorCorrectionLevel.M = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.M, 'M', 0x00);\n    /** Q = ~25% correction */\n    ErrorCorrectionLevel.Q = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.Q, 'Q', 0x03);\n    /** H = ~30% correction */\n    ErrorCorrectionLevel.H = new ErrorCorrectionLevel(ErrorCorrectionLevelValues.H, 'H', 0x02);\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a QR Code's format information, including the data mask used and\n     * error correction level.</p>\n     *\n     * @author Sean Owen\n     * @see DataMask\n     * @see ErrorCorrectionLevel\n     */\n    class FormatInformation {\n        constructor(formatInfo /*int*/) {\n            // Bits 3,4\n            this.errorCorrectionLevel = ErrorCorrectionLevel.forBits((formatInfo >> 3) & 0x03);\n            // Bottom 3 bits\n            this.dataMask = /*(byte) */ (formatInfo & 0x07);\n        }\n        static numBitsDiffering(a /*int*/, b /*int*/) {\n            return Integer.bitCount(a ^ b);\n        }\n        /**\n         * @param maskedFormatInfo1 format info indicator, with mask still applied\n         * @param maskedFormatInfo2 second copy of same info; both are checked at the same time\n         *  to establish best match\n         * @return information about the format it specifies, or {@code null}\n         *  if doesn't seem to match any known pattern\n         */\n        static decodeFormatInformation(maskedFormatInfo1 /*int*/, maskedFormatInfo2 /*int*/) {\n            const formatInfo = FormatInformation.doDecodeFormatInformation(maskedFormatInfo1, maskedFormatInfo2);\n            if (formatInfo !== null) {\n                return formatInfo;\n            }\n            // Should return null, but, some QR codes apparently\n            // do not mask this info. Try again by actually masking the pattern\n            // first\n            return FormatInformation.doDecodeFormatInformation(maskedFormatInfo1 ^ FormatInformation.FORMAT_INFO_MASK_QR, maskedFormatInfo2 ^ FormatInformation.FORMAT_INFO_MASK_QR);\n        }\n        static doDecodeFormatInformation(maskedFormatInfo1 /*int*/, maskedFormatInfo2 /*int*/) {\n            // Find the int in FORMAT_INFO_DECODE_LOOKUP with fewest bits differing\n            let bestDifference = Number.MAX_SAFE_INTEGER;\n            let bestFormatInfo = 0;\n            for (const decodeInfo of FormatInformation.FORMAT_INFO_DECODE_LOOKUP) {\n                const targetInfo = decodeInfo[0];\n                if (targetInfo === maskedFormatInfo1 || targetInfo === maskedFormatInfo2) {\n                    // Found an exact match\n                    return new FormatInformation(decodeInfo[1]);\n                }\n                let bitsDifference = FormatInformation.numBitsDiffering(maskedFormatInfo1, targetInfo);\n                if (bitsDifference < bestDifference) {\n                    bestFormatInfo = decodeInfo[1];\n                    bestDifference = bitsDifference;\n                }\n                if (maskedFormatInfo1 !== maskedFormatInfo2) {\n                    // also try the other option\n                    bitsDifference = FormatInformation.numBitsDiffering(maskedFormatInfo2, targetInfo);\n                    if (bitsDifference < bestDifference) {\n                        bestFormatInfo = decodeInfo[1];\n                        bestDifference = bitsDifference;\n                    }\n                }\n            }\n            // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits\n            // differing means we found a match\n            if (bestDifference <= 3) {\n                return new FormatInformation(bestFormatInfo);\n            }\n            return null;\n        }\n        getErrorCorrectionLevel() {\n            return this.errorCorrectionLevel;\n        }\n        getDataMask() {\n            return this.dataMask;\n        }\n        /*@Override*/\n        hashCode() {\n            return (this.errorCorrectionLevel.getBits() << 3) | this.dataMask;\n        }\n        /*@Override*/\n        equals(o) {\n            if (!(o instanceof FormatInformation)) {\n                return false;\n            }\n            const other = o;\n            return this.errorCorrectionLevel === other.errorCorrectionLevel &&\n                this.dataMask === other.dataMask;\n        }\n    }\n    FormatInformation.FORMAT_INFO_MASK_QR = 0x5412;\n    /**\n     * See ISO 18004:2006, Annex C, Table C.1\n     */\n    FormatInformation.FORMAT_INFO_DECODE_LOOKUP = [\n        Int32Array.from([0x5412, 0x00]),\n        Int32Array.from([0x5125, 0x01]),\n        Int32Array.from([0x5E7C, 0x02]),\n        Int32Array.from([0x5B4B, 0x03]),\n        Int32Array.from([0x45F9, 0x04]),\n        Int32Array.from([0x40CE, 0x05]),\n        Int32Array.from([0x4F97, 0x06]),\n        Int32Array.from([0x4AA0, 0x07]),\n        Int32Array.from([0x77C4, 0x08]),\n        Int32Array.from([0x72F3, 0x09]),\n        Int32Array.from([0x7DAA, 0x0A]),\n        Int32Array.from([0x789D, 0x0B]),\n        Int32Array.from([0x662F, 0x0C]),\n        Int32Array.from([0x6318, 0x0D]),\n        Int32Array.from([0x6C41, 0x0E]),\n        Int32Array.from([0x6976, 0x0F]),\n        Int32Array.from([0x1689, 0x10]),\n        Int32Array.from([0x13BE, 0x11]),\n        Int32Array.from([0x1CE7, 0x12]),\n        Int32Array.from([0x19D0, 0x13]),\n        Int32Array.from([0x0762, 0x14]),\n        Int32Array.from([0x0255, 0x15]),\n        Int32Array.from([0x0D0C, 0x16]),\n        Int32Array.from([0x083B, 0x17]),\n        Int32Array.from([0x355F, 0x18]),\n        Int32Array.from([0x3068, 0x19]),\n        Int32Array.from([0x3F31, 0x1A]),\n        Int32Array.from([0x3A06, 0x1B]),\n        Int32Array.from([0x24B4, 0x1C]),\n        Int32Array.from([0x2183, 0x1D]),\n        Int32Array.from([0x2EDA, 0x1E]),\n        Int32Array.from([0x2BED, 0x1F]),\n    ];\n\n    /**\n     * <p>Encapsulates a set of error-correction blocks in one symbol version. Most versions will\n     * use blocks of differing sizes within one version, so, this encapsulates the parameters for\n     * each set of blocks. It also holds the number of error-correction codewords per block since it\n     * will be the same across all blocks within one version.</p>\n     */\n    class ECBlocks$1 {\n        constructor(ecCodewordsPerBlock /*int*/, ...ecBlocks) {\n            this.ecCodewordsPerBlock = ecCodewordsPerBlock;\n            this.ecBlocks = ecBlocks;\n        }\n        getECCodewordsPerBlock() {\n            return this.ecCodewordsPerBlock;\n        }\n        getNumBlocks() {\n            let total = 0;\n            const ecBlocks = this.ecBlocks;\n            for (const ecBlock of ecBlocks) {\n                total += ecBlock.getCount();\n            }\n            return total;\n        }\n        getTotalECCodewords() {\n            return this.ecCodewordsPerBlock * this.getNumBlocks();\n        }\n        getECBlocks() {\n            return this.ecBlocks;\n        }\n    }\n\n    /**\n     * <p>Encapsulates the parameters for one error-correction block in one symbol version.\n     * This includes the number of data codewords, and the number of times a block with these\n     * parameters is used consecutively in the QR code version's format.</p>\n     */\n    class ECB$1 {\n        constructor(count /*int*/, dataCodewords /*int*/) {\n            this.count = count;\n            this.dataCodewords = dataCodewords;\n        }\n        getCount() {\n            return this.count;\n        }\n        getDataCodewords() {\n            return this.dataCodewords;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * See ISO 18004:2006 Annex D\n     *\n     * @author Sean Owen\n     */\n    class Version$1 {\n        constructor(versionNumber /*int*/, alignmentPatternCenters, ...ecBlocks) {\n            this.versionNumber = versionNumber;\n            this.alignmentPatternCenters = alignmentPatternCenters;\n            this.ecBlocks = ecBlocks;\n            let total = 0;\n            const ecCodewords = ecBlocks[0].getECCodewordsPerBlock();\n            const ecbArray = ecBlocks[0].getECBlocks();\n            for (const ecBlock of ecbArray) {\n                total += ecBlock.getCount() * (ecBlock.getDataCodewords() + ecCodewords);\n            }\n            this.totalCodewords = total;\n        }\n        getVersionNumber() {\n            return this.versionNumber;\n        }\n        getAlignmentPatternCenters() {\n            return this.alignmentPatternCenters;\n        }\n        getTotalCodewords() {\n            return this.totalCodewords;\n        }\n        getDimensionForVersion() {\n            return 17 + 4 * this.versionNumber;\n        }\n        getECBlocksForLevel(ecLevel) {\n            return this.ecBlocks[ecLevel.getValue()];\n            // TYPESCRIPTPORT: original was using ordinal, and using the order of levels as defined in ErrorCorrectionLevel enum (LMQH)\n            // I will use the direct value from ErrorCorrectionLevelValues enum which in typescript goes to a number\n        }\n        /**\n         * <p>Deduces version information purely from QR Code dimensions.</p>\n         *\n         * @param dimension dimension in modules\n         * @return Version for a QR Code of that dimension\n         * @throws FormatException if dimension is not 1 mod 4\n         */\n        static getProvisionalVersionForDimension(dimension /*int*/) {\n            if (dimension % 4 !== 1) {\n                throw new FormatException();\n            }\n            try {\n                return this.getVersionForNumber((dimension - 17) / 4);\n            }\n            catch (ignored /*: IllegalArgumentException*/) {\n                throw new FormatException();\n            }\n        }\n        static getVersionForNumber(versionNumber /*int*/) {\n            if (versionNumber < 1 || versionNumber > 40) {\n                throw new IllegalArgumentException();\n            }\n            return Version$1.VERSIONS[versionNumber - 1];\n        }\n        static decodeVersionInformation(versionBits /*int*/) {\n            let bestDifference = Number.MAX_SAFE_INTEGER;\n            let bestVersion = 0;\n            for (let i = 0; i < Version$1.VERSION_DECODE_INFO.length; i++) {\n                const targetVersion = Version$1.VERSION_DECODE_INFO[i];\n                // Do the version info bits match exactly? done.\n                if (targetVersion === versionBits) {\n                    return Version$1.getVersionForNumber(i + 7);\n                }\n                // Otherwise see if this is the closest to a real version info bit string\n                // we have seen so far\n                const bitsDifference = FormatInformation.numBitsDiffering(versionBits, targetVersion);\n                if (bitsDifference < bestDifference) {\n                    bestVersion = i + 7;\n                    bestDifference = bitsDifference;\n                }\n            }\n            // We can tolerate up to 3 bits of error since no two version info codewords will\n            // differ in less than 8 bits.\n            if (bestDifference <= 3) {\n                return Version$1.getVersionForNumber(bestVersion);\n            }\n            // If we didn't find a close enough match, fail\n            return null;\n        }\n        /**\n         * See ISO 18004:2006 Annex E\n         */\n        buildFunctionPattern() {\n            const dimension = this.getDimensionForVersion();\n            const bitMatrix = new BitMatrix(dimension);\n            // Top left finder pattern + separator + format\n            bitMatrix.setRegion(0, 0, 9, 9);\n            // Top right finder pattern + separator + format\n            bitMatrix.setRegion(dimension - 8, 0, 8, 9);\n            // Bottom left finder pattern + separator + format\n            bitMatrix.setRegion(0, dimension - 8, 9, 8);\n            // Alignment patterns\n            const max = this.alignmentPatternCenters.length;\n            for (let x = 0; x < max; x++) {\n                const i = this.alignmentPatternCenters[x] - 2;\n                for (let y = 0; y < max; y++) {\n                    if ((x === 0 && (y === 0 || y === max - 1)) || (x === max - 1 && y === 0)) {\n                        // No alignment patterns near the three finder patterns\n                        continue;\n                    }\n                    bitMatrix.setRegion(this.alignmentPatternCenters[y] - 2, i, 5, 5);\n                }\n            }\n            // Vertical timing pattern\n            bitMatrix.setRegion(6, 9, 1, dimension - 17);\n            // Horizontal timing pattern\n            bitMatrix.setRegion(9, 6, dimension - 17, 1);\n            if (this.versionNumber > 6) {\n                // Version info, top right\n                bitMatrix.setRegion(dimension - 11, 0, 3, 6);\n                // Version info, bottom left\n                bitMatrix.setRegion(0, dimension - 11, 6, 3);\n            }\n            return bitMatrix;\n        }\n        /*@Override*/\n        toString() {\n            return '' + this.versionNumber;\n        }\n    }\n    /**\n       * See ISO 18004:2006 Annex D.\n       * Element i represents the raw version bits that specify version i + 7\n       */\n    Version$1.VERSION_DECODE_INFO = Int32Array.from([\n        0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6,\n        0x0C762, 0x0D847, 0x0E60D, 0x0F928, 0x10B78,\n        0x1145D, 0x12A17, 0x13532, 0x149A6, 0x15683,\n        0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB,\n        0x1B08E, 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250,\n        0x209D5, 0x216F0, 0x228BA, 0x2379F, 0x24B0B,\n        0x2542E, 0x26A64, 0x27541, 0x28C69\n    ]);\n    /**\n       * See ISO 18004:2006 6.5.1 Table 9\n       */\n    Version$1.VERSIONS = [\n        new Version$1(1, new Int32Array(0), new ECBlocks$1(7, new ECB$1(1, 19)), new ECBlocks$1(10, new ECB$1(1, 16)), new ECBlocks$1(13, new ECB$1(1, 13)), new ECBlocks$1(17, new ECB$1(1, 9))),\n        new Version$1(2, Int32Array.from([6, 18]), new ECBlocks$1(10, new ECB$1(1, 34)), new ECBlocks$1(16, new ECB$1(1, 28)), new ECBlocks$1(22, new ECB$1(1, 22)), new ECBlocks$1(28, new ECB$1(1, 16))),\n        new Version$1(3, Int32Array.from([6, 22]), new ECBlocks$1(15, new ECB$1(1, 55)), new ECBlocks$1(26, new ECB$1(1, 44)), new ECBlocks$1(18, new ECB$1(2, 17)), new ECBlocks$1(22, new ECB$1(2, 13))),\n        new Version$1(4, Int32Array.from([6, 26]), new ECBlocks$1(20, new ECB$1(1, 80)), new ECBlocks$1(18, new ECB$1(2, 32)), new ECBlocks$1(26, new ECB$1(2, 24)), new ECBlocks$1(16, new ECB$1(4, 9))),\n        new Version$1(5, Int32Array.from([6, 30]), new ECBlocks$1(26, new ECB$1(1, 108)), new ECBlocks$1(24, new ECB$1(2, 43)), new ECBlocks$1(18, new ECB$1(2, 15), new ECB$1(2, 16)), new ECBlocks$1(22, new ECB$1(2, 11), new ECB$1(2, 12))),\n        new Version$1(6, Int32Array.from([6, 34]), new ECBlocks$1(18, new ECB$1(2, 68)), new ECBlocks$1(16, new ECB$1(4, 27)), new ECBlocks$1(24, new ECB$1(4, 19)), new ECBlocks$1(28, new ECB$1(4, 15))),\n        new Version$1(7, Int32Array.from([6, 22, 38]), new ECBlocks$1(20, new ECB$1(2, 78)), new ECBlocks$1(18, new ECB$1(4, 31)), new ECBlocks$1(18, new ECB$1(2, 14), new ECB$1(4, 15)), new ECBlocks$1(26, new ECB$1(4, 13), new ECB$1(1, 14))),\n        new Version$1(8, Int32Array.from([6, 24, 42]), new ECBlocks$1(24, new ECB$1(2, 97)), new ECBlocks$1(22, new ECB$1(2, 38), new ECB$1(2, 39)), new ECBlocks$1(22, new ECB$1(4, 18), new ECB$1(2, 19)), new ECBlocks$1(26, new ECB$1(4, 14), new ECB$1(2, 15))),\n        new Version$1(9, Int32Array.from([6, 26, 46]), new ECBlocks$1(30, new ECB$1(2, 116)), new ECBlocks$1(22, new ECB$1(3, 36), new ECB$1(2, 37)), new ECBlocks$1(20, new ECB$1(4, 16), new ECB$1(4, 17)), new ECBlocks$1(24, new ECB$1(4, 12), new ECB$1(4, 13))),\n        new Version$1(10, Int32Array.from([6, 28, 50]), new ECBlocks$1(18, new ECB$1(2, 68), new ECB$1(2, 69)), new ECBlocks$1(26, new ECB$1(4, 43), new ECB$1(1, 44)), new ECBlocks$1(24, new ECB$1(6, 19), new ECB$1(2, 20)), new ECBlocks$1(28, new ECB$1(6, 15), new ECB$1(2, 16))),\n        new Version$1(11, Int32Array.from([6, 30, 54]), new ECBlocks$1(20, new ECB$1(4, 81)), new ECBlocks$1(30, new ECB$1(1, 50), new ECB$1(4, 51)), new ECBlocks$1(28, new ECB$1(4, 22), new ECB$1(4, 23)), new ECBlocks$1(24, new ECB$1(3, 12), new ECB$1(8, 13))),\n        new Version$1(12, Int32Array.from([6, 32, 58]), new ECBlocks$1(24, new ECB$1(2, 92), new ECB$1(2, 93)), new ECBlocks$1(22, new ECB$1(6, 36), new ECB$1(2, 37)), new ECBlocks$1(26, new ECB$1(4, 20), new ECB$1(6, 21)), new ECBlocks$1(28, new ECB$1(7, 14), new ECB$1(4, 15))),\n        new Version$1(13, Int32Array.from([6, 34, 62]), new ECBlocks$1(26, new ECB$1(4, 107)), new ECBlocks$1(22, new ECB$1(8, 37), new ECB$1(1, 38)), new ECBlocks$1(24, new ECB$1(8, 20), new ECB$1(4, 21)), new ECBlocks$1(22, new ECB$1(12, 11), new ECB$1(4, 12))),\n        new Version$1(14, Int32Array.from([6, 26, 46, 66]), new ECBlocks$1(30, new ECB$1(3, 115), new ECB$1(1, 116)), new ECBlocks$1(24, new ECB$1(4, 40), new ECB$1(5, 41)), new ECBlocks$1(20, new ECB$1(11, 16), new ECB$1(5, 17)), new ECBlocks$1(24, new ECB$1(11, 12), new ECB$1(5, 13))),\n        new Version$1(15, Int32Array.from([6, 26, 48, 70]), new ECBlocks$1(22, new ECB$1(5, 87), new ECB$1(1, 88)), new ECBlocks$1(24, new ECB$1(5, 41), new ECB$1(5, 42)), new ECBlocks$1(30, new ECB$1(5, 24), new ECB$1(7, 25)), new ECBlocks$1(24, new ECB$1(11, 12), new ECB$1(7, 13))),\n        new Version$1(16, Int32Array.from([6, 26, 50, 74]), new ECBlocks$1(24, new ECB$1(5, 98), new ECB$1(1, 99)), new ECBlocks$1(28, new ECB$1(7, 45), new ECB$1(3, 46)), new ECBlocks$1(24, new ECB$1(15, 19), new ECB$1(2, 20)), new ECBlocks$1(30, new ECB$1(3, 15), new ECB$1(13, 16))),\n        new Version$1(17, Int32Array.from([6, 30, 54, 78]), new ECBlocks$1(28, new ECB$1(1, 107), new ECB$1(5, 108)), new ECBlocks$1(28, new ECB$1(10, 46), new ECB$1(1, 47)), new ECBlocks$1(28, new ECB$1(1, 22), new ECB$1(15, 23)), new ECBlocks$1(28, new ECB$1(2, 14), new ECB$1(17, 15))),\n        new Version$1(18, Int32Array.from([6, 30, 56, 82]), new ECBlocks$1(30, new ECB$1(5, 120), new ECB$1(1, 121)), new ECBlocks$1(26, new ECB$1(9, 43), new ECB$1(4, 44)), new ECBlocks$1(28, new ECB$1(17, 22), new ECB$1(1, 23)), new ECBlocks$1(28, new ECB$1(2, 14), new ECB$1(19, 15))),\n        new Version$1(19, Int32Array.from([6, 30, 58, 86]), new ECBlocks$1(28, new ECB$1(3, 113), new ECB$1(4, 114)), new ECBlocks$1(26, new ECB$1(3, 44), new ECB$1(11, 45)), new ECBlocks$1(26, new ECB$1(17, 21), new ECB$1(4, 22)), new ECBlocks$1(26, new ECB$1(9, 13), new ECB$1(16, 14))),\n        new Version$1(20, Int32Array.from([6, 34, 62, 90]), new ECBlocks$1(28, new ECB$1(3, 107), new ECB$1(5, 108)), new ECBlocks$1(26, new ECB$1(3, 41), new ECB$1(13, 42)), new ECBlocks$1(30, new ECB$1(15, 24), new ECB$1(5, 25)), new ECBlocks$1(28, new ECB$1(15, 15), new ECB$1(10, 16))),\n        new Version$1(21, Int32Array.from([6, 28, 50, 72, 94]), new ECBlocks$1(28, new ECB$1(4, 116), new ECB$1(4, 117)), new ECBlocks$1(26, new ECB$1(17, 42)), new ECBlocks$1(28, new ECB$1(17, 22), new ECB$1(6, 23)), new ECBlocks$1(30, new ECB$1(19, 16), new ECB$1(6, 17))),\n        new Version$1(22, Int32Array.from([6, 26, 50, 74, 98]), new ECBlocks$1(28, new ECB$1(2, 111), new ECB$1(7, 112)), new ECBlocks$1(28, new ECB$1(17, 46)), new ECBlocks$1(30, new ECB$1(7, 24), new ECB$1(16, 25)), new ECBlocks$1(24, new ECB$1(34, 13))),\n        new Version$1(23, Int32Array.from([6, 30, 54, 78, 102]), new ECBlocks$1(30, new ECB$1(4, 121), new ECB$1(5, 122)), new ECBlocks$1(28, new ECB$1(4, 47), new ECB$1(14, 48)), new ECBlocks$1(30, new ECB$1(11, 24), new ECB$1(14, 25)), new ECBlocks$1(30, new ECB$1(16, 15), new ECB$1(14, 16))),\n        new Version$1(24, Int32Array.from([6, 28, 54, 80, 106]), new ECBlocks$1(30, new ECB$1(6, 117), new ECB$1(4, 118)), new ECBlocks$1(28, new ECB$1(6, 45), new ECB$1(14, 46)), new ECBlocks$1(30, new ECB$1(11, 24), new ECB$1(16, 25)), new ECBlocks$1(30, new ECB$1(30, 16), new ECB$1(2, 17))),\n        new Version$1(25, Int32Array.from([6, 32, 58, 84, 110]), new ECBlocks$1(26, new ECB$1(8, 106), new ECB$1(4, 107)), new ECBlocks$1(28, new ECB$1(8, 47), new ECB$1(13, 48)), new ECBlocks$1(30, new ECB$1(7, 24), new ECB$1(22, 25)), new ECBlocks$1(30, new ECB$1(22, 15), new ECB$1(13, 16))),\n        new Version$1(26, Int32Array.from([6, 30, 58, 86, 114]), new ECBlocks$1(28, new ECB$1(10, 114), new ECB$1(2, 115)), new ECBlocks$1(28, new ECB$1(19, 46), new ECB$1(4, 47)), new ECBlocks$1(28, new ECB$1(28, 22), new ECB$1(6, 23)), new ECBlocks$1(30, new ECB$1(33, 16), new ECB$1(4, 17))),\n        new Version$1(27, Int32Array.from([6, 34, 62, 90, 118]), new ECBlocks$1(30, new ECB$1(8, 122), new ECB$1(4, 123)), new ECBlocks$1(28, new ECB$1(22, 45), new ECB$1(3, 46)), new ECBlocks$1(30, new ECB$1(8, 23), new ECB$1(26, 24)), new ECBlocks$1(30, new ECB$1(12, 15), new ECB$1(28, 16))),\n        new Version$1(28, Int32Array.from([6, 26, 50, 74, 98, 122]), new ECBlocks$1(30, new ECB$1(3, 117), new ECB$1(10, 118)), new ECBlocks$1(28, new ECB$1(3, 45), new ECB$1(23, 46)), new ECBlocks$1(30, new ECB$1(4, 24), new ECB$1(31, 25)), new ECBlocks$1(30, new ECB$1(11, 15), new ECB$1(31, 16))),\n        new Version$1(29, Int32Array.from([6, 30, 54, 78, 102, 126]), new ECBlocks$1(30, new ECB$1(7, 116), new ECB$1(7, 117)), new ECBlocks$1(28, new ECB$1(21, 45), new ECB$1(7, 46)), new ECBlocks$1(30, new ECB$1(1, 23), new ECB$1(37, 24)), new ECBlocks$1(30, new ECB$1(19, 15), new ECB$1(26, 16))),\n        new Version$1(30, Int32Array.from([6, 26, 52, 78, 104, 130]), new ECBlocks$1(30, new ECB$1(5, 115), new ECB$1(10, 116)), new ECBlocks$1(28, new ECB$1(19, 47), new ECB$1(10, 48)), new ECBlocks$1(30, new ECB$1(15, 24), new ECB$1(25, 25)), new ECBlocks$1(30, new ECB$1(23, 15), new ECB$1(25, 16))),\n        new Version$1(31, Int32Array.from([6, 30, 56, 82, 108, 134]), new ECBlocks$1(30, new ECB$1(13, 115), new ECB$1(3, 116)), new ECBlocks$1(28, new ECB$1(2, 46), new ECB$1(29, 47)), new ECBlocks$1(30, new ECB$1(42, 24), new ECB$1(1, 25)), new ECBlocks$1(30, new ECB$1(23, 15), new ECB$1(28, 16))),\n        new Version$1(32, Int32Array.from([6, 34, 60, 86, 112, 138]), new ECBlocks$1(30, new ECB$1(17, 115)), new ECBlocks$1(28, new ECB$1(10, 46), new ECB$1(23, 47)), new ECBlocks$1(30, new ECB$1(10, 24), new ECB$1(35, 25)), new ECBlocks$1(30, new ECB$1(19, 15), new ECB$1(35, 16))),\n        new Version$1(33, Int32Array.from([6, 30, 58, 86, 114, 142]), new ECBlocks$1(30, new ECB$1(17, 115), new ECB$1(1, 116)), new ECBlocks$1(28, new ECB$1(14, 46), new ECB$1(21, 47)), new ECBlocks$1(30, new ECB$1(29, 24), new ECB$1(19, 25)), new ECBlocks$1(30, new ECB$1(11, 15), new ECB$1(46, 16))),\n        new Version$1(34, Int32Array.from([6, 34, 62, 90, 118, 146]), new ECBlocks$1(30, new ECB$1(13, 115), new ECB$1(6, 116)), new ECBlocks$1(28, new ECB$1(14, 46), new ECB$1(23, 47)), new ECBlocks$1(30, new ECB$1(44, 24), new ECB$1(7, 25)), new ECBlocks$1(30, new ECB$1(59, 16), new ECB$1(1, 17))),\n        new Version$1(35, Int32Array.from([6, 30, 54, 78, 102, 126, 150]), new ECBlocks$1(30, new ECB$1(12, 121), new ECB$1(7, 122)), new ECBlocks$1(28, new ECB$1(12, 47), new ECB$1(26, 48)), new ECBlocks$1(30, new ECB$1(39, 24), new ECB$1(14, 25)), new ECBlocks$1(30, new ECB$1(22, 15), new ECB$1(41, 16))),\n        new Version$1(36, Int32Array.from([6, 24, 50, 76, 102, 128, 154]), new ECBlocks$1(30, new ECB$1(6, 121), new ECB$1(14, 122)), new ECBlocks$1(28, new ECB$1(6, 47), new ECB$1(34, 48)), new ECBlocks$1(30, new ECB$1(46, 24), new ECB$1(10, 25)), new ECBlocks$1(30, new ECB$1(2, 15), new ECB$1(64, 16))),\n        new Version$1(37, Int32Array.from([6, 28, 54, 80, 106, 132, 158]), new ECBlocks$1(30, new ECB$1(17, 122), new ECB$1(4, 123)), new ECBlocks$1(28, new ECB$1(29, 46), new ECB$1(14, 47)), new ECBlocks$1(30, new ECB$1(49, 24), new ECB$1(10, 25)), new ECBlocks$1(30, new ECB$1(24, 15), new ECB$1(46, 16))),\n        new Version$1(38, Int32Array.from([6, 32, 58, 84, 110, 136, 162]), new ECBlocks$1(30, new ECB$1(4, 122), new ECB$1(18, 123)), new ECBlocks$1(28, new ECB$1(13, 46), new ECB$1(32, 47)), new ECBlocks$1(30, new ECB$1(48, 24), new ECB$1(14, 25)), new ECBlocks$1(30, new ECB$1(42, 15), new ECB$1(32, 16))),\n        new Version$1(39, Int32Array.from([6, 26, 54, 82, 110, 138, 166]), new ECBlocks$1(30, new ECB$1(20, 117), new ECB$1(4, 118)), new ECBlocks$1(28, new ECB$1(40, 47), new ECB$1(7, 48)), new ECBlocks$1(30, new ECB$1(43, 24), new ECB$1(22, 25)), new ECBlocks$1(30, new ECB$1(10, 15), new ECB$1(67, 16))),\n        new Version$1(40, Int32Array.from([6, 30, 58, 86, 114, 142, 170]), new ECBlocks$1(30, new ECB$1(19, 118), new ECB$1(6, 119)), new ECBlocks$1(28, new ECB$1(18, 47), new ECB$1(31, 48)), new ECBlocks$1(30, new ECB$1(34, 24), new ECB$1(34, 25)), new ECBlocks$1(30, new ECB$1(20, 15), new ECB$1(61, 16)))\n    ];\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    var DataMaskValues;\n    (function (DataMaskValues) {\n        DataMaskValues[DataMaskValues[\"DATA_MASK_000\"] = 0] = \"DATA_MASK_000\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_001\"] = 1] = \"DATA_MASK_001\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_010\"] = 2] = \"DATA_MASK_010\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_011\"] = 3] = \"DATA_MASK_011\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_100\"] = 4] = \"DATA_MASK_100\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_101\"] = 5] = \"DATA_MASK_101\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_110\"] = 6] = \"DATA_MASK_110\";\n        DataMaskValues[DataMaskValues[\"DATA_MASK_111\"] = 7] = \"DATA_MASK_111\";\n    })(DataMaskValues || (DataMaskValues = {}));\n    /**\n     * <p>Encapsulates data masks for the data bits in a QR code, per ISO 18004:2006 6.8. Implementations\n     * of this class can un-mask a raw BitMatrix. For simplicity, they will unmask the entire BitMatrix,\n     * including areas used for finder patterns, timing patterns, etc. These areas should be unused\n     * after the point they are unmasked anyway.</p>\n     *\n     * <p>Note that the diagram in section 6.8.1 is misleading since it indicates that i is column position\n     * and j is row position. In fact, as the text says, i is row position and j is column position.</p>\n     *\n     * @author Sean Owen\n     */\n    class DataMask {\n        // See ISO 18004:2006 6.8.1\n        constructor(value, isMasked) {\n            this.value = value;\n            this.isMasked = isMasked;\n        }\n        // End of enum constants.\n        /**\n         * <p>Implementations of this method reverse the data masking process applied to a QR Code and\n         * make its bits ready to read.</p>\n         *\n         * @param bits representation of QR Code bits\n         * @param dimension dimension of QR Code, represented by bits, being unmasked\n         */\n        unmaskBitMatrix(bits, dimension /*int*/) {\n            for (let i = 0; i < dimension; i++) {\n                for (let j = 0; j < dimension; j++) {\n                    if (this.isMasked(i, j)) {\n                        bits.flip(j, i);\n                    }\n                }\n            }\n        }\n    }\n    DataMask.values = new Map([\n        /**\n         * 000: mask bits for which (x + y) mod 2 == 0\n         */\n        [DataMaskValues.DATA_MASK_000, new DataMask(DataMaskValues.DATA_MASK_000, (i /*int*/, j /*int*/) => { return ((i + j) & 0x01) === 0; })],\n        /**\n         * 001: mask bits for which x mod 2 == 0\n         */\n        [DataMaskValues.DATA_MASK_001, new DataMask(DataMaskValues.DATA_MASK_001, (i /*int*/, j /*int*/) => { return (i & 0x01) === 0; })],\n        /**\n         * 010: mask bits for which y mod 3 == 0\n         */\n        [DataMaskValues.DATA_MASK_010, new DataMask(DataMaskValues.DATA_MASK_010, (i /*int*/, j /*int*/) => { return j % 3 === 0; })],\n        /**\n         * 011: mask bits for which (x + y) mod 3 == 0\n         */\n        [DataMaskValues.DATA_MASK_011, new DataMask(DataMaskValues.DATA_MASK_011, (i /*int*/, j /*int*/) => { return (i + j) % 3 === 0; })],\n        /**\n         * 100: mask bits for which (x/2 + y/3) mod 2 == 0\n         */\n        [DataMaskValues.DATA_MASK_100, new DataMask(DataMaskValues.DATA_MASK_100, (i /*int*/, j /*int*/) => { return ((Math.floor(i / 2) + Math.floor(j / 3)) & 0x01) === 0; })],\n        /**\n         * 101: mask bits for which xy mod 2 + xy mod 3 == 0\n         * equivalently, such that xy mod 6 == 0\n         */\n        [DataMaskValues.DATA_MASK_101, new DataMask(DataMaskValues.DATA_MASK_101, (i /*int*/, j /*int*/) => { return (i * j) % 6 === 0; })],\n        /**\n         * 110: mask bits for which (xy mod 2 + xy mod 3) mod 2 == 0\n         * equivalently, such that xy mod 6 < 3\n         */\n        [DataMaskValues.DATA_MASK_110, new DataMask(DataMaskValues.DATA_MASK_110, (i /*int*/, j /*int*/) => { return ((i * j) % 6) < 3; })],\n        /**\n         * 111: mask bits for which ((x+y)mod 2 + xy mod 3) mod 2 == 0\n         * equivalently, such that (x + y + xy mod 3) mod 2 == 0\n         */\n        [DataMaskValues.DATA_MASK_111, new DataMask(DataMaskValues.DATA_MASK_111, (i /*int*/, j /*int*/) => { return ((i + j + ((i * j) % 3)) & 0x01) === 0; })],\n    ]);\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Sean Owen\n     */\n    class BitMatrixParser$1 {\n        /**\n         * @param bitMatrix {@link BitMatrix} to parse\n         * @throws FormatException if dimension is not >= 21 and 1 mod 4\n         */\n        constructor(bitMatrix) {\n            const dimension = bitMatrix.getHeight();\n            if (dimension < 21 || (dimension & 0x03) !== 1) {\n                throw new FormatException();\n            }\n            this.bitMatrix = bitMatrix;\n        }\n        /**\n         * <p>Reads format information from one of its two locations within the QR Code.</p>\n         *\n         * @return {@link FormatInformation} encapsulating the QR Code's format info\n         * @throws FormatException if both format information locations cannot be parsed as\n         * the valid encoding of format information\n         */\n        readFormatInformation() {\n            if (this.parsedFormatInfo !== null && this.parsedFormatInfo !== undefined) {\n                return this.parsedFormatInfo;\n            }\n            // Read top-left format info bits\n            let formatInfoBits1 = 0;\n            for (let i = 0; i < 6; i++) {\n                formatInfoBits1 = this.copyBit(i, 8, formatInfoBits1);\n            }\n            // .. and skip a bit in the timing pattern ...\n            formatInfoBits1 = this.copyBit(7, 8, formatInfoBits1);\n            formatInfoBits1 = this.copyBit(8, 8, formatInfoBits1);\n            formatInfoBits1 = this.copyBit(8, 7, formatInfoBits1);\n            // .. and skip a bit in the timing pattern ...\n            for (let j = 5; j >= 0; j--) {\n                formatInfoBits1 = this.copyBit(8, j, formatInfoBits1);\n            }\n            // Read the top-right/bottom-left pattern too\n            const dimension = this.bitMatrix.getHeight();\n            let formatInfoBits2 = 0;\n            const jMin = dimension - 7;\n            for (let j = dimension - 1; j >= jMin; j--) {\n                formatInfoBits2 = this.copyBit(8, j, formatInfoBits2);\n            }\n            for (let i = dimension - 8; i < dimension; i++) {\n                formatInfoBits2 = this.copyBit(i, 8, formatInfoBits2);\n            }\n            this.parsedFormatInfo = FormatInformation.decodeFormatInformation(formatInfoBits1, formatInfoBits2);\n            if (this.parsedFormatInfo !== null) {\n                return this.parsedFormatInfo;\n            }\n            throw new FormatException();\n        }\n        /**\n         * <p>Reads version information from one of its two locations within the QR Code.</p>\n         *\n         * @return {@link Version} encapsulating the QR Code's version\n         * @throws FormatException if both version information locations cannot be parsed as\n         * the valid encoding of version information\n         */\n        readVersion() {\n            if (this.parsedVersion !== null && this.parsedVersion !== undefined) {\n                return this.parsedVersion;\n            }\n            const dimension = this.bitMatrix.getHeight();\n            const provisionalVersion = Math.floor((dimension - 17) / 4);\n            if (provisionalVersion <= 6) {\n                return Version$1.getVersionForNumber(provisionalVersion);\n            }\n            // Read top-right version info: 3 wide by 6 tall\n            let versionBits = 0;\n            const ijMin = dimension - 11;\n            for (let j = 5; j >= 0; j--) {\n                for (let i = dimension - 9; i >= ijMin; i--) {\n                    versionBits = this.copyBit(i, j, versionBits);\n                }\n            }\n            let theParsedVersion = Version$1.decodeVersionInformation(versionBits);\n            if (theParsedVersion !== null && theParsedVersion.getDimensionForVersion() === dimension) {\n                this.parsedVersion = theParsedVersion;\n                return theParsedVersion;\n            }\n            // Hmm, failed. Try bottom left: 6 wide by 3 tall\n            versionBits = 0;\n            for (let i = 5; i >= 0; i--) {\n                for (let j = dimension - 9; j >= ijMin; j--) {\n                    versionBits = this.copyBit(i, j, versionBits);\n                }\n            }\n            theParsedVersion = Version$1.decodeVersionInformation(versionBits);\n            if (theParsedVersion !== null && theParsedVersion.getDimensionForVersion() === dimension) {\n                this.parsedVersion = theParsedVersion;\n                return theParsedVersion;\n            }\n            throw new FormatException();\n        }\n        copyBit(i /*int*/, j /*int*/, versionBits /*int*/) {\n            const bit = this.isMirror ? this.bitMatrix.get(j, i) : this.bitMatrix.get(i, j);\n            return bit ? (versionBits << 1) | 0x1 : versionBits << 1;\n        }\n        /**\n         * <p>Reads the bits in the {@link BitMatrix} representing the finder pattern in the\n         * correct order in order to reconstruct the codewords bytes contained within the\n         * QR Code.</p>\n         *\n         * @return bytes encoded within the QR Code\n         * @throws FormatException if the exact number of bytes expected is not read\n         */\n        readCodewords() {\n            const formatInfo = this.readFormatInformation();\n            const version = this.readVersion();\n            // Get the data mask for the format used in this QR Code. This will exclude\n            // some bits from reading as we wind through the bit matrix.\n            const dataMask = DataMask.values.get(formatInfo.getDataMask());\n            const dimension = this.bitMatrix.getHeight();\n            dataMask.unmaskBitMatrix(this.bitMatrix, dimension);\n            const functionPattern = version.buildFunctionPattern();\n            let readingUp = true;\n            const result = new Uint8Array(version.getTotalCodewords());\n            let resultOffset = 0;\n            let currentByte = 0;\n            let bitsRead = 0;\n            // Read columns in pairs, from right to left\n            for (let j = dimension - 1; j > 0; j -= 2) {\n                if (j === 6) {\n                    // Skip whole column with vertical alignment pattern\n                    // saves time and makes the other code proceed more cleanly\n                    j--;\n                }\n                // Read alternatingly from bottom to top then top to bottom\n                for (let count = 0; count < dimension; count++) {\n                    const i = readingUp ? dimension - 1 - count : count;\n                    for (let col = 0; col < 2; col++) {\n                        // Ignore bits covered by the function pattern\n                        if (!functionPattern.get(j - col, i)) {\n                            // Read a bit\n                            bitsRead++;\n                            currentByte <<= 1;\n                            if (this.bitMatrix.get(j - col, i)) {\n                                currentByte |= 1;\n                            }\n                            // If we've made a whole byte, save it off\n                            if (bitsRead === 8) {\n                                result[resultOffset++] = /*(byte) */ currentByte;\n                                bitsRead = 0;\n                                currentByte = 0;\n                            }\n                        }\n                    }\n                }\n                readingUp = !readingUp; // readingUp ^= true; // readingUp = !readingUp; // switch directions\n            }\n            if (resultOffset !== version.getTotalCodewords()) {\n                throw new FormatException();\n            }\n            return result;\n        }\n        /**\n         * Revert the mask removal done while reading the code words. The bit matrix should revert to its original state.\n         */\n        remask() {\n            if (this.parsedFormatInfo === null) {\n                return; // We have no format information, and have no data mask\n            }\n            const dataMask = DataMask.values[this.parsedFormatInfo.getDataMask()];\n            const dimension = this.bitMatrix.getHeight();\n            dataMask.unmaskBitMatrix(this.bitMatrix, dimension);\n        }\n        /**\n         * Prepare the parser for a mirrored operation.\n         * This flag has effect only on the {@link #readFormatInformation()} and the\n         * {@link #readVersion()}. Before proceeding with {@link #readCodewords()} the\n         * {@link #mirror()} method should be called.\n         *\n         * @param mirror Whether to read version and format information mirrored.\n         */\n        setMirror(isMirror) {\n            this.parsedVersion = null;\n            this.parsedFormatInfo = null;\n            this.isMirror = isMirror;\n        }\n        /** Mirror the bit matrix in order to attempt a second reading. */\n        mirror() {\n            const bitMatrix = this.bitMatrix;\n            for (let x = 0, width = bitMatrix.getWidth(); x < width; x++) {\n                for (let y = x + 1, height = bitMatrix.getHeight(); y < height; y++) {\n                    if (bitMatrix.get(x, y) !== bitMatrix.get(y, x)) {\n                        bitMatrix.flip(y, x);\n                        bitMatrix.flip(x, y);\n                    }\n                }\n            }\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a block of data within a QR Code. QR Codes may split their data into\n     * multiple blocks, each of which is a unit of data and error-correction codewords. Each\n     * is represented by an instance of this class.</p>\n     *\n     * @author Sean Owen\n     */\n    class DataBlock$1 {\n        constructor(numDataCodewords /*int*/, codewords) {\n            this.numDataCodewords = numDataCodewords;\n            this.codewords = codewords;\n        }\n        /**\n         * <p>When QR Codes use multiple data blocks, they are actually interleaved.\n         * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This\n         * method will separate the data into original blocks.</p>\n         *\n         * @param rawCodewords bytes as read directly from the QR Code\n         * @param version version of the QR Code\n         * @param ecLevel error-correction level of the QR Code\n         * @return DataBlocks containing original bytes, \"de-interleaved\" from representation in the\n         *         QR Code\n         */\n        static getDataBlocks(rawCodewords, version, ecLevel) {\n            if (rawCodewords.length !== version.getTotalCodewords()) {\n                throw new IllegalArgumentException();\n            }\n            // Figure out the number and size of data blocks used by this version and\n            // error correction level\n            const ecBlocks = version.getECBlocksForLevel(ecLevel);\n            // First count the total number of data blocks\n            let totalBlocks = 0;\n            const ecBlockArray = ecBlocks.getECBlocks();\n            for (const ecBlock of ecBlockArray) {\n                totalBlocks += ecBlock.getCount();\n            }\n            // Now establish DataBlocks of the appropriate size and number of data codewords\n            const result = new Array(totalBlocks);\n            let numResultBlocks = 0;\n            for (const ecBlock of ecBlockArray) {\n                for (let i = 0; i < ecBlock.getCount(); i++) {\n                    const numDataCodewords = ecBlock.getDataCodewords();\n                    const numBlockCodewords = ecBlocks.getECCodewordsPerBlock() + numDataCodewords;\n                    result[numResultBlocks++] = new DataBlock$1(numDataCodewords, new Uint8Array(numBlockCodewords));\n                }\n            }\n            // All blocks have the same amount of data, except that the last n\n            // (where n may be 0) have 1 more byte. Figure out where these start.\n            const shorterBlocksTotalCodewords = result[0].codewords.length;\n            let longerBlocksStartAt = result.length - 1;\n            // TYPESCRIPTPORT: check length is correct here\n            while (longerBlocksStartAt >= 0) {\n                const numCodewords = result[longerBlocksStartAt].codewords.length;\n                if (numCodewords === shorterBlocksTotalCodewords) {\n                    break;\n                }\n                longerBlocksStartAt--;\n            }\n            longerBlocksStartAt++;\n            const shorterBlocksNumDataCodewords = shorterBlocksTotalCodewords - ecBlocks.getECCodewordsPerBlock();\n            // The last elements of result may be 1 element longer\n            // first fill out as many elements as all of them have\n            let rawCodewordsOffset = 0;\n            for (let i = 0; i < shorterBlocksNumDataCodewords; i++) {\n                for (let j = 0; j < numResultBlocks; j++) {\n                    result[j].codewords[i] = rawCodewords[rawCodewordsOffset++];\n                }\n            }\n            // Fill out the last data block in the longer ones\n            for (let j = longerBlocksStartAt; j < numResultBlocks; j++) {\n                result[j].codewords[shorterBlocksNumDataCodewords] = rawCodewords[rawCodewordsOffset++];\n            }\n            // Now add in error correction blocks\n            const max = result[0].codewords.length;\n            for (let i = shorterBlocksNumDataCodewords; i < max; i++) {\n                for (let j = 0; j < numResultBlocks; j++) {\n                    const iOffset = j < longerBlocksStartAt ? i : i + 1;\n                    result[j].codewords[iOffset] = rawCodewords[rawCodewordsOffset++];\n                }\n            }\n            return result;\n        }\n        getNumDataCodewords() {\n            return this.numDataCodewords;\n        }\n        getCodewords() {\n            return this.codewords;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    var ModeValues;\n    (function (ModeValues) {\n        ModeValues[ModeValues[\"TERMINATOR\"] = 0] = \"TERMINATOR\";\n        ModeValues[ModeValues[\"NUMERIC\"] = 1] = \"NUMERIC\";\n        ModeValues[ModeValues[\"ALPHANUMERIC\"] = 2] = \"ALPHANUMERIC\";\n        ModeValues[ModeValues[\"STRUCTURED_APPEND\"] = 3] = \"STRUCTURED_APPEND\";\n        ModeValues[ModeValues[\"BYTE\"] = 4] = \"BYTE\";\n        ModeValues[ModeValues[\"ECI\"] = 5] = \"ECI\";\n        ModeValues[ModeValues[\"KANJI\"] = 6] = \"KANJI\";\n        ModeValues[ModeValues[\"FNC1_FIRST_POSITION\"] = 7] = \"FNC1_FIRST_POSITION\";\n        ModeValues[ModeValues[\"FNC1_SECOND_POSITION\"] = 8] = \"FNC1_SECOND_POSITION\";\n        /** See GBT 18284-2000; \"Hanzi\" is a transliteration of this mode name. */\n        ModeValues[ModeValues[\"HANZI\"] = 9] = \"HANZI\";\n    })(ModeValues || (ModeValues = {}));\n    /**\n     * <p>See ISO 18004:2006, 6.4.1, Tables 2 and 3. This enum encapsulates the various modes in which\n     * data can be encoded to bits in the QR code standard.</p>\n     *\n     * @author Sean Owen\n     */\n    class Mode$1 {\n        constructor(value, stringValue, characterCountBitsForVersions, bits /*int*/) {\n            this.value = value;\n            this.stringValue = stringValue;\n            this.characterCountBitsForVersions = characterCountBitsForVersions;\n            this.bits = bits;\n            Mode$1.FOR_BITS.set(bits, this);\n            Mode$1.FOR_VALUE.set(value, this);\n        }\n        /**\n         * @param bits four bits encoding a QR Code data mode\n         * @return Mode encoded by these bits\n         * @throws IllegalArgumentException if bits do not correspond to a known mode\n         */\n        static forBits(bits /*int*/) {\n            const mode = Mode$1.FOR_BITS.get(bits);\n            if (undefined === mode) {\n                throw new IllegalArgumentException();\n            }\n            return mode;\n        }\n        /**\n         * @param version version in question\n         * @return number of bits used, in this QR Code symbol {@link Version}, to encode the\n         *         count of characters that will follow encoded in this Mode\n         */\n        getCharacterCountBits(version) {\n            const versionNumber = version.getVersionNumber();\n            let offset;\n            if (versionNumber <= 9) {\n                offset = 0;\n            }\n            else if (versionNumber <= 26) {\n                offset = 1;\n            }\n            else {\n                offset = 2;\n            }\n            return this.characterCountBitsForVersions[offset];\n        }\n        getValue() {\n            return this.value;\n        }\n        getBits() {\n            return this.bits;\n        }\n        equals(o) {\n            if (!(o instanceof Mode$1)) {\n                return false;\n            }\n            const other = o;\n            return this.value === other.value;\n        }\n        toString() {\n            return this.stringValue;\n        }\n    }\n    Mode$1.FOR_BITS = new Map();\n    Mode$1.FOR_VALUE = new Map();\n    Mode$1.TERMINATOR = new Mode$1(ModeValues.TERMINATOR, 'TERMINATOR', Int32Array.from([0, 0, 0]), 0x00); // Not really a mode...\n    Mode$1.NUMERIC = new Mode$1(ModeValues.NUMERIC, 'NUMERIC', Int32Array.from([10, 12, 14]), 0x01);\n    Mode$1.ALPHANUMERIC = new Mode$1(ModeValues.ALPHANUMERIC, 'ALPHANUMERIC', Int32Array.from([9, 11, 13]), 0x02);\n    Mode$1.STRUCTURED_APPEND = new Mode$1(ModeValues.STRUCTURED_APPEND, 'STRUCTURED_APPEND', Int32Array.from([0, 0, 0]), 0x03); // Not supported\n    Mode$1.BYTE = new Mode$1(ModeValues.BYTE, 'BYTE', Int32Array.from([8, 16, 16]), 0x04);\n    Mode$1.ECI = new Mode$1(ModeValues.ECI, 'ECI', Int32Array.from([0, 0, 0]), 0x07); // character counts don't apply\n    Mode$1.KANJI = new Mode$1(ModeValues.KANJI, 'KANJI', Int32Array.from([8, 10, 12]), 0x08);\n    Mode$1.FNC1_FIRST_POSITION = new Mode$1(ModeValues.FNC1_FIRST_POSITION, 'FNC1_FIRST_POSITION', Int32Array.from([0, 0, 0]), 0x05);\n    Mode$1.FNC1_SECOND_POSITION = new Mode$1(ModeValues.FNC1_SECOND_POSITION, 'FNC1_SECOND_POSITION', Int32Array.from([0, 0, 0]), 0x09);\n    /** See GBT 18284-2000; \"Hanzi\" is a transliteration of this mode name. */\n    Mode$1.HANZI = new Mode$1(ModeValues.HANZI, 'HANZI', Int32Array.from([8, 10, 12]), 0x0D);\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.io.UnsupportedEncodingException;*/\n    /*import java.util.ArrayList;*/\n    /*import java.util.Collection;*/\n    /*import java.util.List;*/\n    /*import java.util.Map;*/\n    /**\n     * <p>QR Codes can encode text as bits in one of several modes, and can use multiple modes\n     * in one QR Code. This class decodes the bits back into text.</p>\n     *\n     * <p>See ISO 18004:2006, 6.4.3 - 6.4.7</p>\n     *\n     * @author Sean Owen\n     */\n    class DecodedBitStreamParser$1 {\n        static decode(bytes, version, ecLevel, hints) {\n            const bits = new BitSource(bytes);\n            let result = new StringBuilder();\n            const byteSegments = new Array(); // 1\n            // TYPESCRIPTPORT: I do not use constructor with size 1 as in original Java means capacity and the array length is checked below\n            let symbolSequence = -1;\n            let parityData = -1;\n            try {\n                let currentCharacterSetECI = null;\n                let fc1InEffect = false;\n                let mode;\n                do {\n                    // While still another segment to read...\n                    if (bits.available() < 4) {\n                        // OK, assume we're done. Really, a TERMINATOR mode should have been recorded here\n                        mode = Mode$1.TERMINATOR;\n                    }\n                    else {\n                        const modeBits = bits.readBits(4);\n                        mode = Mode$1.forBits(modeBits); // mode is encoded by 4 bits\n                    }\n                    switch (mode) {\n                        case Mode$1.TERMINATOR:\n                            break;\n                        case Mode$1.FNC1_FIRST_POSITION:\n                        case Mode$1.FNC1_SECOND_POSITION:\n                            // We do little with FNC1 except alter the parsed result a bit according to the spec\n                            fc1InEffect = true;\n                            break;\n                        case Mode$1.STRUCTURED_APPEND:\n                            if (bits.available() < 16) {\n                                throw new FormatException();\n                            }\n                            // sequence number and parity is added later to the result metadata\n                            // Read next 8 bits (symbol sequence #) and 8 bits (data: parity), then continue\n                            symbolSequence = bits.readBits(8);\n                            parityData = bits.readBits(8);\n                            break;\n                        case Mode$1.ECI:\n                            // Count doesn't apply to ECI\n                            const value = DecodedBitStreamParser$1.parseECIValue(bits);\n                            currentCharacterSetECI = CharacterSetECI.getCharacterSetECIByValue(value);\n                            if (currentCharacterSetECI === null) {\n                                throw new FormatException();\n                            }\n                            break;\n                        case Mode$1.HANZI:\n                            // First handle Hanzi mode which does not start with character count\n                            // Chinese mode contains a sub set indicator right after mode indicator\n                            const subset = bits.readBits(4);\n                            const countHanzi = bits.readBits(mode.getCharacterCountBits(version));\n                            if (subset === DecodedBitStreamParser$1.GB2312_SUBSET) {\n                                DecodedBitStreamParser$1.decodeHanziSegment(bits, result, countHanzi);\n                            }\n                            break;\n                        default:\n                            // \"Normal\" QR code modes:\n                            // How many characters will follow, encoded in this mode?\n                            const count = bits.readBits(mode.getCharacterCountBits(version));\n                            switch (mode) {\n                                case Mode$1.NUMERIC:\n                                    DecodedBitStreamParser$1.decodeNumericSegment(bits, result, count);\n                                    break;\n                                case Mode$1.ALPHANUMERIC:\n                                    DecodedBitStreamParser$1.decodeAlphanumericSegment(bits, result, count, fc1InEffect);\n                                    break;\n                                case Mode$1.BYTE:\n                                    DecodedBitStreamParser$1.decodeByteSegment(bits, result, count, currentCharacterSetECI, byteSegments, hints);\n                                    break;\n                                case Mode$1.KANJI:\n                                    DecodedBitStreamParser$1.decodeKanjiSegment(bits, result, count);\n                                    break;\n                                default:\n                                    throw new FormatException();\n                            }\n                            break;\n                    }\n                } while (mode !== Mode$1.TERMINATOR);\n            }\n            catch (iae /*: IllegalArgumentException*/) {\n                // from readBits() calls\n                throw new FormatException();\n            }\n            return new DecoderResult(bytes, result.toString(), byteSegments.length === 0 ? null : byteSegments, ecLevel === null ? null : ecLevel.toString(), symbolSequence, parityData);\n        }\n        /**\n         * See specification GBT 18284-2000\n         */\n        static decodeHanziSegment(bits, result, count /*int*/) {\n            // Don't crash trying to read more bits than we have available.\n            if (count * 13 > bits.available()) {\n                throw new FormatException();\n            }\n            // Each character will require 2 bytes. Read the characters as 2-byte pairs\n            // and decode as GB2312 afterwards\n            const buffer = new Uint8Array(2 * count);\n            let offset = 0;\n            while (count > 0) {\n                // Each 13 bits encodes a 2-byte character\n                const twoBytes = bits.readBits(13);\n                let assembledTwoBytes = (((twoBytes / 0x060) << 8) & 0xFFFFFFFF) | (twoBytes % 0x060);\n                if (assembledTwoBytes < 0x003BF) {\n                    // In the 0xA1A1 to 0xAAFE range\n                    assembledTwoBytes += 0x0A1A1;\n                }\n                else {\n                    // In the 0xB0A1 to 0xFAFE range\n                    assembledTwoBytes += 0x0A6A1;\n                }\n                buffer[offset] = /*(byte) */ ((assembledTwoBytes >> 8) & 0xFF);\n                buffer[offset + 1] = /*(byte) */ (assembledTwoBytes & 0xFF);\n                offset += 2;\n                count--;\n            }\n            try {\n                result.append(StringEncoding.decode(buffer, StringUtils.GB2312));\n                // TYPESCRIPTPORT: TODO: implement GB2312 decode. StringView from MDN could be a starting point\n            }\n            catch (ignored /*: UnsupportedEncodingException*/) {\n                throw new FormatException(ignored);\n            }\n        }\n        static decodeKanjiSegment(bits, result, count /*int*/) {\n            // Don't crash trying to read more bits than we have available.\n            if (count * 13 > bits.available()) {\n                throw new FormatException();\n            }\n            // Each character will require 2 bytes. Read the characters as 2-byte pairs\n            // and decode as Shift_JIS afterwards\n            const buffer = new Uint8Array(2 * count);\n            let offset = 0;\n            while (count > 0) {\n                // Each 13 bits encodes a 2-byte character\n                const twoBytes = bits.readBits(13);\n                let assembledTwoBytes = (((twoBytes / 0x0C0) << 8) & 0xFFFFFFFF) | (twoBytes % 0x0C0);\n                if (assembledTwoBytes < 0x01F00) {\n                    // In the 0x8140 to 0x9FFC range\n                    assembledTwoBytes += 0x08140;\n                }\n                else {\n                    // In the 0xE040 to 0xEBBF range\n                    assembledTwoBytes += 0x0C140;\n                }\n                buffer[offset] = /*(byte) */ (assembledTwoBytes >> 8);\n                buffer[offset + 1] = /*(byte) */ assembledTwoBytes;\n                offset += 2;\n                count--;\n            }\n            // Shift_JIS may not be supported in some environments:\n            try {\n                result.append(StringEncoding.decode(buffer, StringUtils.SHIFT_JIS));\n                // TYPESCRIPTPORT: TODO: implement SHIFT_JIS decode. StringView from MDN could be a starting point\n            }\n            catch (ignored /*: UnsupportedEncodingException*/) {\n                throw new FormatException(ignored);\n            }\n        }\n        static decodeByteSegment(bits, result, count /*int*/, currentCharacterSetECI, byteSegments, hints) {\n            // Don't crash trying to read more bits than we have available.\n            if (8 * count > bits.available()) {\n                throw new FormatException();\n            }\n            const readBytes = new Uint8Array(count);\n            for (let i = 0; i < count; i++) {\n                readBytes[i] = /*(byte) */ bits.readBits(8);\n            }\n            let encoding;\n            if (currentCharacterSetECI === null) {\n                // The spec isn't clear on this mode; see\n                // section 6.4.5: t does not say which encoding to assuming\n                // upon decoding. I have seen ISO-8859-1 used as well as\n                // Shift_JIS -- without anything like an ECI designator to\n                // give a hint.\n                encoding = StringUtils.guessEncoding(readBytes, hints);\n            }\n            else {\n                encoding = currentCharacterSetECI.getName();\n            }\n            try {\n                result.append(StringEncoding.decode(readBytes, encoding));\n            }\n            catch (ignored /*: UnsupportedEncodingException*/) {\n                throw new FormatException(ignored);\n            }\n            byteSegments.push(readBytes);\n        }\n        static toAlphaNumericChar(value /*int*/) {\n            if (value >= DecodedBitStreamParser$1.ALPHANUMERIC_CHARS.length) {\n                throw new FormatException();\n            }\n            return DecodedBitStreamParser$1.ALPHANUMERIC_CHARS[value];\n        }\n        static decodeAlphanumericSegment(bits, result, count /*int*/, fc1InEffect) {\n            // Read two characters at a time\n            const start = result.length();\n            while (count > 1) {\n                if (bits.available() < 11) {\n                    throw new FormatException();\n                }\n                const nextTwoCharsBits = bits.readBits(11);\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(Math.floor(nextTwoCharsBits / 45)));\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(nextTwoCharsBits % 45));\n                count -= 2;\n            }\n            if (count === 1) {\n                // special case: one character left\n                if (bits.available() < 6) {\n                    throw new FormatException();\n                }\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(bits.readBits(6)));\n            }\n            // See section 6.4.8.1, 6.4.8.2\n            if (fc1InEffect) {\n                // We need to massage the result a bit if in an FNC1 mode:\n                for (let i = start; i < result.length(); i++) {\n                    if (result.charAt(i) === '%') {\n                        if (i < result.length() - 1 && result.charAt(i + 1) === '%') {\n                            // %% is rendered as %\n                            result.deleteCharAt(i + 1);\n                        }\n                        else {\n                            // In alpha mode, % should be converted to FNC1 separator 0x1D\n                            result.setCharAt(i, String.fromCharCode(0x1D));\n                        }\n                    }\n                }\n            }\n        }\n        static decodeNumericSegment(bits, result, count /*int*/) {\n            // Read three digits at a time\n            while (count >= 3) {\n                // Each 10 bits encodes three digits\n                if (bits.available() < 10) {\n                    throw new FormatException();\n                }\n                const threeDigitsBits = bits.readBits(10);\n                if (threeDigitsBits >= 1000) {\n                    throw new FormatException();\n                }\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(Math.floor(threeDigitsBits / 100)));\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(Math.floor(threeDigitsBits / 10) % 10));\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(threeDigitsBits % 10));\n                count -= 3;\n            }\n            if (count === 2) {\n                // Two digits left over to read, encoded in 7 bits\n                if (bits.available() < 7) {\n                    throw new FormatException();\n                }\n                const twoDigitsBits = bits.readBits(7);\n                if (twoDigitsBits >= 100) {\n                    throw new FormatException();\n                }\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(Math.floor(twoDigitsBits / 10)));\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(twoDigitsBits % 10));\n            }\n            else if (count === 1) {\n                // One digit left over to read\n                if (bits.available() < 4) {\n                    throw new FormatException();\n                }\n                const digitBits = bits.readBits(4);\n                if (digitBits >= 10) {\n                    throw new FormatException();\n                }\n                result.append(DecodedBitStreamParser$1.toAlphaNumericChar(digitBits));\n            }\n        }\n        static parseECIValue(bits) {\n            const firstByte = bits.readBits(8);\n            if ((firstByte & 0x80) === 0) {\n                // just one byte\n                return firstByte & 0x7F;\n            }\n            if ((firstByte & 0xC0) === 0x80) {\n                // two bytes\n                const secondByte = bits.readBits(8);\n                return (((firstByte & 0x3F) << 8) & 0xFFFFFFFF) | secondByte;\n            }\n            if ((firstByte & 0xE0) === 0xC0) {\n                // three bytes\n                const secondThirdBytes = bits.readBits(16);\n                return (((firstByte & 0x1F) << 16) & 0xFFFFFFFF) | secondThirdBytes;\n            }\n            throw new FormatException();\n        }\n    }\n    /**\n     * See ISO 18004:2006, 6.4.4 Table 5\n     */\n    DecodedBitStreamParser$1.ALPHANUMERIC_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n    DecodedBitStreamParser$1.GB2312_SUBSET = 1;\n    // function Uint8ArrayToString(a: Uint8Array): string {\n    //     const CHUNK_SZ = 0x8000;\n    //     const c = new StringBuilder();\n    //     for (let i = 0, length = a.length; i < length; i += CHUNK_SZ) {\n    //         c.append(String.fromCharCode.apply(null, a.subarray(i, i + CHUNK_SZ)));\n    //     }\n    //     return c.toString();\n    // }\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * Meta-data container for QR Code decoding. Instances of this class may be used to convey information back to the\n     * decoding caller. Callers are expected to process this.\n     *\n     * @see com.google.zxing.common.DecoderResult#getOther()\n     */\n    class QRCodeDecoderMetaData {\n        constructor(mirrored) {\n            this.mirrored = mirrored;\n        }\n        /**\n         * @return true if the QR Code was mirrored.\n         */\n        isMirrored() {\n            return this.mirrored;\n        }\n        /**\n         * Apply the result points' order correction due to mirroring.\n         *\n         * @param points Array of points to apply mirror correction to.\n         */\n        applyMirroredCorrection(points) {\n            if (!this.mirrored || points === null || points.length < 3) {\n                return;\n            }\n            const bottomLeft = points[0];\n            points[0] = points[2];\n            points[2] = bottomLeft;\n            // No need to 'fix' top-left and alignment pattern.\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.util.Map;*/\n    /**\n     * <p>The main class which implements QR Code decoding -- as opposed to locating and extracting\n     * the QR Code from an image.</p>\n     *\n     * @author Sean Owen\n     */\n    class Decoder$2 {\n        constructor() {\n            this.rsDecoder = new ReedSolomonDecoder(GenericGF.QR_CODE_FIELD_256);\n        }\n        // public decode(image: boolean[][]): DecoderResult /*throws ChecksumException, FormatException*/ {\n        //   return decode(image, null)\n        // }\n        /**\n         * <p>Convenience method that can decode a QR Code represented as a 2D array of booleans.\n         * \"true\" is taken to mean a black module.</p>\n         *\n         * @param image booleans representing white/black QR Code modules\n         * @param hints decoding hints that should be used to influence decoding\n         * @return text and bytes encoded within the QR Code\n         * @throws FormatException if the QR Code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        decodeBooleanArray(image, hints) {\n            return this.decodeBitMatrix(BitMatrix.parseFromBooleanArray(image), hints);\n        }\n        // public decodeBitMatrix(bits: BitMatrix): DecoderResult /*throws ChecksumException, FormatException*/ {\n        //   return decode(bits, null)\n        // }\n        /**\n         * <p>Decodes a QR Code represented as a {@link BitMatrix}. A 1 or \"true\" is taken to mean a black module.</p>\n         *\n         * @param bits booleans representing white/black QR Code modules\n         * @param hints decoding hints that should be used to influence decoding\n         * @return text and bytes encoded within the QR Code\n         * @throws FormatException if the QR Code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        decodeBitMatrix(bits, hints) {\n            // Construct a parser and read version, error-correction level\n            const parser = new BitMatrixParser$1(bits);\n            let ex = null;\n            try {\n                return this.decodeBitMatrixParser(parser, hints);\n            }\n            catch (e /*: FormatException, ChecksumException*/) {\n                ex = e;\n            }\n            try {\n                // Revert the bit matrix\n                parser.remask();\n                // Will be attempting a mirrored reading of the version and format info.\n                parser.setMirror(true);\n                // Preemptively read the version.\n                parser.readVersion();\n                // Preemptively read the format information.\n                parser.readFormatInformation();\n                /*\n                 * Since we're here, this means we have successfully detected some kind\n                 * of version and format information when mirrored. This is a good sign,\n                 * that the QR code may be mirrored, and we should try once more with a\n                 * mirrored content.\n                 */\n                // Prepare for a mirrored reading.\n                parser.mirror();\n                const result = this.decodeBitMatrixParser(parser, hints);\n                // Success! Notify the caller that the code was mirrored.\n                result.setOther(new QRCodeDecoderMetaData(true));\n                return result;\n            }\n            catch (e /*FormatException | ChecksumException*/) {\n                // Throw the exception from the original reading\n                if (ex !== null) {\n                    throw ex;\n                }\n                throw e;\n            }\n        }\n        decodeBitMatrixParser(parser, hints) {\n            const version = parser.readVersion();\n            const ecLevel = parser.readFormatInformation().getErrorCorrectionLevel();\n            // Read codewords\n            const codewords = parser.readCodewords();\n            // Separate into data blocks\n            const dataBlocks = DataBlock$1.getDataBlocks(codewords, version, ecLevel);\n            // Count total number of data bytes\n            let totalBytes = 0;\n            for (const dataBlock of dataBlocks) {\n                totalBytes += dataBlock.getNumDataCodewords();\n            }\n            const resultBytes = new Uint8Array(totalBytes);\n            let resultOffset = 0;\n            // Error-correct and copy data blocks together into a stream of bytes\n            for (const dataBlock of dataBlocks) {\n                const codewordBytes = dataBlock.getCodewords();\n                const numDataCodewords = dataBlock.getNumDataCodewords();\n                this.correctErrors(codewordBytes, numDataCodewords);\n                for (let i = 0; i < numDataCodewords; i++) {\n                    resultBytes[resultOffset++] = codewordBytes[i];\n                }\n            }\n            // Decode the contents of that stream of bytes\n            return DecodedBitStreamParser$1.decode(resultBytes, version, ecLevel, hints);\n        }\n        /**\n         * <p>Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n         * correct the errors in-place using Reed-Solomon error correction.</p>\n         *\n         * @param codewordBytes data and error correction codewords\n         * @param numDataCodewords number of codewords that are data bytes\n         * @throws ChecksumException if error correction fails\n         */\n        correctErrors(codewordBytes, numDataCodewords /*int*/) {\n            // const numCodewords = codewordBytes.length;\n            // First read into an array of ints\n            const codewordsInts = new Int32Array(codewordBytes);\n            // TYPESCRIPTPORT: not realy necessary to transform to ints? could redesign everything to work with unsigned bytes?\n            // const codewordsInts = new Int32Array(numCodewords)\n            // for (let i = 0; i < numCodewords; i++) {\n            //   codewordsInts[i] = codewordBytes[i] & 0xFF\n            // }\n            try {\n                this.rsDecoder.decode(codewordsInts, codewordBytes.length - numDataCodewords);\n            }\n            catch (ignored /*: ReedSolomonException*/) {\n                throw new ChecksumException();\n            }\n            // Copy back into array of bytes -- only need to worry about the bytes that were data\n            // We don't care about errors in the error-correction codewords\n            for (let i = 0; i < numDataCodewords; i++) {\n                codewordBytes[i] = /*(byte) */ codewordsInts[i];\n            }\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates an alignment pattern, which are the smaller square patterns found in\n     * all but the simplest QR Codes.</p>\n     *\n     * @author Sean Owen\n     */\n    class AlignmentPattern extends ResultPoint {\n        constructor(posX /*float*/, posY /*float*/, estimatedModuleSize /*float*/) {\n            super(posX, posY);\n            this.estimatedModuleSize = estimatedModuleSize;\n        }\n        /**\n         * <p>Determines if this alignment pattern \"about equals\" an alignment pattern at the stated\n         * position and size -- meaning, it is at nearly the same center with nearly the same size.</p>\n         */\n        aboutEquals(moduleSize /*float*/, i /*float*/, j /*float*/) {\n            if (Math.abs(i - this.getY()) <= moduleSize && Math.abs(j - this.getX()) <= moduleSize) {\n                const moduleSizeDiff = Math.abs(moduleSize - this.estimatedModuleSize);\n                return moduleSizeDiff <= 1.0 || moduleSizeDiff <= this.estimatedModuleSize;\n            }\n            return false;\n        }\n        /**\n         * Combines this object's current estimate of a finder pattern position and module size\n         * with a new estimate. It returns a new {@code FinderPattern} containing an average of the two.\n         */\n        combineEstimate(i /*float*/, j /*float*/, newModuleSize /*float*/) {\n            const combinedX = (this.getX() + j) / 2.0;\n            const combinedY = (this.getY() + i) / 2.0;\n            const combinedModuleSize = (this.estimatedModuleSize + newModuleSize) / 2.0;\n            return new AlignmentPattern(combinedX, combinedY, combinedModuleSize);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.util.ArrayList;*/\n    /*import java.util.List;*/\n    /**\n     * <p>This class attempts to find alignment patterns in a QR Code. Alignment patterns look like finder\n     * patterns but are smaller and appear at regular intervals throughout the image.</p>\n     *\n     * <p>At the moment this only looks for the bottom-right alignment pattern.</p>\n     *\n     * <p>This is mostly a simplified copy of {@link FinderPatternFinder}. It is copied,\n     * pasted and stripped down here for maximum performance but does unfortunately duplicate\n     * some code.</p>\n     *\n     * <p>This class is thread-safe but not reentrant. Each thread must allocate its own object.</p>\n     *\n     * @author Sean Owen\n     */\n    class AlignmentPatternFinder {\n        /**\n         * <p>Creates a finder that will look in a portion of the whole image.</p>\n         *\n         * @param image image to search\n         * @param startX left column from which to start searching\n         * @param startY top row from which to start searching\n         * @param width width of region to search\n         * @param height height of region to search\n         * @param moduleSize estimated module size so far\n         */\n        constructor(image, startX /*int*/, startY /*int*/, width /*int*/, height /*int*/, moduleSize /*float*/, resultPointCallback) {\n            this.image = image;\n            this.startX = startX;\n            this.startY = startY;\n            this.width = width;\n            this.height = height;\n            this.moduleSize = moduleSize;\n            this.resultPointCallback = resultPointCallback;\n            this.possibleCenters = []; // new Array<any>(5))\n            // TYPESCRIPTPORT: array initialization without size as the length is checked below\n            this.crossCheckStateCount = new Int32Array(3);\n        }\n        /**\n         * <p>This method attempts to find the bottom-right alignment pattern in the image. It is a bit messy since\n         * it's pretty performance-critical and so is written to be fast foremost.</p>\n         *\n         * @return {@link AlignmentPattern} if found\n         * @throws NotFoundException if not found\n         */\n        find() {\n            const startX = this.startX;\n            const height = this.height;\n            const width = this.width;\n            const maxJ = startX + width;\n            const middleI = this.startY + (height / 2);\n            // We are looking for black/white/black modules in 1:1:1 ratio\n            // this tracks the number of black/white/black modules seen so far\n            const stateCount = new Int32Array(3);\n            const image = this.image;\n            for (let iGen = 0; iGen < height; iGen++) {\n                // Search from middle outwards\n                const i = middleI + ((iGen & 0x01) === 0 ? Math.floor((iGen + 1) / 2) : -Math.floor((iGen + 1) / 2));\n                stateCount[0] = 0;\n                stateCount[1] = 0;\n                stateCount[2] = 0;\n                let j = startX;\n                // Burn off leading white pixels before anything else; if we start in the middle of\n                // a white run, it doesn't make sense to count its length, since we don't know if the\n                // white run continued to the left of the start point\n                while (j < maxJ && !image.get(j, i)) {\n                    j++;\n                }\n                let currentState = 0;\n                while (j < maxJ) {\n                    if (image.get(j, i)) {\n                        // Black pixel\n                        if (currentState === 1) { // Counting black pixels\n                            stateCount[1]++;\n                        }\n                        else { // Counting white pixels\n                            if (currentState === 2) { // A winner?\n                                if (this.foundPatternCross(stateCount)) { // Yes\n                                    const confirmed = this.handlePossibleCenter(stateCount, i, j);\n                                    if (confirmed !== null) {\n                                        return confirmed;\n                                    }\n                                }\n                                stateCount[0] = stateCount[2];\n                                stateCount[1] = 1;\n                                stateCount[2] = 0;\n                                currentState = 1;\n                            }\n                            else {\n                                stateCount[++currentState]++;\n                            }\n                        }\n                    }\n                    else { // White pixel\n                        if (currentState === 1) { // Counting black pixels\n                            currentState++;\n                        }\n                        stateCount[currentState]++;\n                    }\n                    j++;\n                }\n                if (this.foundPatternCross(stateCount)) {\n                    const confirmed = this.handlePossibleCenter(stateCount, i, maxJ);\n                    if (confirmed !== null) {\n                        return confirmed;\n                    }\n                }\n            }\n            // Hmm, nothing we saw was observed and confirmed twice. If we had\n            // any guess at all, return it.\n            if (this.possibleCenters.length !== 0) {\n                return this.possibleCenters[0];\n            }\n            throw new NotFoundException();\n        }\n        /**\n         * Given a count of black/white/black pixels just seen and an end position,\n         * figures the location of the center of this black/white/black run.\n         */\n        static centerFromEnd(stateCount, end /*int*/) {\n            return (end - stateCount[2]) - stateCount[1] / 2.0;\n        }\n        /**\n         * @param stateCount count of black/white/black pixels just read\n         * @return true iff the proportions of the counts is close enough to the 1/1/1 ratios\n         *         used by alignment patterns to be considered a match\n         */\n        foundPatternCross(stateCount) {\n            const moduleSize = this.moduleSize;\n            const maxVariance = moduleSize / 2.0;\n            for (let i = 0; i < 3; i++) {\n                if (Math.abs(moduleSize - stateCount[i]) >= maxVariance) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        /**\n         * <p>After a horizontal scan finds a potential alignment pattern, this method\n         * \"cross-checks\" by scanning down vertically through the center of the possible\n         * alignment pattern to see if the same proportion is detected.</p>\n         *\n         * @param startI row where an alignment pattern was detected\n         * @param centerJ center of the section that appears to cross an alignment pattern\n         * @param maxCount maximum reasonable number of modules that should be\n         * observed in any reading state, based on the results of the horizontal scan\n         * @return vertical center of alignment pattern, or {@link Float#NaN} if not found\n         */\n        crossCheckVertical(startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n            const image = this.image;\n            const maxI = image.getHeight();\n            const stateCount = this.crossCheckStateCount;\n            stateCount[0] = 0;\n            stateCount[1] = 0;\n            stateCount[2] = 0;\n            // Start counting up from center\n            let i = startI;\n            while (i >= 0 && image.get(centerJ, i) && stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                i--;\n            }\n            // If already too many modules in this state or ran off the edge:\n            if (i < 0 || stateCount[1] > maxCount) {\n                return NaN;\n            }\n            while (i >= 0 && !image.get(centerJ, i) && stateCount[0] <= maxCount) {\n                stateCount[0]++;\n                i--;\n            }\n            if (stateCount[0] > maxCount) {\n                return NaN;\n            }\n            // Now also count down from center\n            i = startI + 1;\n            while (i < maxI && image.get(centerJ, i) && stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                i++;\n            }\n            if (i === maxI || stateCount[1] > maxCount) {\n                return NaN;\n            }\n            while (i < maxI && !image.get(centerJ, i) && stateCount[2] <= maxCount) {\n                stateCount[2]++;\n                i++;\n            }\n            if (stateCount[2] > maxCount) {\n                return NaN;\n            }\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];\n            if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= 2 * originalStateCountTotal) {\n                return NaN;\n            }\n            return this.foundPatternCross(stateCount) ? AlignmentPatternFinder.centerFromEnd(stateCount, i) : NaN;\n        }\n        /**\n         * <p>This is called when a horizontal scan finds a possible alignment pattern. It will\n         * cross check with a vertical scan, and if successful, will see if this pattern had been\n         * found on a previous horizontal scan. If so, we consider it confirmed and conclude we have\n         * found the alignment pattern.</p>\n         *\n         * @param stateCount reading state module counts from horizontal scan\n         * @param i row where alignment pattern may be found\n         * @param j end of possible alignment pattern in row\n         * @return {@link AlignmentPattern} if we have found the same pattern twice, or null if not\n         */\n        handlePossibleCenter(stateCount, i /*int*/, j /*int*/) {\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];\n            const centerJ = AlignmentPatternFinder.centerFromEnd(stateCount, j);\n            const centerI = this.crossCheckVertical(i, /*(int) */ centerJ, 2 * stateCount[1], stateCountTotal);\n            if (!isNaN(centerI)) {\n                const estimatedModuleSize = (stateCount[0] + stateCount[1] + stateCount[2]) / 3.0;\n                for (const center of this.possibleCenters) {\n                    // Look for about the same center and module size:\n                    if (center.aboutEquals(estimatedModuleSize, centerI, centerJ)) {\n                        return center.combineEstimate(centerI, centerJ, estimatedModuleSize);\n                    }\n                }\n                // Hadn't found this before; save it\n                const point = new AlignmentPattern(centerJ, centerI, estimatedModuleSize);\n                this.possibleCenters.push(point);\n                if (this.resultPointCallback !== null && this.resultPointCallback !== undefined) {\n                    this.resultPointCallback.foundPossibleResultPoint(point);\n                }\n            }\n            return null;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates a finder pattern, which are the three square patterns found in\n     * the corners of QR Codes. It also encapsulates a count of similar finder patterns,\n     * as a convenience to the finder's bookkeeping.</p>\n     *\n     * @author Sean Owen\n     */\n    class FinderPattern$1 extends ResultPoint {\n        // FinderPattern(posX: number/*float*/, posY: number/*float*/, estimatedModuleSize: number/*float*/) {\n        //   this(posX, posY, estimatedModuleSize, 1)\n        // }\n        constructor(posX /*float*/, posY /*float*/, estimatedModuleSize /*float*/, count /*int*/) {\n            super(posX, posY);\n            this.estimatedModuleSize = estimatedModuleSize;\n            this.count = count;\n            if (undefined === count) {\n                this.count = 1;\n            }\n        }\n        getEstimatedModuleSize() {\n            return this.estimatedModuleSize;\n        }\n        getCount() {\n            return this.count;\n        }\n        /*\n        void incrementCount() {\n          this.count++\n        }\n         */\n        /**\n         * <p>Determines if this finder pattern \"about equals\" a finder pattern at the stated\n         * position and size -- meaning, it is at nearly the same center with nearly the same size.</p>\n         */\n        aboutEquals(moduleSize /*float*/, i /*float*/, j /*float*/) {\n            if (Math.abs(i - this.getY()) <= moduleSize && Math.abs(j - this.getX()) <= moduleSize) {\n                const moduleSizeDiff = Math.abs(moduleSize - this.estimatedModuleSize);\n                return moduleSizeDiff <= 1.0 || moduleSizeDiff <= this.estimatedModuleSize;\n            }\n            return false;\n        }\n        /**\n         * Combines this object's current estimate of a finder pattern position and module size\n         * with a new estimate. It returns a new {@code FinderPattern} containing a weighted average\n         * based on count.\n         */\n        combineEstimate(i /*float*/, j /*float*/, newModuleSize /*float*/) {\n            const combinedCount = this.count + 1;\n            const combinedX = (this.count * this.getX() + j) / combinedCount;\n            const combinedY = (this.count * this.getY() + i) / combinedCount;\n            const combinedModuleSize = (this.count * this.estimatedModuleSize + newModuleSize) / combinedCount;\n            return new FinderPattern$1(combinedX, combinedY, combinedModuleSize, combinedCount);\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>Encapsulates information about finder patterns in an image, including the location of\n     * the three finder patterns, and their estimated module size.</p>\n     *\n     * @author Sean Owen\n     */\n    class FinderPatternInfo {\n        constructor(patternCenters) {\n            this.bottomLeft = patternCenters[0];\n            this.topLeft = patternCenters[1];\n            this.topRight = patternCenters[2];\n        }\n        getBottomLeft() {\n            return this.bottomLeft;\n        }\n        getTopLeft() {\n            return this.topLeft;\n        }\n        getTopRight() {\n            return this.topRight;\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.io.Serializable;*/\n    /*import java.util.ArrayList;*/\n    /*import java.util.Collections;*/\n    /*import java.util.Comparator;*/\n    /*import java.util.List;*/\n    /*import java.util.Map;*/\n    /**\n     * <p>This class attempts to find finder patterns in a QR Code. Finder patterns are the square\n     * markers at three corners of a QR Code.</p>\n     *\n     * <p>This class is thread-safe but not reentrant. Each thread must allocate its own object.\n     *\n     * @author Sean Owen\n     */\n    class FinderPatternFinder {\n        /**\n         * <p>Creates a finder that will search the image for three finder patterns.</p>\n         *\n         * @param image image to search\n         */\n        // public constructor(image: BitMatrix) {\n        //   this(image, null)\n        // }\n        constructor(image, resultPointCallback) {\n            this.image = image;\n            this.resultPointCallback = resultPointCallback;\n            this.possibleCenters = [];\n            this.crossCheckStateCount = new Int32Array(5);\n            this.resultPointCallback = resultPointCallback;\n        }\n        getImage() {\n            return this.image;\n        }\n        getPossibleCenters() {\n            return this.possibleCenters;\n        }\n        find(hints) {\n            const tryHarder = (hints !== null && hints !== undefined) && undefined !== hints.get(DecodeHintType$1.TRY_HARDER);\n            const pureBarcode = (hints !== null && hints !== undefined) && undefined !== hints.get(DecodeHintType$1.PURE_BARCODE);\n            const image = this.image;\n            const maxI = image.getHeight();\n            const maxJ = image.getWidth();\n            // We are looking for black/white/black/white/black modules in\n            // 1:1:3:1:1 ratio; this tracks the number of such modules seen so far\n            // Let's assume that the maximum version QR Code we support takes up 1/4 the height of the\n            // image, and then account for the center being 3 modules in size. This gives the smallest\n            // number of pixels the center could be, so skip this often. When trying harder, look for all\n            // QR versions regardless of how dense they are.\n            let iSkip = Math.floor((3 * maxI) / (4 * FinderPatternFinder.MAX_MODULES));\n            if (iSkip < FinderPatternFinder.MIN_SKIP || tryHarder) {\n                iSkip = FinderPatternFinder.MIN_SKIP;\n            }\n            let done = false;\n            const stateCount = new Int32Array(5);\n            for (let i = iSkip - 1; i < maxI && !done; i += iSkip) {\n                // Get a row of black/white values\n                stateCount[0] = 0;\n                stateCount[1] = 0;\n                stateCount[2] = 0;\n                stateCount[3] = 0;\n                stateCount[4] = 0;\n                let currentState = 0;\n                for (let j = 0; j < maxJ; j++) {\n                    if (image.get(j, i)) {\n                        // Black pixel\n                        if ((currentState & 1) === 1) { // Counting white pixels\n                            currentState++;\n                        }\n                        stateCount[currentState]++;\n                    }\n                    else { // White pixel\n                        if ((currentState & 1) === 0) { // Counting black pixels\n                            if (currentState === 4) { // A winner?\n                                if (FinderPatternFinder.foundPatternCross(stateCount)) { // Yes\n                                    const confirmed = this.handlePossibleCenter(stateCount, i, j, pureBarcode);\n                                    if (confirmed === true) {\n                                        // Start examining every other line. Checking each line turned out to be too\n                                        // expensive and didn't improve performance.\n                                        iSkip = 2;\n                                        if (this.hasSkipped === true) {\n                                            done = this.haveMultiplyConfirmedCenters();\n                                        }\n                                        else {\n                                            const rowSkip = this.findRowSkip();\n                                            if (rowSkip > stateCount[2]) {\n                                                // Skip rows between row of lower confirmed center\n                                                // and top of presumed third confirmed center\n                                                // but back up a bit to get a full chance of detecting\n                                                // it, entire width of center of finder pattern\n                                                // Skip by rowSkip, but back off by stateCount[2] (size of last center\n                                                // of pattern we saw) to be conservative, and also back off by iSkip which\n                                                // is about to be re-added\n                                                i += rowSkip - stateCount[2] - iSkip;\n                                                j = maxJ - 1;\n                                            }\n                                        }\n                                    }\n                                    else {\n                                        stateCount[0] = stateCount[2];\n                                        stateCount[1] = stateCount[3];\n                                        stateCount[2] = stateCount[4];\n                                        stateCount[3] = 1;\n                                        stateCount[4] = 0;\n                                        currentState = 3;\n                                        continue;\n                                    }\n                                    // Clear state to start looking again\n                                    currentState = 0;\n                                    stateCount[0] = 0;\n                                    stateCount[1] = 0;\n                                    stateCount[2] = 0;\n                                    stateCount[3] = 0;\n                                    stateCount[4] = 0;\n                                }\n                                else { // No, shift counts back by two\n                                    stateCount[0] = stateCount[2];\n                                    stateCount[1] = stateCount[3];\n                                    stateCount[2] = stateCount[4];\n                                    stateCount[3] = 1;\n                                    stateCount[4] = 0;\n                                    currentState = 3;\n                                }\n                            }\n                            else {\n                                stateCount[++currentState]++;\n                            }\n                        }\n                        else { // Counting white pixels\n                            stateCount[currentState]++;\n                        }\n                    }\n                }\n                if (FinderPatternFinder.foundPatternCross(stateCount)) {\n                    const confirmed = this.handlePossibleCenter(stateCount, i, maxJ, pureBarcode);\n                    if (confirmed === true) {\n                        iSkip = stateCount[0];\n                        if (this.hasSkipped) {\n                            // Found a third one\n                            done = this.haveMultiplyConfirmedCenters();\n                        }\n                    }\n                }\n            }\n            const patternInfo = this.selectBestPatterns();\n            ResultPoint.orderBestPatterns(patternInfo);\n            return new FinderPatternInfo(patternInfo);\n        }\n        /**\n         * Given a count of black/white/black/white/black pixels just seen and an end position,\n         * figures the location of the center of this run.\n         */\n        static centerFromEnd(stateCount, end /*int*/) {\n            return (end - stateCount[4] - stateCount[3]) - stateCount[2] / 2.0;\n        }\n        /**\n         * @param stateCount count of black/white/black/white/black pixels just read\n         * @return true iff the proportions of the counts is close enough to the 1/1/3/1/1 ratios\n         *         used by finder patterns to be considered a match\n         */\n        static foundPatternCross(stateCount) {\n            let totalModuleSize = 0;\n            for (let i = 0; i < 5; i++) {\n                const count = stateCount[i];\n                if (count === 0) {\n                    return false;\n                }\n                totalModuleSize += count;\n            }\n            if (totalModuleSize < 7) {\n                return false;\n            }\n            const moduleSize = totalModuleSize / 7.0;\n            const maxVariance = moduleSize / 2.0;\n            // Allow less than 50% variance from 1-1-3-1-1 proportions\n            return Math.abs(moduleSize - stateCount[0]) < maxVariance &&\n                Math.abs(moduleSize - stateCount[1]) < maxVariance &&\n                Math.abs(3.0 * moduleSize - stateCount[2]) < 3 * maxVariance &&\n                Math.abs(moduleSize - stateCount[3]) < maxVariance &&\n                Math.abs(moduleSize - stateCount[4]) < maxVariance;\n        }\n        getCrossCheckStateCount() {\n            const crossCheckStateCount = this.crossCheckStateCount;\n            crossCheckStateCount[0] = 0;\n            crossCheckStateCount[1] = 0;\n            crossCheckStateCount[2] = 0;\n            crossCheckStateCount[3] = 0;\n            crossCheckStateCount[4] = 0;\n            return crossCheckStateCount;\n        }\n        /**\n         * After a vertical and horizontal scan finds a potential finder pattern, this method\n         * \"cross-cross-cross-checks\" by scanning down diagonally through the center of the possible\n         * finder pattern to see if the same proportion is detected.\n         *\n         * @param startI row where a finder pattern was detected\n         * @param centerJ center of the section that appears to cross a finder pattern\n         * @param maxCount maximum reasonable number of modules that should be\n         *  observed in any reading state, based on the results of the horizontal scan\n         * @param originalStateCountTotal The original state count total.\n         * @return true if proportions are withing expected limits\n         */\n        crossCheckDiagonal(startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n            const stateCount = this.getCrossCheckStateCount();\n            // Start counting up, left from center finding black center mass\n            let i = 0;\n            const image = this.image;\n            while (startI >= i && centerJ >= i && image.get(centerJ - i, startI - i)) {\n                stateCount[2]++;\n                i++;\n            }\n            if (startI < i || centerJ < i) {\n                return false;\n            }\n            // Continue up, left finding white space\n            while (startI >= i && centerJ >= i && !image.get(centerJ - i, startI - i) &&\n                stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                i++;\n            }\n            // If already too many modules in this state or ran off the edge:\n            if (startI < i || centerJ < i || stateCount[1] > maxCount) {\n                return false;\n            }\n            // Continue up, left finding black border\n            while (startI >= i && centerJ >= i && image.get(centerJ - i, startI - i) &&\n                stateCount[0] <= maxCount) {\n                stateCount[0]++;\n                i++;\n            }\n            if (stateCount[0] > maxCount) {\n                return false;\n            }\n            const maxI = image.getHeight();\n            const maxJ = image.getWidth();\n            // Now also count down, right from center\n            i = 1;\n            while (startI + i < maxI && centerJ + i < maxJ && image.get(centerJ + i, startI + i)) {\n                stateCount[2]++;\n                i++;\n            }\n            // Ran off the edge?\n            if (startI + i >= maxI || centerJ + i >= maxJ) {\n                return false;\n            }\n            while (startI + i < maxI && centerJ + i < maxJ && !image.get(centerJ + i, startI + i) &&\n                stateCount[3] < maxCount) {\n                stateCount[3]++;\n                i++;\n            }\n            if (startI + i >= maxI || centerJ + i >= maxJ || stateCount[3] >= maxCount) {\n                return false;\n            }\n            while (startI + i < maxI && centerJ + i < maxJ && image.get(centerJ + i, startI + i) &&\n                stateCount[4] < maxCount) {\n                stateCount[4]++;\n                i++;\n            }\n            if (stateCount[4] >= maxCount) {\n                return false;\n            }\n            // If we found a finder-pattern-like section, but its size is more than 100% different than\n            // the original, assume it's a false positive\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] + stateCount[4];\n            return Math.abs(stateCountTotal - originalStateCountTotal) < 2 * originalStateCountTotal &&\n                FinderPatternFinder.foundPatternCross(stateCount);\n        }\n        /**\n         * <p>After a horizontal scan finds a potential finder pattern, this method\n         * \"cross-checks\" by scanning down vertically through the center of the possible\n         * finder pattern to see if the same proportion is detected.</p>\n         *\n         * @param startI row where a finder pattern was detected\n         * @param centerJ center of the section that appears to cross a finder pattern\n         * @param maxCount maximum reasonable number of modules that should be\n         * observed in any reading state, based on the results of the horizontal scan\n         * @return vertical center of finder pattern, or {@link Float#NaN} if not found\n         */\n        crossCheckVertical(startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n            const image = this.image;\n            const maxI = image.getHeight();\n            const stateCount = this.getCrossCheckStateCount();\n            // Start counting up from center\n            let i = startI;\n            while (i >= 0 && image.get(centerJ, i)) {\n                stateCount[2]++;\n                i--;\n            }\n            if (i < 0) {\n                return NaN;\n            }\n            while (i >= 0 && !image.get(centerJ, i) && stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                i--;\n            }\n            // If already too many modules in this state or ran off the edge:\n            if (i < 0 || stateCount[1] > maxCount) {\n                return NaN;\n            }\n            while (i >= 0 && image.get(centerJ, i) && stateCount[0] <= maxCount) {\n                stateCount[0]++;\n                i--;\n            }\n            if (stateCount[0] > maxCount) {\n                return NaN;\n            }\n            // Now also count down from center\n            i = startI + 1;\n            while (i < maxI && image.get(centerJ, i)) {\n                stateCount[2]++;\n                i++;\n            }\n            if (i === maxI) {\n                return NaN;\n            }\n            while (i < maxI && !image.get(centerJ, i) && stateCount[3] < maxCount) {\n                stateCount[3]++;\n                i++;\n            }\n            if (i === maxI || stateCount[3] >= maxCount) {\n                return NaN;\n            }\n            while (i < maxI && image.get(centerJ, i) && stateCount[4] < maxCount) {\n                stateCount[4]++;\n                i++;\n            }\n            if (stateCount[4] >= maxCount) {\n                return NaN;\n            }\n            // If we found a finder-pattern-like section, but its size is more than 40% different than\n            // the original, assume it's a false positive\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n                stateCount[4];\n            if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= 2 * originalStateCountTotal) {\n                return NaN;\n            }\n            return FinderPatternFinder.foundPatternCross(stateCount) ? FinderPatternFinder.centerFromEnd(stateCount, i) : NaN;\n        }\n        /**\n         * <p>Like {@link #crossCheckVertical(int, int, int, int)}, and in fact is basically identical,\n         * except it reads horizontally instead of vertically. This is used to cross-cross\n         * check a vertical cross check and locate the real center of the alignment pattern.</p>\n         */\n        crossCheckHorizontal(startJ /*int*/, centerI /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n            const image = this.image;\n            const maxJ = image.getWidth();\n            const stateCount = this.getCrossCheckStateCount();\n            let j = startJ;\n            while (j >= 0 && image.get(j, centerI)) {\n                stateCount[2]++;\n                j--;\n            }\n            if (j < 0) {\n                return NaN;\n            }\n            while (j >= 0 && !image.get(j, centerI) && stateCount[1] <= maxCount) {\n                stateCount[1]++;\n                j--;\n            }\n            if (j < 0 || stateCount[1] > maxCount) {\n                return NaN;\n            }\n            while (j >= 0 && image.get(j, centerI) && stateCount[0] <= maxCount) {\n                stateCount[0]++;\n                j--;\n            }\n            if (stateCount[0] > maxCount) {\n                return NaN;\n            }\n            j = startJ + 1;\n            while (j < maxJ && image.get(j, centerI)) {\n                stateCount[2]++;\n                j++;\n            }\n            if (j === maxJ) {\n                return NaN;\n            }\n            while (j < maxJ && !image.get(j, centerI) && stateCount[3] < maxCount) {\n                stateCount[3]++;\n                j++;\n            }\n            if (j === maxJ || stateCount[3] >= maxCount) {\n                return NaN;\n            }\n            while (j < maxJ && image.get(j, centerI) && stateCount[4] < maxCount) {\n                stateCount[4]++;\n                j++;\n            }\n            if (stateCount[4] >= maxCount) {\n                return NaN;\n            }\n            // If we found a finder-pattern-like section, but its size is significantly different than\n            // the original, assume it's a false positive\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n                stateCount[4];\n            if (5 * Math.abs(stateCountTotal - originalStateCountTotal) >= originalStateCountTotal) {\n                return NaN;\n            }\n            return FinderPatternFinder.foundPatternCross(stateCount) ? FinderPatternFinder.centerFromEnd(stateCount, j) : NaN;\n        }\n        /**\n         * <p>This is called when a horizontal scan finds a possible alignment pattern. It will\n         * cross check with a vertical scan, and if successful, will, ah, cross-cross-check\n         * with another horizontal scan. This is needed primarily to locate the real horizontal\n         * center of the pattern in cases of extreme skew.\n         * And then we cross-cross-cross check with another diagonal scan.</p>\n         *\n         * <p>If that succeeds the finder pattern location is added to a list that tracks\n         * the number of times each location has been nearly-matched as a finder pattern.\n         * Each additional find is more evidence that the location is in fact a finder\n         * pattern center\n         *\n         * @param stateCount reading state module counts from horizontal scan\n         * @param i row where finder pattern may be found\n         * @param j end of possible finder pattern in row\n         * @param pureBarcode true if in \"pure barcode\" mode\n         * @return true if a finder pattern candidate was found this time\n         */\n        handlePossibleCenter(stateCount, i /*int*/, j /*int*/, pureBarcode) {\n            const stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n                stateCount[4];\n            let centerJ = FinderPatternFinder.centerFromEnd(stateCount, j);\n            let centerI = this.crossCheckVertical(i, /*(int) */ Math.floor(centerJ), stateCount[2], stateCountTotal);\n            if (!isNaN(centerI)) {\n                // Re-cross check\n                centerJ = this.crossCheckHorizontal(/*(int) */ Math.floor(centerJ), /*(int) */ Math.floor(centerI), stateCount[2], stateCountTotal);\n                if (!isNaN(centerJ) &&\n                    (!pureBarcode || this.crossCheckDiagonal(/*(int) */ Math.floor(centerI), /*(int) */ Math.floor(centerJ), stateCount[2], stateCountTotal))) {\n                    const estimatedModuleSize = stateCountTotal / 7.0;\n                    let found = false;\n                    const possibleCenters = this.possibleCenters;\n                    for (let index = 0, length = possibleCenters.length; index < length; index++) {\n                        const center = possibleCenters[index];\n                        // Look for about the same center and module size:\n                        if (center.aboutEquals(estimatedModuleSize, centerI, centerJ)) {\n                            possibleCenters[index] = center.combineEstimate(centerI, centerJ, estimatedModuleSize);\n                            found = true;\n                            break;\n                        }\n                    }\n                    if (!found) {\n                        const point = new FinderPattern$1(centerJ, centerI, estimatedModuleSize);\n                        possibleCenters.push(point);\n                        if (this.resultPointCallback !== null && this.resultPointCallback !== undefined) {\n                            this.resultPointCallback.foundPossibleResultPoint(point);\n                        }\n                    }\n                    return true;\n                }\n            }\n            return false;\n        }\n        /**\n         * @return number of rows we could safely skip during scanning, based on the first\n         *         two finder patterns that have been located. In some cases their position will\n         *         allow us to infer that the third pattern must lie below a certain point farther\n         *         down in the image.\n         */\n        findRowSkip() {\n            const max = this.possibleCenters.length;\n            if (max <= 1) {\n                return 0;\n            }\n            let firstConfirmedCenter = null;\n            for (const center of this.possibleCenters) {\n                if (center.getCount() >= FinderPatternFinder.CENTER_QUORUM) {\n                    if (firstConfirmedCenter == null) {\n                        firstConfirmedCenter = center;\n                    }\n                    else {\n                        // We have two confirmed centers\n                        // How far down can we skip before resuming looking for the next\n                        // pattern? In the worst case, only the difference between the\n                        // difference in the x / y coordinates of the two centers.\n                        // This is the case where you find top left last.\n                        this.hasSkipped = true;\n                        return /*(int) */ Math.floor((Math.abs(firstConfirmedCenter.getX() - center.getX()) -\n                            Math.abs(firstConfirmedCenter.getY() - center.getY())) / 2);\n                    }\n                }\n            }\n            return 0;\n        }\n        /**\n         * @return true iff we have found at least 3 finder patterns that have been detected\n         *         at least {@link #CENTER_QUORUM} times each, and, the estimated module size of the\n         *         candidates is \"pretty similar\"\n         */\n        haveMultiplyConfirmedCenters() {\n            let confirmedCount = 0;\n            let totalModuleSize = 0.0;\n            const max = this.possibleCenters.length;\n            for (const pattern of this.possibleCenters) {\n                if (pattern.getCount() >= FinderPatternFinder.CENTER_QUORUM) {\n                    confirmedCount++;\n                    totalModuleSize += pattern.getEstimatedModuleSize();\n                }\n            }\n            if (confirmedCount < 3) {\n                return false;\n            }\n            // OK, we have at least 3 confirmed centers, but, it's possible that one is a \"false positive\"\n            // and that we need to keep looking. We detect this by asking if the estimated module sizes\n            // vary too much. We arbitrarily say that when the total deviation from average exceeds\n            // 5% of the total module size estimates, it's too much.\n            const average = totalModuleSize / max;\n            let totalDeviation = 0.0;\n            for (const pattern of this.possibleCenters) {\n                totalDeviation += Math.abs(pattern.getEstimatedModuleSize() - average);\n            }\n            return totalDeviation <= 0.05 * totalModuleSize;\n        }\n        /**\n         * @return the 3 best {@link FinderPattern}s from our list of candidates. The \"best\" are\n         *         those that have been detected at least {@link #CENTER_QUORUM} times, and whose module\n         *         size differs from the average among those patterns the least\n         * @throws NotFoundException if 3 such finder patterns do not exist\n         */\n        selectBestPatterns() {\n            const startSize = this.possibleCenters.length;\n            if (startSize < 3) {\n                // Couldn't find enough finder patterns\n                throw new NotFoundException();\n            }\n            const possibleCenters = this.possibleCenters;\n            let average;\n            // Filter outlier possibilities whose module size is too different\n            if (startSize > 3) {\n                // But we can only afford to do so if we have at least 4 possibilities to choose from\n                let totalModuleSize = 0.0;\n                let square = 0.0;\n                for (const center of this.possibleCenters) {\n                    const size = center.getEstimatedModuleSize();\n                    totalModuleSize += size;\n                    square += size * size;\n                }\n                average = totalModuleSize / startSize;\n                let stdDev = Math.sqrt(square / startSize - average * average);\n                possibleCenters.sort(\n                /**\n                 * <p>Orders by furthest from average</p>\n                 */\n                // FurthestFromAverageComparator implements Comparator<FinderPattern>\n                (center1, center2) => {\n                    const dA = Math.abs(center2.getEstimatedModuleSize() - average);\n                    const dB = Math.abs(center1.getEstimatedModuleSize() - average);\n                    return dA < dB ? -1 : dA > dB ? 1 : 0;\n                });\n                const limit = Math.max(0.2 * average, stdDev);\n                for (let i = 0; i < possibleCenters.length && possibleCenters.length > 3; i++) {\n                    const pattern = possibleCenters[i];\n                    if (Math.abs(pattern.getEstimatedModuleSize() - average) > limit) {\n                        possibleCenters.splice(i, 1);\n                        i--;\n                    }\n                }\n            }\n            if (possibleCenters.length > 3) {\n                // Throw away all but those first size candidate points we found.\n                let totalModuleSize = 0.0;\n                for (const possibleCenter of possibleCenters) {\n                    totalModuleSize += possibleCenter.getEstimatedModuleSize();\n                }\n                average = totalModuleSize / possibleCenters.length;\n                possibleCenters.sort(\n                /**\n                 * <p>Orders by {@link FinderPattern#getCount()}, descending.</p>\n                 */\n                // CenterComparator implements Comparator<FinderPattern>\n                (center1, center2) => {\n                    if (center2.getCount() === center1.getCount()) {\n                        const dA = Math.abs(center2.getEstimatedModuleSize() - average);\n                        const dB = Math.abs(center1.getEstimatedModuleSize() - average);\n                        return dA < dB ? 1 : dA > dB ? -1 : 0;\n                    }\n                    else {\n                        return center2.getCount() - center1.getCount();\n                    }\n                });\n                possibleCenters.splice(3); // this is not realy necessary as we only return first 3 anyway\n            }\n            return [\n                possibleCenters[0],\n                possibleCenters[1],\n                possibleCenters[2]\n            ];\n        }\n    }\n    FinderPatternFinder.CENTER_QUORUM = 2;\n    FinderPatternFinder.MIN_SKIP = 3; // 1 pixel/module times 3 modules/center\n    FinderPatternFinder.MAX_MODULES = 57; // support up to version 10 for mobile clients\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.util.Map;*/\n    /**\n     * <p>Encapsulates logic that can detect a QR Code in an image, even if the QR Code\n     * is rotated or skewed, or partially obscured.</p>\n     *\n     * @author Sean Owen\n     */\n    class Detector$2 {\n        constructor(image) {\n            this.image = image;\n        }\n        getImage() {\n            return this.image;\n        }\n        getResultPointCallback() {\n            return this.resultPointCallback;\n        }\n        /**\n         * <p>Detects a QR Code in an image.</p>\n         *\n         * @return {@link DetectorResult} encapsulating results of detecting a QR Code\n         * @throws NotFoundException if QR Code cannot be found\n         * @throws FormatException if a QR Code cannot be decoded\n         */\n        // public detect(): DetectorResult /*throws NotFoundException, FormatException*/ {\n        //   return detect(null)\n        // }\n        /**\n         * <p>Detects a QR Code in an image.</p>\n         *\n         * @param hints optional hints to detector\n         * @return {@link DetectorResult} encapsulating results of detecting a QR Code\n         * @throws NotFoundException if QR Code cannot be found\n         * @throws FormatException if a QR Code cannot be decoded\n         */\n        detect(hints) {\n            this.resultPointCallback = (hints === null || hints === undefined) ? null :\n                /*(ResultPointCallback) */ hints.get(DecodeHintType$1.NEED_RESULT_POINT_CALLBACK);\n            const finder = new FinderPatternFinder(this.image, this.resultPointCallback);\n            const info = finder.find(hints);\n            return this.processFinderPatternInfo(info);\n        }\n        processFinderPatternInfo(info) {\n            const topLeft = info.getTopLeft();\n            const topRight = info.getTopRight();\n            const bottomLeft = info.getBottomLeft();\n            const moduleSize = this.calculateModuleSize(topLeft, topRight, bottomLeft);\n            if (moduleSize < 1.0) {\n                throw new NotFoundException('No pattern found in proccess finder.');\n            }\n            const dimension = Detector$2.computeDimension(topLeft, topRight, bottomLeft, moduleSize);\n            const provisionalVersion = Version$1.getProvisionalVersionForDimension(dimension);\n            const modulesBetweenFPCenters = provisionalVersion.getDimensionForVersion() - 7;\n            let alignmentPattern = null;\n            // Anything above version 1 has an alignment pattern\n            if (provisionalVersion.getAlignmentPatternCenters().length > 0) {\n                // Guess where a \"bottom right\" finder pattern would have been\n                const bottomRightX = topRight.getX() - topLeft.getX() + bottomLeft.getX();\n                const bottomRightY = topRight.getY() - topLeft.getY() + bottomLeft.getY();\n                // Estimate that alignment pattern is closer by 3 modules\n                // from \"bottom right\" to known top left location\n                const correctionToTopLeft = 1.0 - 3.0 / modulesBetweenFPCenters;\n                const estAlignmentX = /*(int) */ Math.floor(topLeft.getX() + correctionToTopLeft * (bottomRightX - topLeft.getX()));\n                const estAlignmentY = /*(int) */ Math.floor(topLeft.getY() + correctionToTopLeft * (bottomRightY - topLeft.getY()));\n                // Kind of arbitrary -- expand search radius before giving up\n                for (let i = 4; i <= 16; i <<= 1) {\n                    try {\n                        alignmentPattern = this.findAlignmentInRegion(moduleSize, estAlignmentX, estAlignmentY, i);\n                        break;\n                    }\n                    catch (re /*NotFoundException*/) {\n                        if (!(re instanceof NotFoundException)) {\n                            throw re;\n                        }\n                        // try next round\n                    }\n                }\n                // If we didn't find alignment pattern... well try anyway without it\n            }\n            const transform = Detector$2.createTransform(topLeft, topRight, bottomLeft, alignmentPattern, dimension);\n            const bits = Detector$2.sampleGrid(this.image, transform, dimension);\n            let points;\n            if (alignmentPattern === null) {\n                points = [bottomLeft, topLeft, topRight];\n            }\n            else {\n                points = [bottomLeft, topLeft, topRight, alignmentPattern];\n            }\n            return new DetectorResult(bits, points);\n        }\n        static createTransform(topLeft, topRight, bottomLeft, alignmentPattern, dimension /*int*/) {\n            const dimMinusThree = dimension - 3.5;\n            let bottomRightX; /*float*/\n            let bottomRightY; /*float*/\n            let sourceBottomRightX; /*float*/\n            let sourceBottomRightY; /*float*/\n            if (alignmentPattern !== null) {\n                bottomRightX = alignmentPattern.getX();\n                bottomRightY = alignmentPattern.getY();\n                sourceBottomRightX = dimMinusThree - 3.0;\n                sourceBottomRightY = sourceBottomRightX;\n            }\n            else {\n                // Don't have an alignment pattern, just make up the bottom-right point\n                bottomRightX = (topRight.getX() - topLeft.getX()) + bottomLeft.getX();\n                bottomRightY = (topRight.getY() - topLeft.getY()) + bottomLeft.getY();\n                sourceBottomRightX = dimMinusThree;\n                sourceBottomRightY = dimMinusThree;\n            }\n            return PerspectiveTransform.quadrilateralToQuadrilateral(3.5, 3.5, dimMinusThree, 3.5, sourceBottomRightX, sourceBottomRightY, 3.5, dimMinusThree, topLeft.getX(), topLeft.getY(), topRight.getX(), topRight.getY(), bottomRightX, bottomRightY, bottomLeft.getX(), bottomLeft.getY());\n        }\n        static sampleGrid(image, transform, dimension /*int*/) {\n            const sampler = GridSamplerInstance.getInstance();\n            return sampler.sampleGridWithTransform(image, dimension, dimension, transform);\n        }\n        /**\n         * <p>Computes the dimension (number of modules on a size) of the QR Code based on the position\n         * of the finder patterns and estimated module size.</p>\n         */\n        static computeDimension(topLeft, topRight, bottomLeft, moduleSize /*float*/) {\n            const tltrCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, topRight) / moduleSize);\n            const tlblCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, bottomLeft) / moduleSize);\n            let dimension = Math.floor((tltrCentersDimension + tlblCentersDimension) / 2) + 7;\n            switch (dimension & 0x03) { // mod 4\n                case 0:\n                    dimension++;\n                    break;\n                // 1? do nothing\n                case 2:\n                    dimension--;\n                    break;\n                case 3:\n                    throw new NotFoundException('Dimensions could be not found.');\n            }\n            return dimension;\n        }\n        /**\n         * <p>Computes an average estimated module size based on estimated derived from the positions\n         * of the three finder patterns.</p>\n         *\n         * @param topLeft detected top-left finder pattern center\n         * @param topRight detected top-right finder pattern center\n         * @param bottomLeft detected bottom-left finder pattern center\n         * @return estimated module size\n         */\n        calculateModuleSize(topLeft, topRight, bottomLeft) {\n            // Take the average\n            return (this.calculateModuleSizeOneWay(topLeft, topRight) +\n                this.calculateModuleSizeOneWay(topLeft, bottomLeft)) / 2.0;\n        }\n        /**\n         * <p>Estimates module size based on two finder patterns -- it uses\n         * {@link #sizeOfBlackWhiteBlackRunBothWays(int, int, int, int)} to figure the\n         * width of each, measuring along the axis between their centers.</p>\n         */\n        calculateModuleSizeOneWay(pattern, otherPattern) {\n            const moduleSizeEst1 = this.sizeOfBlackWhiteBlackRunBothWays(/*(int) */ Math.floor(pattern.getX()), \n            /*(int) */ Math.floor(pattern.getY()), \n            /*(int) */ Math.floor(otherPattern.getX()), \n            /*(int) */ Math.floor(otherPattern.getY()));\n            const moduleSizeEst2 = this.sizeOfBlackWhiteBlackRunBothWays(/*(int) */ Math.floor(otherPattern.getX()), \n            /*(int) */ Math.floor(otherPattern.getY()), \n            /*(int) */ Math.floor(pattern.getX()), \n            /*(int) */ Math.floor(pattern.getY()));\n            if (isNaN(moduleSizeEst1)) {\n                return moduleSizeEst2 / 7.0;\n            }\n            if (isNaN(moduleSizeEst2)) {\n                return moduleSizeEst1 / 7.0;\n            }\n            // Average them, and divide by 7 since we've counted the width of 3 black modules,\n            // and 1 white and 1 black module on either side. Ergo, divide sum by 14.\n            return (moduleSizeEst1 + moduleSizeEst2) / 14.0;\n        }\n        /**\n         * See {@link #sizeOfBlackWhiteBlackRun(int, int, int, int)}; computes the total width of\n         * a finder pattern by looking for a black-white-black run from the center in the direction\n         * of another point (another finder pattern center), and in the opposite direction too.\n         */\n        sizeOfBlackWhiteBlackRunBothWays(fromX /*int*/, fromY /*int*/, toX /*int*/, toY /*int*/) {\n            let result = this.sizeOfBlackWhiteBlackRun(fromX, fromY, toX, toY);\n            // Now count other way -- don't run off image though of course\n            let scale = 1.0;\n            let otherToX = fromX - (toX - fromX);\n            if (otherToX < 0) {\n                scale = fromX / /*(float) */ (fromX - otherToX);\n                otherToX = 0;\n            }\n            else if (otherToX >= this.image.getWidth()) {\n                scale = (this.image.getWidth() - 1 - fromX) / /*(float) */ (otherToX - fromX);\n                otherToX = this.image.getWidth() - 1;\n            }\n            let otherToY = /*(int) */ Math.floor(fromY - (toY - fromY) * scale);\n            scale = 1.0;\n            if (otherToY < 0) {\n                scale = fromY / /*(float) */ (fromY - otherToY);\n                otherToY = 0;\n            }\n            else if (otherToY >= this.image.getHeight()) {\n                scale = (this.image.getHeight() - 1 - fromY) / /*(float) */ (otherToY - fromY);\n                otherToY = this.image.getHeight() - 1;\n            }\n            otherToX = /*(int) */ Math.floor(fromX + (otherToX - fromX) * scale);\n            result += this.sizeOfBlackWhiteBlackRun(fromX, fromY, otherToX, otherToY);\n            // Middle pixel is double-counted this way; subtract 1\n            return result - 1.0;\n        }\n        /**\n         * <p>This method traces a line from a point in the image, in the direction towards another point.\n         * It begins in a black region, and keeps going until it finds white, then black, then white again.\n         * It reports the distance from the start to this point.</p>\n         *\n         * <p>This is used when figuring out how wide a finder pattern is, when the finder pattern\n         * may be skewed or rotated.</p>\n         */\n        sizeOfBlackWhiteBlackRun(fromX /*int*/, fromY /*int*/, toX /*int*/, toY /*int*/) {\n            // Mild variant of Bresenham's algorithm\n            // see http://en.wikipedia.org/wiki/Bresenham's_line_algorithm\n            const steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);\n            if (steep) {\n                let temp = fromX;\n                fromX = fromY;\n                fromY = temp;\n                temp = toX;\n                toX = toY;\n                toY = temp;\n            }\n            const dx = Math.abs(toX - fromX);\n            const dy = Math.abs(toY - fromY);\n            let error = -dx / 2;\n            const xstep = fromX < toX ? 1 : -1;\n            const ystep = fromY < toY ? 1 : -1;\n            // In black pixels, looking for white, first or second time.\n            let state = 0;\n            // Loop up until x == toX, but not beyond\n            const xLimit = toX + xstep;\n            for (let x = fromX, y = fromY; x !== xLimit; x += xstep) {\n                const realX = steep ? y : x;\n                const realY = steep ? x : y;\n                // Does current pixel mean we have moved white to black or vice versa?\n                // Scanning black in state 0,2 and white in state 1, so if we find the wrong\n                // color, advance to next state or end if we are in state 2 already\n                if ((state === 1) === this.image.get(realX, realY)) {\n                    if (state === 2) {\n                        return MathUtils.distance(x, y, fromX, fromY);\n                    }\n                    state++;\n                }\n                error += dy;\n                if (error > 0) {\n                    if (y === toY) {\n                        break;\n                    }\n                    y += ystep;\n                    error -= dx;\n                }\n            }\n            // Found black-white-black; give the benefit of the doubt that the next pixel outside the image\n            // is \"white\" so this last point at (toX+xStep,toY) is the right ending. This is really a\n            // small approximation; (toX+xStep,toY+yStep) might be really correct. Ignore this.\n            if (state === 2) {\n                return MathUtils.distance(toX + xstep, toY, fromX, fromY);\n            }\n            // else we didn't find even black-white-black; no estimate is really possible\n            return NaN;\n        }\n        /**\n         * <p>Attempts to locate an alignment pattern in a limited region of the image, which is\n         * guessed to contain it. This method uses {@link AlignmentPattern}.</p>\n         *\n         * @param overallEstModuleSize estimated module size so far\n         * @param estAlignmentX x coordinate of center of area probably containing alignment pattern\n         * @param estAlignmentY y coordinate of above\n         * @param allowanceFactor number of pixels in all directions to search from the center\n         * @return {@link AlignmentPattern} if found, or null otherwise\n         * @throws NotFoundException if an unexpected error occurs during detection\n         */\n        findAlignmentInRegion(overallEstModuleSize /*float*/, estAlignmentX /*int*/, estAlignmentY /*int*/, allowanceFactor /*float*/) {\n            // Look for an alignment pattern (3 modules in size) around where it\n            // should be\n            const allowance = /*(int) */ Math.floor(allowanceFactor * overallEstModuleSize);\n            const alignmentAreaLeftX = Math.max(0, estAlignmentX - allowance);\n            const alignmentAreaRightX = Math.min(this.image.getWidth() - 1, estAlignmentX + allowance);\n            if (alignmentAreaRightX - alignmentAreaLeftX < overallEstModuleSize * 3) {\n                throw new NotFoundException('Alignment top exceeds estimated module size.');\n            }\n            const alignmentAreaTopY = Math.max(0, estAlignmentY - allowance);\n            const alignmentAreaBottomY = Math.min(this.image.getHeight() - 1, estAlignmentY + allowance);\n            if (alignmentAreaBottomY - alignmentAreaTopY < overallEstModuleSize * 3) {\n                throw new NotFoundException('Alignment bottom exceeds estimated module size.');\n            }\n            const alignmentFinder = new AlignmentPatternFinder(this.image, alignmentAreaLeftX, alignmentAreaTopY, alignmentAreaRightX - alignmentAreaLeftX, alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize, this.resultPointCallback);\n            return alignmentFinder.find();\n        }\n    }\n\n    /*\n     * Copyright 2007 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*import java.util.List;*/\n    /*import java.util.Map;*/\n    /**\n     * This implementation can detect and decode QR Codes in an image.\n     *\n     * @author Sean Owen\n     */\n    class QRCodeReader {\n        constructor() {\n            this.decoder = new Decoder$2();\n        }\n        getDecoder() {\n            return this.decoder;\n        }\n        /**\n         * Locates and decodes a QR code in an image.\n         *\n         * @return a representing: string the content encoded by the QR code\n         * @throws NotFoundException if a QR code cannot be found\n         * @throws FormatException if a QR code cannot be decoded\n         * @throws ChecksumException if error correction fails\n         */\n        /*@Override*/\n        // public decode(image: BinaryBitmap): Result /*throws NotFoundException, ChecksumException, FormatException */ {\n        //   return this.decode(image, null)\n        // }\n        /*@Override*/\n        decode(image, hints) {\n            let decoderResult;\n            let points;\n            if (hints !== undefined && hints !== null && undefined !== hints.get(DecodeHintType$1.PURE_BARCODE)) {\n                const bits = QRCodeReader.extractPureBits(image.getBlackMatrix());\n                decoderResult = this.decoder.decodeBitMatrix(bits, hints);\n                points = QRCodeReader.NO_POINTS;\n            }\n            else {\n                const detectorResult = new Detector$2(image.getBlackMatrix()).detect(hints);\n                decoderResult = this.decoder.decodeBitMatrix(detectorResult.getBits(), hints);\n                points = detectorResult.getPoints();\n            }\n            // If the code was mirrored: swap the bottom-left and the top-right points.\n            if (decoderResult.getOther() instanceof QRCodeDecoderMetaData) {\n                decoderResult.getOther().applyMirroredCorrection(points);\n            }\n            const result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat$1.QR_CODE, undefined);\n            const byteSegments = decoderResult.getByteSegments();\n            if (byteSegments !== null) {\n                result.putMetadata(ResultMetadataType$1.BYTE_SEGMENTS, byteSegments);\n            }\n            const ecLevel = decoderResult.getECLevel();\n            if (ecLevel !== null) {\n                result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, ecLevel);\n            }\n            if (decoderResult.hasStructuredAppend()) {\n                result.putMetadata(ResultMetadataType$1.STRUCTURED_APPEND_SEQUENCE, decoderResult.getStructuredAppendSequenceNumber());\n                result.putMetadata(ResultMetadataType$1.STRUCTURED_APPEND_PARITY, decoderResult.getStructuredAppendParity());\n            }\n            return result;\n        }\n        /*@Override*/\n        reset() {\n            // do nothing\n        }\n        /**\n         * This method detects a code in a \"pure\" image -- that is, pure monochrome image\n         * which contains only an unrotated, unskewed, image of a code, with some white border\n         * around it. This is a specialized method that works exceptionally fast in this special\n         * case.\n         *\n         * @see com.google.zxing.datamatrix.DataMatrixReader#extractPureBits(BitMatrix)\n         */\n        static extractPureBits(image) {\n            const leftTopBlack = image.getTopLeftOnBit();\n            const rightBottomBlack = image.getBottomRightOnBit();\n            if (leftTopBlack === null || rightBottomBlack === null) {\n                throw new NotFoundException();\n            }\n            const moduleSize = this.moduleSize(leftTopBlack, image);\n            let top = leftTopBlack[1];\n            let bottom = rightBottomBlack[1];\n            let left = leftTopBlack[0];\n            let right = rightBottomBlack[0];\n            // Sanity check!\n            if (left >= right || top >= bottom) {\n                throw new NotFoundException();\n            }\n            if (bottom - top !== right - left) {\n                // Special case, where bottom-right module wasn't black so we found something else in the last row\n                // Assume it's a square, so use height as the width\n                right = left + (bottom - top);\n                if (right >= image.getWidth()) {\n                    // Abort if that would not make sense -- off image\n                    throw new NotFoundException();\n                }\n            }\n            const matrixWidth = Math.round((right - left + 1) / moduleSize);\n            const matrixHeight = Math.round((bottom - top + 1) / moduleSize);\n            if (matrixWidth <= 0 || matrixHeight <= 0) {\n                throw new NotFoundException();\n            }\n            if (matrixHeight !== matrixWidth) {\n                // Only possibly decode square regions\n                throw new NotFoundException();\n            }\n            // Push in the \"border\" by half the module width so that we start\n            // sampling in the middle of the module. Just in case the image is a\n            // little off, this will help recover.\n            const nudge = /*(int) */ Math.floor(moduleSize / 2.0);\n            top += nudge;\n            left += nudge;\n            // But careful that this does not sample off the edge\n            // \"right\" is the farthest-right valid pixel location -- right+1 is not necessarily\n            // This is positive by how much the inner x loop below would be too large\n            const nudgedTooFarRight = left + /*(int) */ Math.floor((matrixWidth - 1) * moduleSize) - right;\n            if (nudgedTooFarRight > 0) {\n                if (nudgedTooFarRight > nudge) {\n                    // Neither way fits; abort\n                    throw new NotFoundException();\n                }\n                left -= nudgedTooFarRight;\n            }\n            // See logic above\n            const nudgedTooFarDown = top + /*(int) */ Math.floor((matrixHeight - 1) * moduleSize) - bottom;\n            if (nudgedTooFarDown > 0) {\n                if (nudgedTooFarDown > nudge) {\n                    // Neither way fits; abort\n                    throw new NotFoundException();\n                }\n                top -= nudgedTooFarDown;\n            }\n            // Now just read off the bits\n            const bits = new BitMatrix(matrixWidth, matrixHeight);\n            for (let y = 0; y < matrixHeight; y++) {\n                const iOffset = top + /*(int) */ Math.floor(y * moduleSize);\n                for (let x = 0; x < matrixWidth; x++) {\n                    if (image.get(left + /*(int) */ Math.floor(x * moduleSize), iOffset)) {\n                        bits.set(x, y);\n                    }\n                }\n            }\n            return bits;\n        }\n        static moduleSize(leftTopBlack, image) {\n            const height = image.getHeight();\n            const width = image.getWidth();\n            let x = leftTopBlack[0];\n            let y = leftTopBlack[1];\n            let inBlack = true;\n            let transitions = 0;\n            while (x < width && y < height) {\n                if (inBlack !== image.get(x, y)) {\n                    if (++transitions === 5) {\n                        break;\n                    }\n                    inBlack = !inBlack;\n                }\n                x++;\n                y++;\n            }\n            if (x === width || y === height) {\n                throw new NotFoundException();\n            }\n            return (x - leftTopBlack[0]) / 7.0;\n        }\n    }\n    QRCodeReader.NO_POINTS = new Array();\n\n    /*\n    * Copyright 2009 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * @author SITA Lab (kevin.osullivan@sita.aero)\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417Common {\n        PDF417Common() {\n        }\n        /**\n         * @param moduleBitCount values to sum\n         * @return sum of values\n         * @deprecated call {@link MathUtils#sum(int[])}\n         */\n        // @Deprecated\n        static getBitCountSum(moduleBitCount) {\n            return MathUtils.sum(moduleBitCount);\n        }\n        static toIntArray(list) {\n            if (list == null || !list.length) {\n                return PDF417Common.EMPTY_INT_ARRAY;\n            }\n            const result = new Int32Array(list.length);\n            let i = 0;\n            for (const integer of list) {\n                result[i++] = integer;\n            }\n            return result;\n        }\n        /**\n         * @param symbol encoded symbol to translate to a codeword\n         * @return the codeword corresponding to the symbol.\n         */\n        static getCodeword(symbol /*int*/) {\n            const i = Arrays.binarySearch(PDF417Common.SYMBOL_TABLE, symbol & 0x3FFFF);\n            if (i < 0) {\n                return -1;\n            }\n            return (PDF417Common.CODEWORD_TABLE[i] - 1) % PDF417Common.NUMBER_OF_CODEWORDS;\n        }\n    }\n    PDF417Common.NUMBER_OF_CODEWORDS = 929;\n    // Maximum Codewords (Data + Error).\n    PDF417Common.MAX_CODEWORDS_IN_BARCODE = PDF417Common.NUMBER_OF_CODEWORDS - 1;\n    PDF417Common.MIN_ROWS_IN_BARCODE = 3;\n    PDF417Common.MAX_ROWS_IN_BARCODE = 90;\n    // One left row indication column + max 30 data columns + one right row indicator column\n    // public static /*final*/ MAX_CODEWORDS_IN_ROW: /*int*/ number = 32;\n    PDF417Common.MODULES_IN_CODEWORD = 17;\n    PDF417Common.MODULES_IN_STOP_PATTERN = 18;\n    PDF417Common.BARS_IN_MODULE = 8;\n    PDF417Common.EMPTY_INT_ARRAY = new Int32Array([]);\n    /**\n     * The sorted table of all possible symbols. Extracted from the PDF417\n     * specification. The index of a symbol in this table corresponds to the\n     * index into the codeword table.\n     */\n    PDF417Common.SYMBOL_TABLE = Int32Array.from([\n        0x1025e, 0x1027a, 0x1029e, 0x102bc, 0x102f2, 0x102f4, 0x1032e, 0x1034e, 0x1035c, 0x10396, 0x103a6, 0x103ac,\n        0x10422, 0x10428, 0x10436, 0x10442, 0x10444, 0x10448, 0x10450, 0x1045e, 0x10466, 0x1046c, 0x1047a, 0x10482,\n        0x1049e, 0x104a0, 0x104bc, 0x104c6, 0x104d8, 0x104ee, 0x104f2, 0x104f4, 0x10504, 0x10508, 0x10510, 0x1051e,\n        0x10520, 0x1053c, 0x10540, 0x10578, 0x10586, 0x1058c, 0x10598, 0x105b0, 0x105be, 0x105ce, 0x105dc, 0x105e2,\n        0x105e4, 0x105e8, 0x105f6, 0x1062e, 0x1064e, 0x1065c, 0x1068e, 0x1069c, 0x106b8, 0x106de, 0x106fa, 0x10716,\n        0x10726, 0x1072c, 0x10746, 0x1074c, 0x10758, 0x1076e, 0x10792, 0x10794, 0x107a2, 0x107a4, 0x107a8, 0x107b6,\n        0x10822, 0x10828, 0x10842, 0x10848, 0x10850, 0x1085e, 0x10866, 0x1086c, 0x1087a, 0x10882, 0x10884, 0x10890,\n        0x1089e, 0x108a0, 0x108bc, 0x108c6, 0x108cc, 0x108d8, 0x108ee, 0x108f2, 0x108f4, 0x10902, 0x10908, 0x1091e,\n        0x10920, 0x1093c, 0x10940, 0x10978, 0x10986, 0x10998, 0x109b0, 0x109be, 0x109ce, 0x109dc, 0x109e2, 0x109e4,\n        0x109e8, 0x109f6, 0x10a08, 0x10a10, 0x10a1e, 0x10a20, 0x10a3c, 0x10a40, 0x10a78, 0x10af0, 0x10b06, 0x10b0c,\n        0x10b18, 0x10b30, 0x10b3e, 0x10b60, 0x10b7c, 0x10b8e, 0x10b9c, 0x10bb8, 0x10bc2, 0x10bc4, 0x10bc8, 0x10bd0,\n        0x10bde, 0x10be6, 0x10bec, 0x10c2e, 0x10c4e, 0x10c5c, 0x10c62, 0x10c64, 0x10c68, 0x10c76, 0x10c8e, 0x10c9c,\n        0x10cb8, 0x10cc2, 0x10cc4, 0x10cc8, 0x10cd0, 0x10cde, 0x10ce6, 0x10cec, 0x10cfa, 0x10d0e, 0x10d1c, 0x10d38,\n        0x10d70, 0x10d7e, 0x10d82, 0x10d84, 0x10d88, 0x10d90, 0x10d9e, 0x10da0, 0x10dbc, 0x10dc6, 0x10dcc, 0x10dd8,\n        0x10dee, 0x10df2, 0x10df4, 0x10e16, 0x10e26, 0x10e2c, 0x10e46, 0x10e58, 0x10e6e, 0x10e86, 0x10e8c, 0x10e98,\n        0x10eb0, 0x10ebe, 0x10ece, 0x10edc, 0x10f0a, 0x10f12, 0x10f14, 0x10f22, 0x10f28, 0x10f36, 0x10f42, 0x10f44,\n        0x10f48, 0x10f50, 0x10f5e, 0x10f66, 0x10f6c, 0x10fb2, 0x10fb4, 0x11022, 0x11028, 0x11042, 0x11048, 0x11050,\n        0x1105e, 0x1107a, 0x11082, 0x11084, 0x11090, 0x1109e, 0x110a0, 0x110bc, 0x110c6, 0x110cc, 0x110d8, 0x110ee,\n        0x110f2, 0x110f4, 0x11102, 0x1111e, 0x11120, 0x1113c, 0x11140, 0x11178, 0x11186, 0x11198, 0x111b0, 0x111be,\n        0x111ce, 0x111dc, 0x111e2, 0x111e4, 0x111e8, 0x111f6, 0x11208, 0x1121e, 0x11220, 0x11278, 0x112f0, 0x1130c,\n        0x11330, 0x1133e, 0x11360, 0x1137c, 0x1138e, 0x1139c, 0x113b8, 0x113c2, 0x113c8, 0x113d0, 0x113de, 0x113e6,\n        0x113ec, 0x11408, 0x11410, 0x1141e, 0x11420, 0x1143c, 0x11440, 0x11478, 0x114f0, 0x115e0, 0x1160c, 0x11618,\n        0x11630, 0x1163e, 0x11660, 0x1167c, 0x116c0, 0x116f8, 0x1171c, 0x11738, 0x11770, 0x1177e, 0x11782, 0x11784,\n        0x11788, 0x11790, 0x1179e, 0x117a0, 0x117bc, 0x117c6, 0x117cc, 0x117d8, 0x117ee, 0x1182e, 0x11834, 0x1184e,\n        0x1185c, 0x11862, 0x11864, 0x11868, 0x11876, 0x1188e, 0x1189c, 0x118b8, 0x118c2, 0x118c8, 0x118d0, 0x118de,\n        0x118e6, 0x118ec, 0x118fa, 0x1190e, 0x1191c, 0x11938, 0x11970, 0x1197e, 0x11982, 0x11984, 0x11990, 0x1199e,\n        0x119a0, 0x119bc, 0x119c6, 0x119cc, 0x119d8, 0x119ee, 0x119f2, 0x119f4, 0x11a0e, 0x11a1c, 0x11a38, 0x11a70,\n        0x11a7e, 0x11ae0, 0x11afc, 0x11b08, 0x11b10, 0x11b1e, 0x11b20, 0x11b3c, 0x11b40, 0x11b78, 0x11b8c, 0x11b98,\n        0x11bb0, 0x11bbe, 0x11bce, 0x11bdc, 0x11be2, 0x11be4, 0x11be8, 0x11bf6, 0x11c16, 0x11c26, 0x11c2c, 0x11c46,\n        0x11c4c, 0x11c58, 0x11c6e, 0x11c86, 0x11c98, 0x11cb0, 0x11cbe, 0x11cce, 0x11cdc, 0x11ce2, 0x11ce4, 0x11ce8,\n        0x11cf6, 0x11d06, 0x11d0c, 0x11d18, 0x11d30, 0x11d3e, 0x11d60, 0x11d7c, 0x11d8e, 0x11d9c, 0x11db8, 0x11dc4,\n        0x11dc8, 0x11dd0, 0x11dde, 0x11de6, 0x11dec, 0x11dfa, 0x11e0a, 0x11e12, 0x11e14, 0x11e22, 0x11e24, 0x11e28,\n        0x11e36, 0x11e42, 0x11e44, 0x11e50, 0x11e5e, 0x11e66, 0x11e6c, 0x11e82, 0x11e84, 0x11e88, 0x11e90, 0x11e9e,\n        0x11ea0, 0x11ebc, 0x11ec6, 0x11ecc, 0x11ed8, 0x11eee, 0x11f1a, 0x11f2e, 0x11f32, 0x11f34, 0x11f4e, 0x11f5c,\n        0x11f62, 0x11f64, 0x11f68, 0x11f76, 0x12048, 0x1205e, 0x12082, 0x12084, 0x12090, 0x1209e, 0x120a0, 0x120bc,\n        0x120d8, 0x120f2, 0x120f4, 0x12108, 0x1211e, 0x12120, 0x1213c, 0x12140, 0x12178, 0x12186, 0x12198, 0x121b0,\n        0x121be, 0x121e2, 0x121e4, 0x121e8, 0x121f6, 0x12204, 0x12210, 0x1221e, 0x12220, 0x12278, 0x122f0, 0x12306,\n        0x1230c, 0x12330, 0x1233e, 0x12360, 0x1237c, 0x1238e, 0x1239c, 0x123b8, 0x123c2, 0x123c8, 0x123d0, 0x123e6,\n        0x123ec, 0x1241e, 0x12420, 0x1243c, 0x124f0, 0x125e0, 0x12618, 0x1263e, 0x12660, 0x1267c, 0x126c0, 0x126f8,\n        0x12738, 0x12770, 0x1277e, 0x12782, 0x12784, 0x12790, 0x1279e, 0x127a0, 0x127bc, 0x127c6, 0x127cc, 0x127d8,\n        0x127ee, 0x12820, 0x1283c, 0x12840, 0x12878, 0x128f0, 0x129e0, 0x12bc0, 0x12c18, 0x12c30, 0x12c3e, 0x12c60,\n        0x12c7c, 0x12cc0, 0x12cf8, 0x12df0, 0x12e1c, 0x12e38, 0x12e70, 0x12e7e, 0x12ee0, 0x12efc, 0x12f04, 0x12f08,\n        0x12f10, 0x12f20, 0x12f3c, 0x12f40, 0x12f78, 0x12f86, 0x12f8c, 0x12f98, 0x12fb0, 0x12fbe, 0x12fce, 0x12fdc,\n        0x1302e, 0x1304e, 0x1305c, 0x13062, 0x13068, 0x1308e, 0x1309c, 0x130b8, 0x130c2, 0x130c8, 0x130d0, 0x130de,\n        0x130ec, 0x130fa, 0x1310e, 0x13138, 0x13170, 0x1317e, 0x13182, 0x13184, 0x13190, 0x1319e, 0x131a0, 0x131bc,\n        0x131c6, 0x131cc, 0x131d8, 0x131f2, 0x131f4, 0x1320e, 0x1321c, 0x13270, 0x1327e, 0x132e0, 0x132fc, 0x13308,\n        0x1331e, 0x13320, 0x1333c, 0x13340, 0x13378, 0x13386, 0x13398, 0x133b0, 0x133be, 0x133ce, 0x133dc, 0x133e2,\n        0x133e4, 0x133e8, 0x133f6, 0x1340e, 0x1341c, 0x13438, 0x13470, 0x1347e, 0x134e0, 0x134fc, 0x135c0, 0x135f8,\n        0x13608, 0x13610, 0x1361e, 0x13620, 0x1363c, 0x13640, 0x13678, 0x136f0, 0x1370c, 0x13718, 0x13730, 0x1373e,\n        0x13760, 0x1377c, 0x1379c, 0x137b8, 0x137c2, 0x137c4, 0x137c8, 0x137d0, 0x137de, 0x137e6, 0x137ec, 0x13816,\n        0x13826, 0x1382c, 0x13846, 0x1384c, 0x13858, 0x1386e, 0x13874, 0x13886, 0x13898, 0x138b0, 0x138be, 0x138ce,\n        0x138dc, 0x138e2, 0x138e4, 0x138e8, 0x13906, 0x1390c, 0x13930, 0x1393e, 0x13960, 0x1397c, 0x1398e, 0x1399c,\n        0x139b8, 0x139c8, 0x139d0, 0x139de, 0x139e6, 0x139ec, 0x139fa, 0x13a06, 0x13a0c, 0x13a18, 0x13a30, 0x13a3e,\n        0x13a60, 0x13a7c, 0x13ac0, 0x13af8, 0x13b0e, 0x13b1c, 0x13b38, 0x13b70, 0x13b7e, 0x13b88, 0x13b90, 0x13b9e,\n        0x13ba0, 0x13bbc, 0x13bcc, 0x13bd8, 0x13bee, 0x13bf2, 0x13bf4, 0x13c12, 0x13c14, 0x13c22, 0x13c24, 0x13c28,\n        0x13c36, 0x13c42, 0x13c48, 0x13c50, 0x13c5e, 0x13c66, 0x13c6c, 0x13c82, 0x13c84, 0x13c90, 0x13c9e, 0x13ca0,\n        0x13cbc, 0x13cc6, 0x13ccc, 0x13cd8, 0x13cee, 0x13d02, 0x13d04, 0x13d08, 0x13d10, 0x13d1e, 0x13d20, 0x13d3c,\n        0x13d40, 0x13d78, 0x13d86, 0x13d8c, 0x13d98, 0x13db0, 0x13dbe, 0x13dce, 0x13ddc, 0x13de4, 0x13de8, 0x13df6,\n        0x13e1a, 0x13e2e, 0x13e32, 0x13e34, 0x13e4e, 0x13e5c, 0x13e62, 0x13e64, 0x13e68, 0x13e76, 0x13e8e, 0x13e9c,\n        0x13eb8, 0x13ec2, 0x13ec4, 0x13ec8, 0x13ed0, 0x13ede, 0x13ee6, 0x13eec, 0x13f26, 0x13f2c, 0x13f3a, 0x13f46,\n        0x13f4c, 0x13f58, 0x13f6e, 0x13f72, 0x13f74, 0x14082, 0x1409e, 0x140a0, 0x140bc, 0x14104, 0x14108, 0x14110,\n        0x1411e, 0x14120, 0x1413c, 0x14140, 0x14178, 0x1418c, 0x14198, 0x141b0, 0x141be, 0x141e2, 0x141e4, 0x141e8,\n        0x14208, 0x14210, 0x1421e, 0x14220, 0x1423c, 0x14240, 0x14278, 0x142f0, 0x14306, 0x1430c, 0x14318, 0x14330,\n        0x1433e, 0x14360, 0x1437c, 0x1438e, 0x143c2, 0x143c4, 0x143c8, 0x143d0, 0x143e6, 0x143ec, 0x14408, 0x14410,\n        0x1441e, 0x14420, 0x1443c, 0x14440, 0x14478, 0x144f0, 0x145e0, 0x1460c, 0x14618, 0x14630, 0x1463e, 0x14660,\n        0x1467c, 0x146c0, 0x146f8, 0x1471c, 0x14738, 0x14770, 0x1477e, 0x14782, 0x14784, 0x14788, 0x14790, 0x147a0,\n        0x147bc, 0x147c6, 0x147cc, 0x147d8, 0x147ee, 0x14810, 0x14820, 0x1483c, 0x14840, 0x14878, 0x148f0, 0x149e0,\n        0x14bc0, 0x14c30, 0x14c3e, 0x14c60, 0x14c7c, 0x14cc0, 0x14cf8, 0x14df0, 0x14e38, 0x14e70, 0x14e7e, 0x14ee0,\n        0x14efc, 0x14f04, 0x14f08, 0x14f10, 0x14f1e, 0x14f20, 0x14f3c, 0x14f40, 0x14f78, 0x14f86, 0x14f8c, 0x14f98,\n        0x14fb0, 0x14fce, 0x14fdc, 0x15020, 0x15040, 0x15078, 0x150f0, 0x151e0, 0x153c0, 0x15860, 0x1587c, 0x158c0,\n        0x158f8, 0x159f0, 0x15be0, 0x15c70, 0x15c7e, 0x15ce0, 0x15cfc, 0x15dc0, 0x15df8, 0x15e08, 0x15e10, 0x15e20,\n        0x15e40, 0x15e78, 0x15ef0, 0x15f0c, 0x15f18, 0x15f30, 0x15f60, 0x15f7c, 0x15f8e, 0x15f9c, 0x15fb8, 0x1604e,\n        0x1605c, 0x1608e, 0x1609c, 0x160b8, 0x160c2, 0x160c4, 0x160c8, 0x160de, 0x1610e, 0x1611c, 0x16138, 0x16170,\n        0x1617e, 0x16184, 0x16188, 0x16190, 0x1619e, 0x161a0, 0x161bc, 0x161c6, 0x161cc, 0x161d8, 0x161f2, 0x161f4,\n        0x1620e, 0x1621c, 0x16238, 0x16270, 0x1627e, 0x162e0, 0x162fc, 0x16304, 0x16308, 0x16310, 0x1631e, 0x16320,\n        0x1633c, 0x16340, 0x16378, 0x16386, 0x1638c, 0x16398, 0x163b0, 0x163be, 0x163ce, 0x163dc, 0x163e2, 0x163e4,\n        0x163e8, 0x163f6, 0x1640e, 0x1641c, 0x16438, 0x16470, 0x1647e, 0x164e0, 0x164fc, 0x165c0, 0x165f8, 0x16610,\n        0x1661e, 0x16620, 0x1663c, 0x16640, 0x16678, 0x166f0, 0x16718, 0x16730, 0x1673e, 0x16760, 0x1677c, 0x1678e,\n        0x1679c, 0x167b8, 0x167c2, 0x167c4, 0x167c8, 0x167d0, 0x167de, 0x167e6, 0x167ec, 0x1681c, 0x16838, 0x16870,\n        0x168e0, 0x168fc, 0x169c0, 0x169f8, 0x16bf0, 0x16c10, 0x16c1e, 0x16c20, 0x16c3c, 0x16c40, 0x16c78, 0x16cf0,\n        0x16de0, 0x16e18, 0x16e30, 0x16e3e, 0x16e60, 0x16e7c, 0x16ec0, 0x16ef8, 0x16f1c, 0x16f38, 0x16f70, 0x16f7e,\n        0x16f84, 0x16f88, 0x16f90, 0x16f9e, 0x16fa0, 0x16fbc, 0x16fc6, 0x16fcc, 0x16fd8, 0x17026, 0x1702c, 0x17046,\n        0x1704c, 0x17058, 0x1706e, 0x17086, 0x1708c, 0x17098, 0x170b0, 0x170be, 0x170ce, 0x170dc, 0x170e8, 0x17106,\n        0x1710c, 0x17118, 0x17130, 0x1713e, 0x17160, 0x1717c, 0x1718e, 0x1719c, 0x171b8, 0x171c2, 0x171c4, 0x171c8,\n        0x171d0, 0x171de, 0x171e6, 0x171ec, 0x171fa, 0x17206, 0x1720c, 0x17218, 0x17230, 0x1723e, 0x17260, 0x1727c,\n        0x172c0, 0x172f8, 0x1730e, 0x1731c, 0x17338, 0x17370, 0x1737e, 0x17388, 0x17390, 0x1739e, 0x173a0, 0x173bc,\n        0x173cc, 0x173d8, 0x173ee, 0x173f2, 0x173f4, 0x1740c, 0x17418, 0x17430, 0x1743e, 0x17460, 0x1747c, 0x174c0,\n        0x174f8, 0x175f0, 0x1760e, 0x1761c, 0x17638, 0x17670, 0x1767e, 0x176e0, 0x176fc, 0x17708, 0x17710, 0x1771e,\n        0x17720, 0x1773c, 0x17740, 0x17778, 0x17798, 0x177b0, 0x177be, 0x177dc, 0x177e2, 0x177e4, 0x177e8, 0x17822,\n        0x17824, 0x17828, 0x17836, 0x17842, 0x17844, 0x17848, 0x17850, 0x1785e, 0x17866, 0x1786c, 0x17882, 0x17884,\n        0x17888, 0x17890, 0x1789e, 0x178a0, 0x178bc, 0x178c6, 0x178cc, 0x178d8, 0x178ee, 0x178f2, 0x178f4, 0x17902,\n        0x17904, 0x17908, 0x17910, 0x1791e, 0x17920, 0x1793c, 0x17940, 0x17978, 0x17986, 0x1798c, 0x17998, 0x179b0,\n        0x179be, 0x179ce, 0x179dc, 0x179e2, 0x179e4, 0x179e8, 0x179f6, 0x17a04, 0x17a08, 0x17a10, 0x17a1e, 0x17a20,\n        0x17a3c, 0x17a40, 0x17a78, 0x17af0, 0x17b06, 0x17b0c, 0x17b18, 0x17b30, 0x17b3e, 0x17b60, 0x17b7c, 0x17b8e,\n        0x17b9c, 0x17bb8, 0x17bc4, 0x17bc8, 0x17bd0, 0x17bde, 0x17be6, 0x17bec, 0x17c2e, 0x17c32, 0x17c34, 0x17c4e,\n        0x17c5c, 0x17c62, 0x17c64, 0x17c68, 0x17c76, 0x17c8e, 0x17c9c, 0x17cb8, 0x17cc2, 0x17cc4, 0x17cc8, 0x17cd0,\n        0x17cde, 0x17ce6, 0x17cec, 0x17d0e, 0x17d1c, 0x17d38, 0x17d70, 0x17d82, 0x17d84, 0x17d88, 0x17d90, 0x17d9e,\n        0x17da0, 0x17dbc, 0x17dc6, 0x17dcc, 0x17dd8, 0x17dee, 0x17e26, 0x17e2c, 0x17e3a, 0x17e46, 0x17e4c, 0x17e58,\n        0x17e6e, 0x17e72, 0x17e74, 0x17e86, 0x17e8c, 0x17e98, 0x17eb0, 0x17ece, 0x17edc, 0x17ee2, 0x17ee4, 0x17ee8,\n        0x17ef6, 0x1813a, 0x18172, 0x18174, 0x18216, 0x18226, 0x1823a, 0x1824c, 0x18258, 0x1826e, 0x18272, 0x18274,\n        0x18298, 0x182be, 0x182e2, 0x182e4, 0x182e8, 0x182f6, 0x1835e, 0x1837a, 0x183ae, 0x183d6, 0x18416, 0x18426,\n        0x1842c, 0x1843a, 0x18446, 0x18458, 0x1846e, 0x18472, 0x18474, 0x18486, 0x184b0, 0x184be, 0x184ce, 0x184dc,\n        0x184e2, 0x184e4, 0x184e8, 0x184f6, 0x18506, 0x1850c, 0x18518, 0x18530, 0x1853e, 0x18560, 0x1857c, 0x1858e,\n        0x1859c, 0x185b8, 0x185c2, 0x185c4, 0x185c8, 0x185d0, 0x185de, 0x185e6, 0x185ec, 0x185fa, 0x18612, 0x18614,\n        0x18622, 0x18628, 0x18636, 0x18642, 0x18650, 0x1865e, 0x1867a, 0x18682, 0x18684, 0x18688, 0x18690, 0x1869e,\n        0x186a0, 0x186bc, 0x186c6, 0x186cc, 0x186d8, 0x186ee, 0x186f2, 0x186f4, 0x1872e, 0x1874e, 0x1875c, 0x18796,\n        0x187a6, 0x187ac, 0x187d2, 0x187d4, 0x18826, 0x1882c, 0x1883a, 0x18846, 0x1884c, 0x18858, 0x1886e, 0x18872,\n        0x18874, 0x18886, 0x18898, 0x188b0, 0x188be, 0x188ce, 0x188dc, 0x188e2, 0x188e4, 0x188e8, 0x188f6, 0x1890c,\n        0x18930, 0x1893e, 0x18960, 0x1897c, 0x1898e, 0x189b8, 0x189c2, 0x189c8, 0x189d0, 0x189de, 0x189e6, 0x189ec,\n        0x189fa, 0x18a18, 0x18a30, 0x18a3e, 0x18a60, 0x18a7c, 0x18ac0, 0x18af8, 0x18b1c, 0x18b38, 0x18b70, 0x18b7e,\n        0x18b82, 0x18b84, 0x18b88, 0x18b90, 0x18b9e, 0x18ba0, 0x18bbc, 0x18bc6, 0x18bcc, 0x18bd8, 0x18bee, 0x18bf2,\n        0x18bf4, 0x18c22, 0x18c24, 0x18c28, 0x18c36, 0x18c42, 0x18c48, 0x18c50, 0x18c5e, 0x18c66, 0x18c7a, 0x18c82,\n        0x18c84, 0x18c90, 0x18c9e, 0x18ca0, 0x18cbc, 0x18ccc, 0x18cf2, 0x18cf4, 0x18d04, 0x18d08, 0x18d10, 0x18d1e,\n        0x18d20, 0x18d3c, 0x18d40, 0x18d78, 0x18d86, 0x18d98, 0x18dce, 0x18de2, 0x18de4, 0x18de8, 0x18e2e, 0x18e32,\n        0x18e34, 0x18e4e, 0x18e5c, 0x18e62, 0x18e64, 0x18e68, 0x18e8e, 0x18e9c, 0x18eb8, 0x18ec2, 0x18ec4, 0x18ec8,\n        0x18ed0, 0x18efa, 0x18f16, 0x18f26, 0x18f2c, 0x18f46, 0x18f4c, 0x18f58, 0x18f6e, 0x18f8a, 0x18f92, 0x18f94,\n        0x18fa2, 0x18fa4, 0x18fa8, 0x18fb6, 0x1902c, 0x1903a, 0x19046, 0x1904c, 0x19058, 0x19072, 0x19074, 0x19086,\n        0x19098, 0x190b0, 0x190be, 0x190ce, 0x190dc, 0x190e2, 0x190e8, 0x190f6, 0x19106, 0x1910c, 0x19130, 0x1913e,\n        0x19160, 0x1917c, 0x1918e, 0x1919c, 0x191b8, 0x191c2, 0x191c8, 0x191d0, 0x191de, 0x191e6, 0x191ec, 0x191fa,\n        0x19218, 0x1923e, 0x19260, 0x1927c, 0x192c0, 0x192f8, 0x19338, 0x19370, 0x1937e, 0x19382, 0x19384, 0x19390,\n        0x1939e, 0x193a0, 0x193bc, 0x193c6, 0x193cc, 0x193d8, 0x193ee, 0x193f2, 0x193f4, 0x19430, 0x1943e, 0x19460,\n        0x1947c, 0x194c0, 0x194f8, 0x195f0, 0x19638, 0x19670, 0x1967e, 0x196e0, 0x196fc, 0x19702, 0x19704, 0x19708,\n        0x19710, 0x19720, 0x1973c, 0x19740, 0x19778, 0x19786, 0x1978c, 0x19798, 0x197b0, 0x197be, 0x197ce, 0x197dc,\n        0x197e2, 0x197e4, 0x197e8, 0x19822, 0x19824, 0x19842, 0x19848, 0x19850, 0x1985e, 0x19866, 0x1987a, 0x19882,\n        0x19884, 0x19890, 0x1989e, 0x198a0, 0x198bc, 0x198cc, 0x198f2, 0x198f4, 0x19902, 0x19908, 0x1991e, 0x19920,\n        0x1993c, 0x19940, 0x19978, 0x19986, 0x19998, 0x199ce, 0x199e2, 0x199e4, 0x199e8, 0x19a08, 0x19a10, 0x19a1e,\n        0x19a20, 0x19a3c, 0x19a40, 0x19a78, 0x19af0, 0x19b18, 0x19b3e, 0x19b60, 0x19b9c, 0x19bc2, 0x19bc4, 0x19bc8,\n        0x19bd0, 0x19be6, 0x19c2e, 0x19c34, 0x19c4e, 0x19c5c, 0x19c62, 0x19c64, 0x19c68, 0x19c8e, 0x19c9c, 0x19cb8,\n        0x19cc2, 0x19cc8, 0x19cd0, 0x19ce6, 0x19cfa, 0x19d0e, 0x19d1c, 0x19d38, 0x19d70, 0x19d7e, 0x19d82, 0x19d84,\n        0x19d88, 0x19d90, 0x19da0, 0x19dcc, 0x19df2, 0x19df4, 0x19e16, 0x19e26, 0x19e2c, 0x19e46, 0x19e4c, 0x19e58,\n        0x19e74, 0x19e86, 0x19e8c, 0x19e98, 0x19eb0, 0x19ebe, 0x19ece, 0x19ee2, 0x19ee4, 0x19ee8, 0x19f0a, 0x19f12,\n        0x19f14, 0x19f22, 0x19f24, 0x19f28, 0x19f42, 0x19f44, 0x19f48, 0x19f50, 0x19f5e, 0x19f6c, 0x19f9a, 0x19fae,\n        0x19fb2, 0x19fb4, 0x1a046, 0x1a04c, 0x1a072, 0x1a074, 0x1a086, 0x1a08c, 0x1a098, 0x1a0b0, 0x1a0be, 0x1a0e2,\n        0x1a0e4, 0x1a0e8, 0x1a0f6, 0x1a106, 0x1a10c, 0x1a118, 0x1a130, 0x1a13e, 0x1a160, 0x1a17c, 0x1a18e, 0x1a19c,\n        0x1a1b8, 0x1a1c2, 0x1a1c4, 0x1a1c8, 0x1a1d0, 0x1a1de, 0x1a1e6, 0x1a1ec, 0x1a218, 0x1a230, 0x1a23e, 0x1a260,\n        0x1a27c, 0x1a2c0, 0x1a2f8, 0x1a31c, 0x1a338, 0x1a370, 0x1a37e, 0x1a382, 0x1a384, 0x1a388, 0x1a390, 0x1a39e,\n        0x1a3a0, 0x1a3bc, 0x1a3c6, 0x1a3cc, 0x1a3d8, 0x1a3ee, 0x1a3f2, 0x1a3f4, 0x1a418, 0x1a430, 0x1a43e, 0x1a460,\n        0x1a47c, 0x1a4c0, 0x1a4f8, 0x1a5f0, 0x1a61c, 0x1a638, 0x1a670, 0x1a67e, 0x1a6e0, 0x1a6fc, 0x1a702, 0x1a704,\n        0x1a708, 0x1a710, 0x1a71e, 0x1a720, 0x1a73c, 0x1a740, 0x1a778, 0x1a786, 0x1a78c, 0x1a798, 0x1a7b0, 0x1a7be,\n        0x1a7ce, 0x1a7dc, 0x1a7e2, 0x1a7e4, 0x1a7e8, 0x1a830, 0x1a860, 0x1a87c, 0x1a8c0, 0x1a8f8, 0x1a9f0, 0x1abe0,\n        0x1ac70, 0x1ac7e, 0x1ace0, 0x1acfc, 0x1adc0, 0x1adf8, 0x1ae04, 0x1ae08, 0x1ae10, 0x1ae20, 0x1ae3c, 0x1ae40,\n        0x1ae78, 0x1aef0, 0x1af06, 0x1af0c, 0x1af18, 0x1af30, 0x1af3e, 0x1af60, 0x1af7c, 0x1af8e, 0x1af9c, 0x1afb8,\n        0x1afc4, 0x1afc8, 0x1afd0, 0x1afde, 0x1b042, 0x1b05e, 0x1b07a, 0x1b082, 0x1b084, 0x1b088, 0x1b090, 0x1b09e,\n        0x1b0a0, 0x1b0bc, 0x1b0cc, 0x1b0f2, 0x1b0f4, 0x1b102, 0x1b104, 0x1b108, 0x1b110, 0x1b11e, 0x1b120, 0x1b13c,\n        0x1b140, 0x1b178, 0x1b186, 0x1b198, 0x1b1ce, 0x1b1e2, 0x1b1e4, 0x1b1e8, 0x1b204, 0x1b208, 0x1b210, 0x1b21e,\n        0x1b220, 0x1b23c, 0x1b240, 0x1b278, 0x1b2f0, 0x1b30c, 0x1b33e, 0x1b360, 0x1b39c, 0x1b3c2, 0x1b3c4, 0x1b3c8,\n        0x1b3d0, 0x1b3e6, 0x1b410, 0x1b41e, 0x1b420, 0x1b43c, 0x1b440, 0x1b478, 0x1b4f0, 0x1b5e0, 0x1b618, 0x1b660,\n        0x1b67c, 0x1b6c0, 0x1b738, 0x1b782, 0x1b784, 0x1b788, 0x1b790, 0x1b79e, 0x1b7a0, 0x1b7cc, 0x1b82e, 0x1b84e,\n        0x1b85c, 0x1b88e, 0x1b89c, 0x1b8b8, 0x1b8c2, 0x1b8c4, 0x1b8c8, 0x1b8d0, 0x1b8e6, 0x1b8fa, 0x1b90e, 0x1b91c,\n        0x1b938, 0x1b970, 0x1b97e, 0x1b982, 0x1b984, 0x1b988, 0x1b990, 0x1b99e, 0x1b9a0, 0x1b9cc, 0x1b9f2, 0x1b9f4,\n        0x1ba0e, 0x1ba1c, 0x1ba38, 0x1ba70, 0x1ba7e, 0x1bae0, 0x1bafc, 0x1bb08, 0x1bb10, 0x1bb20, 0x1bb3c, 0x1bb40,\n        0x1bb98, 0x1bbce, 0x1bbe2, 0x1bbe4, 0x1bbe8, 0x1bc16, 0x1bc26, 0x1bc2c, 0x1bc46, 0x1bc4c, 0x1bc58, 0x1bc72,\n        0x1bc74, 0x1bc86, 0x1bc8c, 0x1bc98, 0x1bcb0, 0x1bcbe, 0x1bcce, 0x1bce2, 0x1bce4, 0x1bce8, 0x1bd06, 0x1bd0c,\n        0x1bd18, 0x1bd30, 0x1bd3e, 0x1bd60, 0x1bd7c, 0x1bd9c, 0x1bdc2, 0x1bdc4, 0x1bdc8, 0x1bdd0, 0x1bde6, 0x1bdfa,\n        0x1be12, 0x1be14, 0x1be22, 0x1be24, 0x1be28, 0x1be42, 0x1be44, 0x1be48, 0x1be50, 0x1be5e, 0x1be66, 0x1be82,\n        0x1be84, 0x1be88, 0x1be90, 0x1be9e, 0x1bea0, 0x1bebc, 0x1becc, 0x1bef4, 0x1bf1a, 0x1bf2e, 0x1bf32, 0x1bf34,\n        0x1bf4e, 0x1bf5c, 0x1bf62, 0x1bf64, 0x1bf68, 0x1c09a, 0x1c0b2, 0x1c0b4, 0x1c11a, 0x1c132, 0x1c134, 0x1c162,\n        0x1c164, 0x1c168, 0x1c176, 0x1c1ba, 0x1c21a, 0x1c232, 0x1c234, 0x1c24e, 0x1c25c, 0x1c262, 0x1c264, 0x1c268,\n        0x1c276, 0x1c28e, 0x1c2c2, 0x1c2c4, 0x1c2c8, 0x1c2d0, 0x1c2de, 0x1c2e6, 0x1c2ec, 0x1c2fa, 0x1c316, 0x1c326,\n        0x1c33a, 0x1c346, 0x1c34c, 0x1c372, 0x1c374, 0x1c41a, 0x1c42e, 0x1c432, 0x1c434, 0x1c44e, 0x1c45c, 0x1c462,\n        0x1c464, 0x1c468, 0x1c476, 0x1c48e, 0x1c49c, 0x1c4b8, 0x1c4c2, 0x1c4c8, 0x1c4d0, 0x1c4de, 0x1c4e6, 0x1c4ec,\n        0x1c4fa, 0x1c51c, 0x1c538, 0x1c570, 0x1c57e, 0x1c582, 0x1c584, 0x1c588, 0x1c590, 0x1c59e, 0x1c5a0, 0x1c5bc,\n        0x1c5c6, 0x1c5cc, 0x1c5d8, 0x1c5ee, 0x1c5f2, 0x1c5f4, 0x1c616, 0x1c626, 0x1c62c, 0x1c63a, 0x1c646, 0x1c64c,\n        0x1c658, 0x1c66e, 0x1c672, 0x1c674, 0x1c686, 0x1c68c, 0x1c698, 0x1c6b0, 0x1c6be, 0x1c6ce, 0x1c6dc, 0x1c6e2,\n        0x1c6e4, 0x1c6e8, 0x1c712, 0x1c714, 0x1c722, 0x1c728, 0x1c736, 0x1c742, 0x1c744, 0x1c748, 0x1c750, 0x1c75e,\n        0x1c766, 0x1c76c, 0x1c77a, 0x1c7ae, 0x1c7d6, 0x1c7ea, 0x1c81a, 0x1c82e, 0x1c832, 0x1c834, 0x1c84e, 0x1c85c,\n        0x1c862, 0x1c864, 0x1c868, 0x1c876, 0x1c88e, 0x1c89c, 0x1c8b8, 0x1c8c2, 0x1c8c8, 0x1c8d0, 0x1c8de, 0x1c8e6,\n        0x1c8ec, 0x1c8fa, 0x1c90e, 0x1c938, 0x1c970, 0x1c97e, 0x1c982, 0x1c984, 0x1c990, 0x1c99e, 0x1c9a0, 0x1c9bc,\n        0x1c9c6, 0x1c9cc, 0x1c9d8, 0x1c9ee, 0x1c9f2, 0x1c9f4, 0x1ca38, 0x1ca70, 0x1ca7e, 0x1cae0, 0x1cafc, 0x1cb02,\n        0x1cb04, 0x1cb08, 0x1cb10, 0x1cb20, 0x1cb3c, 0x1cb40, 0x1cb78, 0x1cb86, 0x1cb8c, 0x1cb98, 0x1cbb0, 0x1cbbe,\n        0x1cbce, 0x1cbdc, 0x1cbe2, 0x1cbe4, 0x1cbe8, 0x1cbf6, 0x1cc16, 0x1cc26, 0x1cc2c, 0x1cc3a, 0x1cc46, 0x1cc58,\n        0x1cc72, 0x1cc74, 0x1cc86, 0x1ccb0, 0x1ccbe, 0x1ccce, 0x1cce2, 0x1cce4, 0x1cce8, 0x1cd06, 0x1cd0c, 0x1cd18,\n        0x1cd30, 0x1cd3e, 0x1cd60, 0x1cd7c, 0x1cd9c, 0x1cdc2, 0x1cdc4, 0x1cdc8, 0x1cdd0, 0x1cdde, 0x1cde6, 0x1cdfa,\n        0x1ce22, 0x1ce28, 0x1ce42, 0x1ce50, 0x1ce5e, 0x1ce66, 0x1ce7a, 0x1ce82, 0x1ce84, 0x1ce88, 0x1ce90, 0x1ce9e,\n        0x1cea0, 0x1cebc, 0x1cecc, 0x1cef2, 0x1cef4, 0x1cf2e, 0x1cf32, 0x1cf34, 0x1cf4e, 0x1cf5c, 0x1cf62, 0x1cf64,\n        0x1cf68, 0x1cf96, 0x1cfa6, 0x1cfac, 0x1cfca, 0x1cfd2, 0x1cfd4, 0x1d02e, 0x1d032, 0x1d034, 0x1d04e, 0x1d05c,\n        0x1d062, 0x1d064, 0x1d068, 0x1d076, 0x1d08e, 0x1d09c, 0x1d0b8, 0x1d0c2, 0x1d0c4, 0x1d0c8, 0x1d0d0, 0x1d0de,\n        0x1d0e6, 0x1d0ec, 0x1d0fa, 0x1d11c, 0x1d138, 0x1d170, 0x1d17e, 0x1d182, 0x1d184, 0x1d188, 0x1d190, 0x1d19e,\n        0x1d1a0, 0x1d1bc, 0x1d1c6, 0x1d1cc, 0x1d1d8, 0x1d1ee, 0x1d1f2, 0x1d1f4, 0x1d21c, 0x1d238, 0x1d270, 0x1d27e,\n        0x1d2e0, 0x1d2fc, 0x1d302, 0x1d304, 0x1d308, 0x1d310, 0x1d31e, 0x1d320, 0x1d33c, 0x1d340, 0x1d378, 0x1d386,\n        0x1d38c, 0x1d398, 0x1d3b0, 0x1d3be, 0x1d3ce, 0x1d3dc, 0x1d3e2, 0x1d3e4, 0x1d3e8, 0x1d3f6, 0x1d470, 0x1d47e,\n        0x1d4e0, 0x1d4fc, 0x1d5c0, 0x1d5f8, 0x1d604, 0x1d608, 0x1d610, 0x1d620, 0x1d640, 0x1d678, 0x1d6f0, 0x1d706,\n        0x1d70c, 0x1d718, 0x1d730, 0x1d73e, 0x1d760, 0x1d77c, 0x1d78e, 0x1d79c, 0x1d7b8, 0x1d7c2, 0x1d7c4, 0x1d7c8,\n        0x1d7d0, 0x1d7de, 0x1d7e6, 0x1d7ec, 0x1d826, 0x1d82c, 0x1d83a, 0x1d846, 0x1d84c, 0x1d858, 0x1d872, 0x1d874,\n        0x1d886, 0x1d88c, 0x1d898, 0x1d8b0, 0x1d8be, 0x1d8ce, 0x1d8e2, 0x1d8e4, 0x1d8e8, 0x1d8f6, 0x1d90c, 0x1d918,\n        0x1d930, 0x1d93e, 0x1d960, 0x1d97c, 0x1d99c, 0x1d9c2, 0x1d9c4, 0x1d9c8, 0x1d9d0, 0x1d9e6, 0x1d9fa, 0x1da0c,\n        0x1da18, 0x1da30, 0x1da3e, 0x1da60, 0x1da7c, 0x1dac0, 0x1daf8, 0x1db38, 0x1db82, 0x1db84, 0x1db88, 0x1db90,\n        0x1db9e, 0x1dba0, 0x1dbcc, 0x1dbf2, 0x1dbf4, 0x1dc22, 0x1dc42, 0x1dc44, 0x1dc48, 0x1dc50, 0x1dc5e, 0x1dc66,\n        0x1dc7a, 0x1dc82, 0x1dc84, 0x1dc88, 0x1dc90, 0x1dc9e, 0x1dca0, 0x1dcbc, 0x1dccc, 0x1dcf2, 0x1dcf4, 0x1dd04,\n        0x1dd08, 0x1dd10, 0x1dd1e, 0x1dd20, 0x1dd3c, 0x1dd40, 0x1dd78, 0x1dd86, 0x1dd98, 0x1ddce, 0x1dde2, 0x1dde4,\n        0x1dde8, 0x1de2e, 0x1de32, 0x1de34, 0x1de4e, 0x1de5c, 0x1de62, 0x1de64, 0x1de68, 0x1de8e, 0x1de9c, 0x1deb8,\n        0x1dec2, 0x1dec4, 0x1dec8, 0x1ded0, 0x1dee6, 0x1defa, 0x1df16, 0x1df26, 0x1df2c, 0x1df46, 0x1df4c, 0x1df58,\n        0x1df72, 0x1df74, 0x1df8a, 0x1df92, 0x1df94, 0x1dfa2, 0x1dfa4, 0x1dfa8, 0x1e08a, 0x1e092, 0x1e094, 0x1e0a2,\n        0x1e0a4, 0x1e0a8, 0x1e0b6, 0x1e0da, 0x1e10a, 0x1e112, 0x1e114, 0x1e122, 0x1e124, 0x1e128, 0x1e136, 0x1e142,\n        0x1e144, 0x1e148, 0x1e150, 0x1e166, 0x1e16c, 0x1e17a, 0x1e19a, 0x1e1b2, 0x1e1b4, 0x1e20a, 0x1e212, 0x1e214,\n        0x1e222, 0x1e224, 0x1e228, 0x1e236, 0x1e242, 0x1e248, 0x1e250, 0x1e25e, 0x1e266, 0x1e26c, 0x1e27a, 0x1e282,\n        0x1e284, 0x1e288, 0x1e290, 0x1e2a0, 0x1e2bc, 0x1e2c6, 0x1e2cc, 0x1e2d8, 0x1e2ee, 0x1e2f2, 0x1e2f4, 0x1e31a,\n        0x1e332, 0x1e334, 0x1e35c, 0x1e362, 0x1e364, 0x1e368, 0x1e3ba, 0x1e40a, 0x1e412, 0x1e414, 0x1e422, 0x1e428,\n        0x1e436, 0x1e442, 0x1e448, 0x1e450, 0x1e45e, 0x1e466, 0x1e46c, 0x1e47a, 0x1e482, 0x1e484, 0x1e490, 0x1e49e,\n        0x1e4a0, 0x1e4bc, 0x1e4c6, 0x1e4cc, 0x1e4d8, 0x1e4ee, 0x1e4f2, 0x1e4f4, 0x1e502, 0x1e504, 0x1e508, 0x1e510,\n        0x1e51e, 0x1e520, 0x1e53c, 0x1e540, 0x1e578, 0x1e586, 0x1e58c, 0x1e598, 0x1e5b0, 0x1e5be, 0x1e5ce, 0x1e5dc,\n        0x1e5e2, 0x1e5e4, 0x1e5e8, 0x1e5f6, 0x1e61a, 0x1e62e, 0x1e632, 0x1e634, 0x1e64e, 0x1e65c, 0x1e662, 0x1e668,\n        0x1e68e, 0x1e69c, 0x1e6b8, 0x1e6c2, 0x1e6c4, 0x1e6c8, 0x1e6d0, 0x1e6e6, 0x1e6fa, 0x1e716, 0x1e726, 0x1e72c,\n        0x1e73a, 0x1e746, 0x1e74c, 0x1e758, 0x1e772, 0x1e774, 0x1e792, 0x1e794, 0x1e7a2, 0x1e7a4, 0x1e7a8, 0x1e7b6,\n        0x1e812, 0x1e814, 0x1e822, 0x1e824, 0x1e828, 0x1e836, 0x1e842, 0x1e844, 0x1e848, 0x1e850, 0x1e85e, 0x1e866,\n        0x1e86c, 0x1e87a, 0x1e882, 0x1e884, 0x1e888, 0x1e890, 0x1e89e, 0x1e8a0, 0x1e8bc, 0x1e8c6, 0x1e8cc, 0x1e8d8,\n        0x1e8ee, 0x1e8f2, 0x1e8f4, 0x1e902, 0x1e904, 0x1e908, 0x1e910, 0x1e920, 0x1e93c, 0x1e940, 0x1e978, 0x1e986,\n        0x1e98c, 0x1e998, 0x1e9b0, 0x1e9be, 0x1e9ce, 0x1e9dc, 0x1e9e2, 0x1e9e4, 0x1e9e8, 0x1e9f6, 0x1ea04, 0x1ea08,\n        0x1ea10, 0x1ea20, 0x1ea40, 0x1ea78, 0x1eaf0, 0x1eb06, 0x1eb0c, 0x1eb18, 0x1eb30, 0x1eb3e, 0x1eb60, 0x1eb7c,\n        0x1eb8e, 0x1eb9c, 0x1ebb8, 0x1ebc2, 0x1ebc4, 0x1ebc8, 0x1ebd0, 0x1ebde, 0x1ebe6, 0x1ebec, 0x1ec1a, 0x1ec2e,\n        0x1ec32, 0x1ec34, 0x1ec4e, 0x1ec5c, 0x1ec62, 0x1ec64, 0x1ec68, 0x1ec8e, 0x1ec9c, 0x1ecb8, 0x1ecc2, 0x1ecc4,\n        0x1ecc8, 0x1ecd0, 0x1ece6, 0x1ecfa, 0x1ed0e, 0x1ed1c, 0x1ed38, 0x1ed70, 0x1ed7e, 0x1ed82, 0x1ed84, 0x1ed88,\n        0x1ed90, 0x1ed9e, 0x1eda0, 0x1edcc, 0x1edf2, 0x1edf4, 0x1ee16, 0x1ee26, 0x1ee2c, 0x1ee3a, 0x1ee46, 0x1ee4c,\n        0x1ee58, 0x1ee6e, 0x1ee72, 0x1ee74, 0x1ee86, 0x1ee8c, 0x1ee98, 0x1eeb0, 0x1eebe, 0x1eece, 0x1eedc, 0x1eee2,\n        0x1eee4, 0x1eee8, 0x1ef12, 0x1ef22, 0x1ef24, 0x1ef28, 0x1ef36, 0x1ef42, 0x1ef44, 0x1ef48, 0x1ef50, 0x1ef5e,\n        0x1ef66, 0x1ef6c, 0x1ef7a, 0x1efae, 0x1efb2, 0x1efb4, 0x1efd6, 0x1f096, 0x1f0a6, 0x1f0ac, 0x1f0ba, 0x1f0ca,\n        0x1f0d2, 0x1f0d4, 0x1f116, 0x1f126, 0x1f12c, 0x1f13a, 0x1f146, 0x1f14c, 0x1f158, 0x1f16e, 0x1f172, 0x1f174,\n        0x1f18a, 0x1f192, 0x1f194, 0x1f1a2, 0x1f1a4, 0x1f1a8, 0x1f1da, 0x1f216, 0x1f226, 0x1f22c, 0x1f23a, 0x1f246,\n        0x1f258, 0x1f26e, 0x1f272, 0x1f274, 0x1f286, 0x1f28c, 0x1f298, 0x1f2b0, 0x1f2be, 0x1f2ce, 0x1f2dc, 0x1f2e2,\n        0x1f2e4, 0x1f2e8, 0x1f2f6, 0x1f30a, 0x1f312, 0x1f314, 0x1f322, 0x1f328, 0x1f342, 0x1f344, 0x1f348, 0x1f350,\n        0x1f35e, 0x1f366, 0x1f37a, 0x1f39a, 0x1f3ae, 0x1f3b2, 0x1f3b4, 0x1f416, 0x1f426, 0x1f42c, 0x1f43a, 0x1f446,\n        0x1f44c, 0x1f458, 0x1f46e, 0x1f472, 0x1f474, 0x1f486, 0x1f48c, 0x1f498, 0x1f4b0, 0x1f4be, 0x1f4ce, 0x1f4dc,\n        0x1f4e2, 0x1f4e4, 0x1f4e8, 0x1f4f6, 0x1f506, 0x1f50c, 0x1f518, 0x1f530, 0x1f53e, 0x1f560, 0x1f57c, 0x1f58e,\n        0x1f59c, 0x1f5b8, 0x1f5c2, 0x1f5c4, 0x1f5c8, 0x1f5d0, 0x1f5de, 0x1f5e6, 0x1f5ec, 0x1f5fa, 0x1f60a, 0x1f612,\n        0x1f614, 0x1f622, 0x1f624, 0x1f628, 0x1f636, 0x1f642, 0x1f644, 0x1f648, 0x1f650, 0x1f65e, 0x1f666, 0x1f67a,\n        0x1f682, 0x1f684, 0x1f688, 0x1f690, 0x1f69e, 0x1f6a0, 0x1f6bc, 0x1f6cc, 0x1f6f2, 0x1f6f4, 0x1f71a, 0x1f72e,\n        0x1f732, 0x1f734, 0x1f74e, 0x1f75c, 0x1f762, 0x1f764, 0x1f768, 0x1f776, 0x1f796, 0x1f7a6, 0x1f7ac, 0x1f7ba,\n        0x1f7d2, 0x1f7d4, 0x1f89a, 0x1f8ae, 0x1f8b2, 0x1f8b4, 0x1f8d6, 0x1f8ea, 0x1f91a, 0x1f92e, 0x1f932, 0x1f934,\n        0x1f94e, 0x1f95c, 0x1f962, 0x1f964, 0x1f968, 0x1f976, 0x1f996, 0x1f9a6, 0x1f9ac, 0x1f9ba, 0x1f9ca, 0x1f9d2,\n        0x1f9d4, 0x1fa1a, 0x1fa2e, 0x1fa32, 0x1fa34, 0x1fa4e, 0x1fa5c, 0x1fa62, 0x1fa64, 0x1fa68, 0x1fa76, 0x1fa8e,\n        0x1fa9c, 0x1fab8, 0x1fac2, 0x1fac4, 0x1fac8, 0x1fad0, 0x1fade, 0x1fae6, 0x1faec, 0x1fb16, 0x1fb26, 0x1fb2c,\n        0x1fb3a, 0x1fb46, 0x1fb4c, 0x1fb58, 0x1fb6e, 0x1fb72, 0x1fb74, 0x1fb8a, 0x1fb92, 0x1fb94, 0x1fba2, 0x1fba4,\n        0x1fba8, 0x1fbb6, 0x1fbda\n    ]);\n    /**\n     * This table contains to codewords for all symbols.\n     */\n    PDF417Common.CODEWORD_TABLE = Int32Array.from([\n        2627, 1819, 2622, 2621, 1813, 1812, 2729, 2724, 2723, 2779, 2774, 2773, 902, 896, 908, 868, 865, 861, 859, 2511,\n        873, 871, 1780, 835, 2493, 825, 2491, 842, 837, 844, 1764, 1762, 811, 810, 809, 2483, 807, 2482, 806, 2480, 815,\n        814, 813, 812, 2484, 817, 816, 1745, 1744, 1742, 1746, 2655, 2637, 2635, 2626, 2625, 2623, 2628, 1820, 2752,\n        2739, 2737, 2728, 2727, 2725, 2730, 2785, 2783, 2778, 2777, 2775, 2780, 787, 781, 747, 739, 736, 2413, 754, 752,\n        1719, 692, 689, 681, 2371, 678, 2369, 700, 697, 694, 703, 1688, 1686, 642, 638, 2343, 631, 2341, 627, 2338, 651,\n        646, 643, 2345, 654, 652, 1652, 1650, 1647, 1654, 601, 599, 2322, 596, 2321, 594, 2319, 2317, 611, 610, 608, 606,\n        2324, 603, 2323, 615, 614, 612, 1617, 1616, 1614, 1612, 616, 1619, 1618, 2575, 2538, 2536, 905, 901, 898, 909,\n        2509, 2507, 2504, 870, 867, 864, 860, 2512, 875, 872, 1781, 2490, 2489, 2487, 2485, 1748, 836, 834, 832, 830,\n        2494, 827, 2492, 843, 841, 839, 845, 1765, 1763, 2701, 2676, 2674, 2653, 2648, 2656, 2634, 2633, 2631, 2629,\n        1821, 2638, 2636, 2770, 2763, 2761, 2750, 2745, 2753, 2736, 2735, 2733, 2731, 1848, 2740, 2738, 2786, 2784, 591,\n        588, 576, 569, 566, 2296, 1590, 537, 534, 526, 2276, 522, 2274, 545, 542, 539, 548, 1572, 1570, 481, 2245, 466,\n        2242, 462, 2239, 492, 485, 482, 2249, 496, 494, 1534, 1531, 1528, 1538, 413, 2196, 406, 2191, 2188, 425, 419,\n        2202, 415, 2199, 432, 430, 427, 1472, 1467, 1464, 433, 1476, 1474, 368, 367, 2160, 365, 2159, 362, 2157, 2155,\n        2152, 378, 377, 375, 2166, 372, 2165, 369, 2162, 383, 381, 379, 2168, 1419, 1418, 1416, 1414, 385, 1411, 384,\n        1423, 1422, 1420, 1424, 2461, 802, 2441, 2439, 790, 786, 783, 794, 2409, 2406, 2403, 750, 742, 738, 2414, 756,\n        753, 1720, 2367, 2365, 2362, 2359, 1663, 693, 691, 684, 2373, 680, 2370, 702, 699, 696, 704, 1690, 1687, 2337,\n        2336, 2334, 2332, 1624, 2329, 1622, 640, 637, 2344, 634, 2342, 630, 2340, 650, 648, 645, 2346, 655, 653, 1653,\n        1651, 1649, 1655, 2612, 2597, 2595, 2571, 2568, 2565, 2576, 2534, 2529, 2526, 1787, 2540, 2537, 907, 904, 900,\n        910, 2503, 2502, 2500, 2498, 1768, 2495, 1767, 2510, 2508, 2506, 869, 866, 863, 2513, 876, 874, 1782, 2720, 2713,\n        2711, 2697, 2694, 2691, 2702, 2672, 2670, 2664, 1828, 2678, 2675, 2647, 2646, 2644, 2642, 1823, 2639, 1822, 2654,\n        2652, 2650, 2657, 2771, 1855, 2765, 2762, 1850, 1849, 2751, 2749, 2747, 2754, 353, 2148, 344, 342, 336, 2142,\n        332, 2140, 345, 1375, 1373, 306, 2130, 299, 2128, 295, 2125, 319, 314, 311, 2132, 1354, 1352, 1349, 1356, 262,\n        257, 2101, 253, 2096, 2093, 274, 273, 267, 2107, 263, 2104, 280, 278, 275, 1316, 1311, 1308, 1320, 1318, 2052,\n        202, 2050, 2044, 2040, 219, 2063, 212, 2060, 208, 2055, 224, 221, 2066, 1260, 1258, 1252, 231, 1248, 229, 1266,\n        1264, 1261, 1268, 155, 1998, 153, 1996, 1994, 1991, 1988, 165, 164, 2007, 162, 2006, 159, 2003, 2000, 172, 171,\n        169, 2012, 166, 2010, 1186, 1184, 1182, 1179, 175, 1176, 173, 1192, 1191, 1189, 1187, 176, 1194, 1193, 2313,\n        2307, 2305, 592, 589, 2294, 2292, 2289, 578, 572, 568, 2297, 580, 1591, 2272, 2267, 2264, 1547, 538, 536, 529,\n        2278, 525, 2275, 547, 544, 541, 1574, 1571, 2237, 2235, 2229, 1493, 2225, 1489, 478, 2247, 470, 2244, 465, 2241,\n        493, 488, 484, 2250, 498, 495, 1536, 1533, 1530, 1539, 2187, 2186, 2184, 2182, 1432, 2179, 1430, 2176, 1427, 414,\n        412, 2197, 409, 2195, 405, 2193, 2190, 426, 424, 421, 2203, 418, 2201, 431, 429, 1473, 1471, 1469, 1466, 434,\n        1477, 1475, 2478, 2472, 2470, 2459, 2457, 2454, 2462, 803, 2437, 2432, 2429, 1726, 2443, 2440, 792, 789, 785,\n        2401, 2399, 2393, 1702, 2389, 1699, 2411, 2408, 2405, 745, 741, 2415, 758, 755, 1721, 2358, 2357, 2355, 2353,\n        1661, 2350, 1660, 2347, 1657, 2368, 2366, 2364, 2361, 1666, 690, 687, 2374, 683, 2372, 701, 698, 705, 1691, 1689,\n        2619, 2617, 2610, 2608, 2605, 2613, 2593, 2588, 2585, 1803, 2599, 2596, 2563, 2561, 2555, 1797, 2551, 1795, 2573,\n        2570, 2567, 2577, 2525, 2524, 2522, 2520, 1786, 2517, 1785, 2514, 1783, 2535, 2533, 2531, 2528, 1788, 2541, 2539,\n        906, 903, 911, 2721, 1844, 2715, 2712, 1838, 1836, 2699, 2696, 2693, 2703, 1827, 1826, 1824, 2673, 2671, 2669,\n        2666, 1829, 2679, 2677, 1858, 1857, 2772, 1854, 1853, 1851, 1856, 2766, 2764, 143, 1987, 139, 1986, 135, 133,\n        131, 1984, 128, 1983, 125, 1981, 138, 137, 136, 1985, 1133, 1132, 1130, 112, 110, 1974, 107, 1973, 104, 1971,\n        1969, 122, 121, 119, 117, 1977, 114, 1976, 124, 1115, 1114, 1112, 1110, 1117, 1116, 84, 83, 1953, 81, 1952, 78,\n        1950, 1948, 1945, 94, 93, 91, 1959, 88, 1958, 85, 1955, 99, 97, 95, 1961, 1086, 1085, 1083, 1081, 1078, 100,\n        1090, 1089, 1087, 1091, 49, 47, 1917, 44, 1915, 1913, 1910, 1907, 59, 1926, 56, 1925, 53, 1922, 1919, 66, 64,\n        1931, 61, 1929, 1042, 1040, 1038, 71, 1035, 70, 1032, 68, 1048, 1047, 1045, 1043, 1050, 1049, 12, 10, 1869, 1867,\n        1864, 1861, 21, 1880, 19, 1877, 1874, 1871, 28, 1888, 25, 1886, 22, 1883, 982, 980, 977, 974, 32, 30, 991, 989,\n        987, 984, 34, 995, 994, 992, 2151, 2150, 2147, 2146, 2144, 356, 355, 354, 2149, 2139, 2138, 2136, 2134, 1359,\n        343, 341, 338, 2143, 335, 2141, 348, 347, 346, 1376, 1374, 2124, 2123, 2121, 2119, 1326, 2116, 1324, 310, 308,\n        305, 2131, 302, 2129, 298, 2127, 320, 318, 316, 313, 2133, 322, 321, 1355, 1353, 1351, 1357, 2092, 2091, 2089,\n        2087, 1276, 2084, 1274, 2081, 1271, 259, 2102, 256, 2100, 252, 2098, 2095, 272, 269, 2108, 266, 2106, 281, 279,\n        277, 1317, 1315, 1313, 1310, 282, 1321, 1319, 2039, 2037, 2035, 2032, 1203, 2029, 1200, 1197, 207, 2053, 205,\n        2051, 201, 2049, 2046, 2043, 220, 218, 2064, 215, 2062, 211, 2059, 228, 226, 223, 2069, 1259, 1257, 1254, 232,\n        1251, 230, 1267, 1265, 1263, 2316, 2315, 2312, 2311, 2309, 2314, 2304, 2303, 2301, 2299, 1593, 2308, 2306, 590,\n        2288, 2287, 2285, 2283, 1578, 2280, 1577, 2295, 2293, 2291, 579, 577, 574, 571, 2298, 582, 581, 1592, 2263, 2262,\n        2260, 2258, 1545, 2255, 1544, 2252, 1541, 2273, 2271, 2269, 2266, 1550, 535, 532, 2279, 528, 2277, 546, 543, 549,\n        1575, 1573, 2224, 2222, 2220, 1486, 2217, 1485, 2214, 1482, 1479, 2238, 2236, 2234, 2231, 1496, 2228, 1492, 480,\n        477, 2248, 473, 2246, 469, 2243, 490, 487, 2251, 497, 1537, 1535, 1532, 2477, 2476, 2474, 2479, 2469, 2468, 2466,\n        2464, 1730, 2473, 2471, 2453, 2452, 2450, 2448, 1729, 2445, 1728, 2460, 2458, 2456, 2463, 805, 804, 2428, 2427,\n        2425, 2423, 1725, 2420, 1724, 2417, 1722, 2438, 2436, 2434, 2431, 1727, 2444, 2442, 793, 791, 788, 795, 2388,\n        2386, 2384, 1697, 2381, 1696, 2378, 1694, 1692, 2402, 2400, 2398, 2395, 1703, 2392, 1701, 2412, 2410, 2407, 751,\n        748, 744, 2416, 759, 757, 1807, 2620, 2618, 1806, 1805, 2611, 2609, 2607, 2614, 1802, 1801, 1799, 2594, 2592,\n        2590, 2587, 1804, 2600, 2598, 1794, 1793, 1791, 1789, 2564, 2562, 2560, 2557, 1798, 2554, 1796, 2574, 2572, 2569,\n        2578, 1847, 1846, 2722, 1843, 1842, 1840, 1845, 2716, 2714, 1835, 1834, 1832, 1830, 1839, 1837, 2700, 2698, 2695,\n        2704, 1817, 1811, 1810, 897, 862, 1777, 829, 826, 838, 1760, 1758, 808, 2481, 1741, 1740, 1738, 1743, 2624, 1818,\n        2726, 2776, 782, 740, 737, 1715, 686, 679, 695, 1682, 1680, 639, 628, 2339, 647, 644, 1645, 1643, 1640, 1648,\n        602, 600, 597, 595, 2320, 593, 2318, 609, 607, 604, 1611, 1610, 1608, 1606, 613, 1615, 1613, 2328, 926, 924, 892,\n        886, 899, 857, 850, 2505, 1778, 824, 823, 821, 819, 2488, 818, 2486, 833, 831, 828, 840, 1761, 1759, 2649, 2632,\n        2630, 2746, 2734, 2732, 2782, 2781, 570, 567, 1587, 531, 527, 523, 540, 1566, 1564, 476, 467, 463, 2240, 486,\n        483, 1524, 1521, 1518, 1529, 411, 403, 2192, 399, 2189, 423, 416, 1462, 1457, 1454, 428, 1468, 1465, 2210, 366,\n        363, 2158, 360, 2156, 357, 2153, 376, 373, 370, 2163, 1410, 1409, 1407, 1405, 382, 1402, 380, 1417, 1415, 1412,\n        1421, 2175, 2174, 777, 774, 771, 784, 732, 725, 722, 2404, 743, 1716, 676, 674, 668, 2363, 665, 2360, 685, 1684,\n        1681, 626, 624, 622, 2335, 620, 2333, 617, 2330, 641, 635, 649, 1646, 1644, 1642, 2566, 928, 925, 2530, 2527,\n        894, 891, 888, 2501, 2499, 2496, 858, 856, 854, 851, 1779, 2692, 2668, 2665, 2645, 2643, 2640, 2651, 2768, 2759,\n        2757, 2744, 2743, 2741, 2748, 352, 1382, 340, 337, 333, 1371, 1369, 307, 300, 296, 2126, 315, 312, 1347, 1342,\n        1350, 261, 258, 250, 2097, 246, 2094, 271, 268, 264, 1306, 1301, 1298, 276, 1312, 1309, 2115, 203, 2048, 195,\n        2045, 191, 2041, 213, 209, 2056, 1246, 1244, 1238, 225, 1234, 222, 1256, 1253, 1249, 1262, 2080, 2079, 154, 1997,\n        150, 1995, 147, 1992, 1989, 163, 160, 2004, 156, 2001, 1175, 1174, 1172, 1170, 1167, 170, 1164, 167, 1185, 1183,\n        1180, 1177, 174, 1190, 1188, 2025, 2024, 2022, 587, 586, 564, 559, 556, 2290, 573, 1588, 520, 518, 512, 2268,\n        508, 2265, 530, 1568, 1565, 461, 457, 2233, 450, 2230, 446, 2226, 479, 471, 489, 1526, 1523, 1520, 397, 395,\n        2185, 392, 2183, 389, 2180, 2177, 410, 2194, 402, 422, 1463, 1461, 1459, 1456, 1470, 2455, 799, 2433, 2430, 779,\n        776, 773, 2397, 2394, 2390, 734, 728, 724, 746, 1717, 2356, 2354, 2351, 2348, 1658, 677, 675, 673, 670, 667, 688,\n        1685, 1683, 2606, 2589, 2586, 2559, 2556, 2552, 927, 2523, 2521, 2518, 2515, 1784, 2532, 895, 893, 890, 2718,\n        2709, 2707, 2689, 2687, 2684, 2663, 2662, 2660, 2658, 1825, 2667, 2769, 1852, 2760, 2758, 142, 141, 1139, 1138,\n        134, 132, 129, 126, 1982, 1129, 1128, 1126, 1131, 113, 111, 108, 105, 1972, 101, 1970, 120, 118, 115, 1109, 1108,\n        1106, 1104, 123, 1113, 1111, 82, 79, 1951, 75, 1949, 72, 1946, 92, 89, 86, 1956, 1077, 1076, 1074, 1072, 98,\n        1069, 96, 1084, 1082, 1079, 1088, 1968, 1967, 48, 45, 1916, 42, 1914, 39, 1911, 1908, 60, 57, 54, 1923, 50, 1920,\n        1031, 1030, 1028, 1026, 67, 1023, 65, 1020, 62, 1041, 1039, 1036, 1033, 69, 1046, 1044, 1944, 1943, 1941, 11, 9,\n        1868, 7, 1865, 1862, 1859, 20, 1878, 16, 1875, 13, 1872, 970, 968, 966, 963, 29, 960, 26, 23, 983, 981, 978, 975,\n        33, 971, 31, 990, 988, 985, 1906, 1904, 1902, 993, 351, 2145, 1383, 331, 330, 328, 326, 2137, 323, 2135, 339,\n        1372, 1370, 294, 293, 291, 289, 2122, 286, 2120, 283, 2117, 309, 303, 317, 1348, 1346, 1344, 245, 244, 242, 2090,\n        239, 2088, 236, 2085, 2082, 260, 2099, 249, 270, 1307, 1305, 1303, 1300, 1314, 189, 2038, 186, 2036, 183, 2033,\n        2030, 2026, 206, 198, 2047, 194, 216, 1247, 1245, 1243, 1240, 227, 1237, 1255, 2310, 2302, 2300, 2286, 2284,\n        2281, 565, 563, 561, 558, 575, 1589, 2261, 2259, 2256, 2253, 1542, 521, 519, 517, 514, 2270, 511, 533, 1569,\n        1567, 2223, 2221, 2218, 2215, 1483, 2211, 1480, 459, 456, 453, 2232, 449, 474, 491, 1527, 1525, 1522, 2475, 2467,\n        2465, 2451, 2449, 2446, 801, 800, 2426, 2424, 2421, 2418, 1723, 2435, 780, 778, 775, 2387, 2385, 2382, 2379,\n        1695, 2375, 1693, 2396, 735, 733, 730, 727, 749, 1718, 2616, 2615, 2604, 2603, 2601, 2584, 2583, 2581, 2579,\n        1800, 2591, 2550, 2549, 2547, 2545, 1792, 2542, 1790, 2558, 929, 2719, 1841, 2710, 2708, 1833, 1831, 2690, 2688,\n        2686, 1815, 1809, 1808, 1774, 1756, 1754, 1737, 1736, 1734, 1739, 1816, 1711, 1676, 1674, 633, 629, 1638, 1636,\n        1633, 1641, 598, 1605, 1604, 1602, 1600, 605, 1609, 1607, 2327, 887, 853, 1775, 822, 820, 1757, 1755, 1584, 524,\n        1560, 1558, 468, 464, 1514, 1511, 1508, 1519, 408, 404, 400, 1452, 1447, 1444, 417, 1458, 1455, 2208, 364, 361,\n        358, 2154, 1401, 1400, 1398, 1396, 374, 1393, 371, 1408, 1406, 1403, 1413, 2173, 2172, 772, 726, 723, 1712, 672,\n        669, 666, 682, 1678, 1675, 625, 623, 621, 618, 2331, 636, 632, 1639, 1637, 1635, 920, 918, 884, 880, 889, 849,\n        848, 847, 846, 2497, 855, 852, 1776, 2641, 2742, 2787, 1380, 334, 1367, 1365, 301, 297, 1340, 1338, 1335, 1343,\n        255, 251, 247, 1296, 1291, 1288, 265, 1302, 1299, 2113, 204, 196, 192, 2042, 1232, 1230, 1224, 214, 1220, 210,\n        1242, 1239, 1235, 1250, 2077, 2075, 151, 148, 1993, 144, 1990, 1163, 1162, 1160, 1158, 1155, 161, 1152, 157,\n        1173, 1171, 1168, 1165, 168, 1181, 1178, 2021, 2020, 2018, 2023, 585, 560, 557, 1585, 516, 509, 1562, 1559, 458,\n        447, 2227, 472, 1516, 1513, 1510, 398, 396, 393, 390, 2181, 386, 2178, 407, 1453, 1451, 1449, 1446, 420, 1460,\n        2209, 769, 764, 720, 712, 2391, 729, 1713, 664, 663, 661, 659, 2352, 656, 2349, 671, 1679, 1677, 2553, 922, 919,\n        2519, 2516, 885, 883, 881, 2685, 2661, 2659, 2767, 2756, 2755, 140, 1137, 1136, 130, 127, 1125, 1124, 1122, 1127,\n        109, 106, 102, 1103, 1102, 1100, 1098, 116, 1107, 1105, 1980, 80, 76, 73, 1947, 1068, 1067, 1065, 1063, 90, 1060,\n        87, 1075, 1073, 1070, 1080, 1966, 1965, 46, 43, 40, 1912, 36, 1909, 1019, 1018, 1016, 1014, 58, 1011, 55, 1008,\n        51, 1029, 1027, 1024, 1021, 63, 1037, 1034, 1940, 1939, 1937, 1942, 8, 1866, 4, 1863, 1, 1860, 956, 954, 952,\n        949, 946, 17, 14, 969, 967, 964, 961, 27, 957, 24, 979, 976, 972, 1901, 1900, 1898, 1896, 986, 1905, 1903, 350,\n        349, 1381, 329, 327, 324, 1368, 1366, 292, 290, 287, 284, 2118, 304, 1341, 1339, 1337, 1345, 243, 240, 237, 2086,\n        233, 2083, 254, 1297, 1295, 1293, 1290, 1304, 2114, 190, 187, 184, 2034, 180, 2031, 177, 2027, 199, 1233, 1231,\n        1229, 1226, 217, 1223, 1241, 2078, 2076, 584, 555, 554, 552, 550, 2282, 562, 1586, 507, 506, 504, 502, 2257, 499,\n        2254, 515, 1563, 1561, 445, 443, 441, 2219, 438, 2216, 435, 2212, 460, 454, 475, 1517, 1515, 1512, 2447, 798,\n        797, 2422, 2419, 770, 768, 766, 2383, 2380, 2376, 721, 719, 717, 714, 731, 1714, 2602, 2582, 2580, 2548, 2546,\n        2543, 923, 921, 2717, 2706, 2705, 2683, 2682, 2680, 1771, 1752, 1750, 1733, 1732, 1731, 1735, 1814, 1707, 1670,\n        1668, 1631, 1629, 1626, 1634, 1599, 1598, 1596, 1594, 1603, 1601, 2326, 1772, 1753, 1751, 1581, 1554, 1552, 1504,\n        1501, 1498, 1509, 1442, 1437, 1434, 401, 1448, 1445, 2206, 1392, 1391, 1389, 1387, 1384, 359, 1399, 1397, 1394,\n        1404, 2171, 2170, 1708, 1672, 1669, 619, 1632, 1630, 1628, 1773, 1378, 1363, 1361, 1333, 1328, 1336, 1286, 1281,\n        1278, 248, 1292, 1289, 2111, 1218, 1216, 1210, 197, 1206, 193, 1228, 1225, 1221, 1236, 2073, 2071, 1151, 1150,\n        1148, 1146, 152, 1143, 149, 1140, 145, 1161, 1159, 1156, 1153, 158, 1169, 1166, 2017, 2016, 2014, 2019, 1582,\n        510, 1556, 1553, 452, 448, 1506, 1500, 394, 391, 387, 1443, 1441, 1439, 1436, 1450, 2207, 765, 716, 713, 1709,\n        662, 660, 657, 1673, 1671, 916, 914, 879, 878, 877, 882, 1135, 1134, 1121, 1120, 1118, 1123, 1097, 1096, 1094,\n        1092, 103, 1101, 1099, 1979, 1059, 1058, 1056, 1054, 77, 1051, 74, 1066, 1064, 1061, 1071, 1964, 1963, 1007,\n        1006, 1004, 1002, 999, 41, 996, 37, 1017, 1015, 1012, 1009, 52, 1025, 1022, 1936, 1935, 1933, 1938, 942, 940,\n        938, 935, 932, 5, 2, 955, 953, 950, 947, 18, 943, 15, 965, 962, 958, 1895, 1894, 1892, 1890, 973, 1899, 1897,\n        1379, 325, 1364, 1362, 288, 285, 1334, 1332, 1330, 241, 238, 234, 1287, 1285, 1283, 1280, 1294, 2112, 188, 185,\n        181, 178, 2028, 1219, 1217, 1215, 1212, 200, 1209, 1227, 2074, 2072, 583, 553, 551, 1583, 505, 503, 500, 513,\n        1557, 1555, 444, 442, 439, 436, 2213, 455, 451, 1507, 1505, 1502, 796, 763, 762, 760, 767, 711, 710, 708, 706,\n        2377, 718, 715, 1710, 2544, 917, 915, 2681, 1627, 1597, 1595, 2325, 1769, 1749, 1747, 1499, 1438, 1435, 2204,\n        1390, 1388, 1385, 1395, 2169, 2167, 1704, 1665, 1662, 1625, 1623, 1620, 1770, 1329, 1282, 1279, 2109, 1214, 1207,\n        1222, 2068, 2065, 1149, 1147, 1144, 1141, 146, 1157, 1154, 2013, 2011, 2008, 2015, 1579, 1549, 1546, 1495, 1487,\n        1433, 1431, 1428, 1425, 388, 1440, 2205, 1705, 658, 1667, 1664, 1119, 1095, 1093, 1978, 1057, 1055, 1052, 1062,\n        1962, 1960, 1005, 1003, 1000, 997, 38, 1013, 1010, 1932, 1930, 1927, 1934, 941, 939, 936, 933, 6, 930, 3, 951,\n        948, 944, 1889, 1887, 1884, 1881, 959, 1893, 1891, 35, 1377, 1360, 1358, 1327, 1325, 1322, 1331, 1277, 1275,\n        1272, 1269, 235, 1284, 2110, 1205, 1204, 1201, 1198, 182, 1195, 179, 1213, 2070, 2067, 1580, 501, 1551, 1548,\n        440, 437, 1497, 1494, 1490, 1503, 761, 709, 707, 1706, 913, 912, 2198, 1386, 2164, 2161, 1621, 1766, 2103, 1208,\n        2058, 2054, 1145, 1142, 2005, 2002, 1999, 2009, 1488, 1429, 1426, 2200, 1698, 1659, 1656, 1975, 1053, 1957, 1954,\n        1001, 998, 1924, 1921, 1918, 1928, 937, 934, 931, 1879, 1876, 1873, 1870, 945, 1885, 1882, 1323, 1273, 1270,\n        2105, 1202, 1199, 1196, 1211, 2061, 2057, 1576, 1543, 1540, 1484, 1481, 1478, 1491, 1700\n    ]);\n\n    /*\n    * Copyright 2007 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    // import java.util.List;\n    /**\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417DetectorResult {\n        constructor(bits, points) {\n            this.bits = bits;\n            this.points = points;\n        }\n        getBits() {\n            return this.bits;\n        }\n        getPoints() {\n            return this.points;\n        }\n    }\n\n    /*\n    * Copyright 2009 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    // import java.util.ArrayList;\n    // import java.util.Arrays;\n    // import java.util.List;\n    // import java.util.Map;\n    /**\n     * <p>Encapsulates logic that can detect a PDF417 Code in an image, even if the\n     * PDF417 Code is rotated or skewed, or partially obscured.</p>\n     *\n     * @author SITA Lab (kevin.osullivan@sita.aero)\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Guenther Grau\n     */\n    /*public*/ /*final*/ class Detector$3 {\n        /**\n         * <p>Detects a PDF417 Code in an image. Only checks 0 and 180 degree rotations.</p>\n         *\n         * @param image barcode image to decode\n         * @param hints optional hints to detector\n         * @param multiple if true, then the image is searched for multiple codes. If false, then at most one code will\n         * be found and returned\n         * @return {@link PDF417DetectorResult} encapsulating results of detecting a PDF417 code\n         * @throws NotFoundException if no PDF417 Code can be found\n         */\n        static detectMultiple(image, hints, multiple) {\n            // TODO detection improvement, tryHarder could try several different luminance thresholds/blackpoints or even\n            // different binarizers\n            // boolean tryHarder = hints != null && hints.containsKey(DecodeHintType.TRY_HARDER);\n            let bitMatrix = image.getBlackMatrix();\n            let barcodeCoordinates = Detector$3.detect(multiple, bitMatrix);\n            if (!barcodeCoordinates.length) {\n                bitMatrix = bitMatrix.clone();\n                bitMatrix.rotate180();\n                barcodeCoordinates = Detector$3.detect(multiple, bitMatrix);\n            }\n            return new PDF417DetectorResult(bitMatrix, barcodeCoordinates);\n        }\n        /**\n         * Detects PDF417 codes in an image. Only checks 0 degree rotation\n         * @param multiple if true, then the image is searched for multiple codes. If false, then at most one code will\n         * be found and returned\n         * @param bitMatrix bit matrix to detect barcodes in\n         * @return List of ResultPoint arrays containing the coordinates of found barcodes\n         */\n        static detect(multiple, bitMatrix) {\n            const barcodeCoordinates = new Array();\n            let row = 0;\n            let column = 0;\n            let foundBarcodeInRow = false;\n            while (row < bitMatrix.getHeight()) {\n                const vertices = Detector$3.findVertices(bitMatrix, row, column);\n                if (vertices[0] == null && vertices[3] == null) {\n                    if (!foundBarcodeInRow) {\n                        // we didn't find any barcode so that's the end of searching\n                        break;\n                    }\n                    // we didn't find a barcode starting at the given column and row. Try again from the first column and slightly\n                    // below the lowest barcode we found so far.\n                    foundBarcodeInRow = false;\n                    column = 0;\n                    for (const barcodeCoordinate of barcodeCoordinates) {\n                        if (barcodeCoordinate[1] != null) {\n                            row = Math.trunc(Math.max(row, barcodeCoordinate[1].getY()));\n                        }\n                        if (barcodeCoordinate[3] != null) {\n                            row = Math.max(row, Math.trunc(barcodeCoordinate[3].getY()));\n                        }\n                    }\n                    row += Detector$3.ROW_STEP;\n                    continue;\n                }\n                foundBarcodeInRow = true;\n                barcodeCoordinates.push(vertices);\n                if (!multiple) {\n                    break;\n                }\n                // if we didn't find a right row indicator column, then continue the search for the next barcode after the\n                // start pattern of the barcode just found.\n                if (vertices[2] != null) {\n                    column = Math.trunc(vertices[2].getX());\n                    row = Math.trunc(vertices[2].getY());\n                }\n                else {\n                    column = Math.trunc(vertices[4].getX());\n                    row = Math.trunc(vertices[4].getY());\n                }\n            }\n            return barcodeCoordinates;\n        }\n        /**\n         * Locate the vertices and the codewords area of a black blob using the Start\n         * and Stop patterns as locators.\n         *\n         * @param matrix the scanned barcode image.\n         * @return an array containing the vertices:\n         *           vertices[0] x, y top left barcode\n         *           vertices[1] x, y bottom left barcode\n         *           vertices[2] x, y top right barcode\n         *           vertices[3] x, y bottom right barcode\n         *           vertices[4] x, y top left codeword area\n         *           vertices[5] x, y bottom left codeword area\n         *           vertices[6] x, y top right codeword area\n         *           vertices[7] x, y bottom right codeword area\n         */\n        static findVertices(matrix, startRow, startColumn) {\n            const height = matrix.getHeight();\n            const width = matrix.getWidth();\n            // const result = new ResultPoint[8];\n            const result = new Array(8);\n            Detector$3.copyToResult(result, Detector$3.findRowsWithPattern(matrix, height, width, startRow, startColumn, Detector$3.START_PATTERN), Detector$3.INDEXES_START_PATTERN);\n            if (result[4] != null) {\n                startColumn = Math.trunc(result[4].getX());\n                startRow = Math.trunc(result[4].getY());\n            }\n            Detector$3.copyToResult(result, Detector$3.findRowsWithPattern(matrix, height, width, startRow, startColumn, Detector$3.STOP_PATTERN), Detector$3.INDEXES_STOP_PATTERN);\n            return result;\n        }\n        static copyToResult(result, tmpResult, destinationIndexes) {\n            for (let i = 0; i < destinationIndexes.length; i++) {\n                result[destinationIndexes[i]] = tmpResult[i];\n            }\n        }\n        static findRowsWithPattern(matrix, height, width, startRow, startColumn, pattern) {\n            // const result = new ResultPoint[4];\n            const result = new Array(4);\n            let found = false;\n            const counters = new Int32Array(pattern.length);\n            for (; startRow < height; startRow += Detector$3.ROW_STEP) {\n                let loc = Detector$3.findGuardPattern(matrix, startColumn, startRow, width, false, pattern, counters);\n                if (loc != null) {\n                    while (startRow > 0) {\n                        const previousRowLoc = Detector$3.findGuardPattern(matrix, startColumn, --startRow, width, false, pattern, counters);\n                        if (previousRowLoc != null) {\n                            loc = previousRowLoc;\n                        }\n                        else {\n                            startRow++;\n                            break;\n                        }\n                    }\n                    result[0] = new ResultPoint(loc[0], startRow);\n                    result[1] = new ResultPoint(loc[1], startRow);\n                    found = true;\n                    break;\n                }\n            }\n            let stopRow = startRow + 1;\n            // Last row of the current symbol that contains pattern\n            if (found) {\n                let skippedRowCount = 0;\n                let previousRowLoc = Int32Array.from([Math.trunc(result[0].getX()), Math.trunc(result[1].getX())]);\n                for (; stopRow < height; stopRow++) {\n                    const loc = Detector$3.findGuardPattern(matrix, previousRowLoc[0], stopRow, width, false, pattern, counters);\n                    // a found pattern is only considered to belong to the same barcode if the start and end positions\n                    // don't differ too much. Pattern drift should be not bigger than two for consecutive rows. With\n                    // a higher number of skipped rows drift could be larger. To keep it simple for now, we allow a slightly\n                    // larger drift and don't check for skipped rows.\n                    if (loc != null &&\n                        Math.abs(previousRowLoc[0] - loc[0]) < Detector$3.MAX_PATTERN_DRIFT &&\n                        Math.abs(previousRowLoc[1] - loc[1]) < Detector$3.MAX_PATTERN_DRIFT) {\n                        previousRowLoc = loc;\n                        skippedRowCount = 0;\n                    }\n                    else {\n                        if (skippedRowCount > Detector$3.SKIPPED_ROW_COUNT_MAX) {\n                            break;\n                        }\n                        else {\n                            skippedRowCount++;\n                        }\n                    }\n                }\n                stopRow -= skippedRowCount + 1;\n                result[2] = new ResultPoint(previousRowLoc[0], stopRow);\n                result[3] = new ResultPoint(previousRowLoc[1], stopRow);\n            }\n            if (stopRow - startRow < Detector$3.BARCODE_MIN_HEIGHT) {\n                Arrays.fill(result, null);\n            }\n            return result;\n        }\n        /**\n         * @param matrix row of black/white values to search\n         * @param column x position to start search\n         * @param row y position to start search\n         * @param width the number of pixels to search on this row\n         * @param pattern pattern of counts of number of black and white pixels that are\n         *                 being searched for as a pattern\n         * @param counters array of counters, as long as pattern, to re-use\n         * @return start/end horizontal offset of guard pattern, as an array of two ints.\n         */\n        static findGuardPattern(matrix, column, row, width, whiteFirst, pattern, counters) {\n            Arrays.fillWithin(counters, 0, counters.length, 0);\n            let patternStart = column;\n            let pixelDrift = 0;\n            // if there are black pixels left of the current pixel shift to the left, but only for MAX_PIXEL_DRIFT pixels\n            while (matrix.get(patternStart, row) && patternStart > 0 && pixelDrift++ < Detector$3.MAX_PIXEL_DRIFT) {\n                patternStart--;\n            }\n            let x = patternStart;\n            let counterPosition = 0;\n            let patternLength = pattern.length;\n            for (let isWhite = whiteFirst; x < width; x++) {\n                let pixel = matrix.get(x, row);\n                if (pixel !== isWhite) {\n                    counters[counterPosition]++;\n                }\n                else {\n                    if (counterPosition === patternLength - 1) {\n                        if (Detector$3.patternMatchVariance(counters, pattern, Detector$3.MAX_INDIVIDUAL_VARIANCE) < Detector$3.MAX_AVG_VARIANCE) {\n                            return new Int32Array([patternStart, x]);\n                        }\n                        patternStart += counters[0] + counters[1];\n                        System.arraycopy(counters, 2, counters, 0, counterPosition - 1);\n                        counters[counterPosition - 1] = 0;\n                        counters[counterPosition] = 0;\n                        counterPosition--;\n                    }\n                    else {\n                        counterPosition++;\n                    }\n                    counters[counterPosition] = 1;\n                    isWhite = !isWhite;\n                }\n            }\n            if (counterPosition === patternLength - 1 &&\n                Detector$3.patternMatchVariance(counters, pattern, Detector$3.MAX_INDIVIDUAL_VARIANCE) < Detector$3.MAX_AVG_VARIANCE) {\n                return new Int32Array([patternStart, x - 1]);\n            }\n            return null;\n        }\n        /**\n         * Determines how closely a set of observed counts of runs of black/white\n         * values matches a given target pattern. This is reported as the ratio of\n         * the total variance from the expected pattern proportions across all\n         * pattern elements, to the length of the pattern.\n         *\n         * @param counters observed counters\n         * @param pattern expected pattern\n         * @param maxIndividualVariance The most any counter can differ before we give up\n         * @return ratio of total variance between counters and pattern compared to total pattern size\n         */\n        static patternMatchVariance(counters, pattern, maxIndividualVariance) {\n            let numCounters = counters.length;\n            let total = 0;\n            let patternLength = 0;\n            for (let i = 0; i < numCounters; i++) {\n                total += counters[i];\n                patternLength += pattern[i];\n            }\n            if (total < patternLength) {\n                // If we don't even have one pixel per unit of bar width, assume this\n                // is too small to reliably match, so fail:\n                return /*Float.POSITIVE_INFINITY*/ Infinity;\n            }\n            // We're going to fake floating-point math in integers. We just need to use more bits.\n            // Scale up patternLength so that intermediate values below like scaledCounter will have\n            // more \"significant digits\".\n            let unitBarWidth = total / patternLength;\n            maxIndividualVariance *= unitBarWidth;\n            let totalVariance = 0.0;\n            for (let x = 0; x < numCounters; x++) {\n                let counter = counters[x];\n                let scaledPattern = pattern[x] * unitBarWidth;\n                let variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter;\n                if (variance > maxIndividualVariance) {\n                    return /*Float.POSITIVE_INFINITY*/ Infinity;\n                }\n                totalVariance += variance;\n            }\n            return totalVariance / total;\n        }\n    }\n    Detector$3.INDEXES_START_PATTERN = Int32Array.from([0, 4, 1, 5]);\n    Detector$3.INDEXES_STOP_PATTERN = Int32Array.from([6, 2, 7, 3]);\n    Detector$3.MAX_AVG_VARIANCE = 0.42;\n    Detector$3.MAX_INDIVIDUAL_VARIANCE = 0.8;\n    // B S B S B S B S Bar/Space pattern\n    // 11111111 0 1 0 1 0 1 000\n    Detector$3.START_PATTERN = Int32Array.from([8, 1, 1, 1, 1, 1, 1, 3]);\n    // 1111111 0 1 000 1 0 1 00 1\n    Detector$3.STOP_PATTERN = Int32Array.from([7, 1, 1, 3, 1, 1, 1, 2, 1]);\n    Detector$3.MAX_PIXEL_DRIFT = 3;\n    Detector$3.MAX_PATTERN_DRIFT = 5;\n    // if we set the value too low, then we don't detect the correct height of the bar if the start patterns are damaged.\n    // if we set the value too high, then we might detect the start pattern from a neighbor barcode.\n    Detector$3.SKIPPED_ROW_COUNT_MAX = 25;\n    // A PDF471 barcode should have at least 3 rows, with each row being >= 3 times the module width. Therefore it should be at least\n    // 9 pixels tall. To be conservative, we use about half the size to ensure we don't miss it.\n    Detector$3.ROW_STEP = 5;\n    Detector$3.BARCODE_MIN_HEIGHT = 10;\n\n    /*\n    * Copyright 2012 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * @author Sean Owen\n     * @see com.google.zxing.common.reedsolomon.GenericGFPoly\n     */\n    /*final*/ class ModulusPoly {\n        constructor(field, coefficients) {\n            if (coefficients.length === 0) {\n                throw new IllegalArgumentException();\n            }\n            this.field = field;\n            let coefficientsLength = /*int*/ coefficients.length;\n            if (coefficientsLength > 1 && coefficients[0] === 0) {\n                // Leading term must be non-zero for anything except the constant polynomial \"0\"\n                let firstNonZero = /*int*/ 1;\n                while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) {\n                    firstNonZero++;\n                }\n                if (firstNonZero === coefficientsLength) {\n                    this.coefficients = new Int32Array([0]);\n                }\n                else {\n                    this.coefficients = new Int32Array(coefficientsLength - firstNonZero);\n                    System.arraycopy(coefficients, firstNonZero, this.coefficients, 0, this.coefficients.length);\n                }\n            }\n            else {\n                this.coefficients = coefficients;\n            }\n        }\n        getCoefficients() {\n            return this.coefficients;\n        }\n        /**\n         * @return degree of this polynomial\n         */\n        getDegree() {\n            return this.coefficients.length - 1;\n        }\n        /**\n         * @return true iff this polynomial is the monomial \"0\"\n         */\n        isZero() {\n            return this.coefficients[0] === 0;\n        }\n        /**\n         * @return coefficient of x^degree term in this polynomial\n         */\n        getCoefficient(degree) {\n            return this.coefficients[this.coefficients.length - 1 - degree];\n        }\n        /**\n         * @return evaluation of this polynomial at a given point\n         */\n        evaluateAt(a) {\n            if (a === 0) {\n                // Just return the x^0 coefficient\n                return this.getCoefficient(0);\n            }\n            if (a === 1) {\n                // Just the sum of the coefficients\n                let sum = /*int*/ 0;\n                for (let coefficient /*int*/ of this.coefficients) {\n                    sum = this.field.add(sum, coefficient);\n                }\n                return sum;\n            }\n            let result = /*int*/ this.coefficients[0];\n            let size = /*int*/ this.coefficients.length;\n            for (let i /*int*/ = 1; i < size; i++) {\n                result = this.field.add(this.field.multiply(a, result), this.coefficients[i]);\n            }\n            return result;\n        }\n        add(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n            }\n            if (this.isZero()) {\n                return other;\n            }\n            if (other.isZero()) {\n                return this;\n            }\n            let smallerCoefficients = this.coefficients;\n            let largerCoefficients = other.coefficients;\n            if (smallerCoefficients.length > largerCoefficients.length) {\n                let temp = smallerCoefficients;\n                smallerCoefficients = largerCoefficients;\n                largerCoefficients = temp;\n            }\n            let sumDiff = new Int32Array(largerCoefficients.length);\n            let lengthDiff = /*int*/ largerCoefficients.length - smallerCoefficients.length;\n            // Copy high-order terms only found in higher-degree polynomial's coefficients\n            System.arraycopy(largerCoefficients, 0, sumDiff, 0, lengthDiff);\n            for (let i /*int*/ = lengthDiff; i < largerCoefficients.length; i++) {\n                sumDiff[i] = this.field.add(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);\n            }\n            return new ModulusPoly(this.field, sumDiff);\n        }\n        subtract(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n            }\n            if (other.isZero()) {\n                return this;\n            }\n            return this.add(other.negative());\n        }\n        multiply(other) {\n            if (other instanceof ModulusPoly) {\n                return this.multiplyOther(other);\n            }\n            return this.multiplyScalar(other);\n        }\n        multiplyOther(other) {\n            if (!this.field.equals(other.field)) {\n                throw new IllegalArgumentException('ModulusPolys do not have same ModulusGF field');\n            }\n            if (this.isZero() || other.isZero()) {\n                // return this.field.getZero();\n                return new ModulusPoly(this.field, new Int32Array([0]));\n            }\n            let aCoefficients = this.coefficients;\n            let aLength = /*int*/ aCoefficients.length;\n            let bCoefficients = other.coefficients;\n            let bLength = /*int*/ bCoefficients.length;\n            let product = new Int32Array(aLength + bLength - 1);\n            for (let i /*int*/ = 0; i < aLength; i++) {\n                let aCoeff = /*int*/ aCoefficients[i];\n                for (let j /*int*/ = 0; j < bLength; j++) {\n                    product[i + j] = this.field.add(product[i + j], this.field.multiply(aCoeff, bCoefficients[j]));\n                }\n            }\n            return new ModulusPoly(this.field, product);\n        }\n        negative() {\n            let size = /*int*/ this.coefficients.length;\n            let negativeCoefficients = new Int32Array(size);\n            for (let i /*int*/ = 0; i < size; i++) {\n                negativeCoefficients[i] = this.field.subtract(0, this.coefficients[i]);\n            }\n            return new ModulusPoly(this.field, negativeCoefficients);\n        }\n        multiplyScalar(scalar) {\n            if (scalar === 0) {\n                return new ModulusPoly(this.field, new Int32Array([0]));\n            }\n            if (scalar === 1) {\n                return this;\n            }\n            let size = /*int*/ this.coefficients.length;\n            let product = new Int32Array(size);\n            for (let i /*int*/ = 0; i < size; i++) {\n                product[i] = this.field.multiply(this.coefficients[i], scalar);\n            }\n            return new ModulusPoly(this.field, product);\n        }\n        multiplyByMonomial(degree, coefficient) {\n            if (degree < 0) {\n                throw new IllegalArgumentException();\n            }\n            if (coefficient === 0) {\n                return new ModulusPoly(this.field, new Int32Array([0]));\n            }\n            let size = /*int*/ this.coefficients.length;\n            let product = new Int32Array(size + degree);\n            for (let i /*int*/ = 0; i < size; i++) {\n                product[i] = this.field.multiply(this.coefficients[i], coefficient);\n            }\n            return new ModulusPoly(this.field, product);\n        }\n        /*\n        ModulusPoly[] divide(other: ModulusPoly) {\n          if (!field.equals(other.field)) {\n            throw new IllegalArgumentException(\"ModulusPolys do not have same ModulusGF field\");\n          }\n          if (other.isZero()) {\n            throw new IllegalArgumentException(\"Divide by 0\");\n          }\n      \n          let quotient: ModulusPoly = field.getZero();\n          let remainder: ModulusPoly = this;\n      \n          let denominatorLeadingTerm: /*int/ number = other.getCoefficient(other.getDegree());\n          let inverseDenominatorLeadingTerm: /*int/ number = field.inverse(denominatorLeadingTerm);\n      \n          while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {\n            let degreeDifference: /*int/ number = remainder.getDegree() - other.getDegree();\n            let scale: /*int/ number = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);\n            let term: ModulusPoly = other.multiplyByMonomial(degreeDifference, scale);\n            let iterationQuotient: ModulusPoly = field.buildMonomial(degreeDifference, scale);\n            quotient = quotient.add(iterationQuotient);\n            remainder = remainder.subtract(term);\n          }\n      \n          return new ModulusPoly[] { quotient, remainder };\n        }\n        */\n        // @Override\n        toString() {\n            let result = new StringBuilder( /*8 * this.getDegree()*/); // dynamic string size in JS\n            for (let degree /*int*/ = this.getDegree(); degree >= 0; degree--) {\n                let coefficient = /*int*/ this.getCoefficient(degree);\n                if (coefficient !== 0) {\n                    if (coefficient < 0) {\n                        result.append(' - ');\n                        coefficient = -coefficient;\n                    }\n                    else {\n                        if (result.length() > 0) {\n                            result.append(' + ');\n                        }\n                    }\n                    if (degree === 0 || coefficient !== 1) {\n                        result.append(coefficient);\n                    }\n                    if (degree !== 0) {\n                        if (degree === 1) {\n                            result.append('x');\n                        }\n                        else {\n                            result.append('x^');\n                            result.append(degree);\n                        }\n                    }\n                }\n            }\n            return result.toString();\n        }\n    }\n\n    class ModulusBase {\n        add(a, b) {\n            return (a + b) % this.modulus;\n        }\n        subtract(a, b) {\n            return (this.modulus + a - b) % this.modulus;\n        }\n        exp(a) {\n            return this.expTable[a];\n        }\n        log(a) {\n            if (a === 0) {\n                throw new IllegalArgumentException();\n            }\n            return this.logTable[a];\n        }\n        inverse(a) {\n            if (a === 0) {\n                throw new ArithmeticException();\n            }\n            return this.expTable[this.modulus - this.logTable[a] - 1];\n        }\n        multiply(a, b) {\n            if (a === 0 || b === 0) {\n                return 0;\n            }\n            return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.modulus - 1)];\n        }\n        getSize() {\n            return this.modulus;\n        }\n        equals(o) {\n            return o === this;\n        }\n    }\n\n    /*\n     * Copyright 2012 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * <p>A field based on powers of a generator integer, modulo some modulus.</p>\n     *\n     * @author Sean Owen\n     * @see com.google.zxing.common.reedsolomon.GenericGF\n     */\n    /*public final*/ class ModulusGF extends ModulusBase {\n        // private /*final*/ modulus: /*int*/ number;\n        constructor(modulus, generator) {\n            super();\n            this.modulus = modulus;\n            this.expTable = new Int32Array(modulus);\n            this.logTable = new Int32Array(modulus);\n            let x = /*int*/ 1;\n            for (let i /*int*/ = 0; i < modulus; i++) {\n                this.expTable[i] = x;\n                x = (x * generator) % modulus;\n            }\n            for (let i /*int*/ = 0; i < modulus - 1; i++) {\n                this.logTable[this.expTable[i]] = i;\n            }\n            // logTable[0] == 0 but this should never be used\n            this.zero = new ModulusPoly(this, new Int32Array([0]));\n            this.one = new ModulusPoly(this, new Int32Array([1]));\n        }\n        getZero() {\n            return this.zero;\n        }\n        getOne() {\n            return this.one;\n        }\n        buildMonomial(degree, coefficient) {\n            if (degree < 0) {\n                throw new IllegalArgumentException();\n            }\n            if (coefficient === 0) {\n                return this.zero;\n            }\n            let coefficients = new Int32Array(degree + 1);\n            coefficients[0] = coefficient;\n            return new ModulusPoly(this, coefficients);\n        }\n    }\n    ModulusGF.PDF417_GF = new ModulusGF(PDF417Common.NUMBER_OF_CODEWORDS, 3);\n\n    /*\n    * Copyright 2012 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * <p>PDF417 error correction implementation.</p>\n     *\n     * <p>This <a href=\"http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction#Example\">example</a>\n     * is quite useful in understanding the algorithm.</p>\n     *\n     * @author Sean Owen\n     * @see com.google.zxing.common.reedsolomon.ReedSolomonDecoder\n     */\n    /*public final*/ class ErrorCorrection {\n        constructor() {\n            this.field = ModulusGF.PDF417_GF;\n        }\n        /**\n         * @param received received codewords\n         * @param numECCodewords number of those codewords used for EC\n         * @param erasures location of erasures\n         * @return number of errors\n         * @throws ChecksumException if errors cannot be corrected, maybe because of too many errors\n         */\n        decode(received, numECCodewords, erasures) {\n            let poly = new ModulusPoly(this.field, received);\n            let S = new Int32Array(numECCodewords);\n            let error = false;\n            for (let i /*int*/ = numECCodewords; i > 0; i--) {\n                let evaluation = poly.evaluateAt(this.field.exp(i));\n                S[numECCodewords - i] = evaluation;\n                if (evaluation !== 0) {\n                    error = true;\n                }\n            }\n            if (!error) {\n                return 0;\n            }\n            let knownErrors = this.field.getOne();\n            if (erasures != null) {\n                for (const erasure of erasures) {\n                    let b = this.field.exp(received.length - 1 - erasure);\n                    // Add (1 - bx) term:\n                    let term = new ModulusPoly(this.field, new Int32Array([this.field.subtract(0, b), 1]));\n                    knownErrors = knownErrors.multiply(term);\n                }\n            }\n            let syndrome = new ModulusPoly(this.field, S);\n            // syndrome = syndrome.multiply(knownErrors);\n            let sigmaOmega = this.runEuclideanAlgorithm(this.field.buildMonomial(numECCodewords, 1), syndrome, numECCodewords);\n            let sigma = sigmaOmega[0];\n            let omega = sigmaOmega[1];\n            // sigma = sigma.multiply(knownErrors);\n            let errorLocations = this.findErrorLocations(sigma);\n            let errorMagnitudes = this.findErrorMagnitudes(omega, sigma, errorLocations);\n            for (let i /*int*/ = 0; i < errorLocations.length; i++) {\n                let position = received.length - 1 - this.field.log(errorLocations[i]);\n                if (position < 0) {\n                    throw ChecksumException.getChecksumInstance();\n                }\n                received[position] = this.field.subtract(received[position], errorMagnitudes[i]);\n            }\n            return errorLocations.length;\n        }\n        /**\n         *\n         * @param ModulusPoly\n         * @param a\n         * @param ModulusPoly\n         * @param b\n         * @param int\n         * @param R\n         * @throws ChecksumException\n         */\n        runEuclideanAlgorithm(a, b, R) {\n            // Assume a's degree is >= b's\n            if (a.getDegree() < b.getDegree()) {\n                let temp = a;\n                a = b;\n                b = temp;\n            }\n            let rLast = a;\n            let r = b;\n            let tLast = this.field.getZero();\n            let t = this.field.getOne();\n            // Run Euclidean algorithm until r's degree is less than R/2\n            while (r.getDegree() >= Math.round(R / 2)) {\n                let rLastLast = rLast;\n                let tLastLast = tLast;\n                rLast = r;\n                tLast = t;\n                // Divide rLastLast by rLast, with quotient in q and remainder in r\n                if (rLast.isZero()) {\n                    // Oops, Euclidean algorithm already terminated?\n                    throw ChecksumException.getChecksumInstance();\n                }\n                r = rLastLast;\n                let q = this.field.getZero();\n                let denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());\n                let dltInverse = this.field.inverse(denominatorLeadingTerm);\n                while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {\n                    let degreeDiff = r.getDegree() - rLast.getDegree();\n                    let scale = this.field.multiply(r.getCoefficient(r.getDegree()), dltInverse);\n                    q = q.add(this.field.buildMonomial(degreeDiff, scale));\n                    r = r.subtract(rLast.multiplyByMonomial(degreeDiff, scale));\n                }\n                t = q.multiply(tLast).subtract(tLastLast).negative();\n            }\n            let sigmaTildeAtZero = t.getCoefficient(0);\n            if (sigmaTildeAtZero === 0) {\n                throw ChecksumException.getChecksumInstance();\n            }\n            let inverse = this.field.inverse(sigmaTildeAtZero);\n            let sigma = t.multiply(inverse);\n            let omega = r.multiply(inverse);\n            return [sigma, omega];\n        }\n        /**\n         *\n         * @param errorLocator\n         * @throws ChecksumException\n         */\n        findErrorLocations(errorLocator) {\n            // This is a direct application of Chien's search\n            let numErrors = errorLocator.getDegree();\n            let result = new Int32Array(numErrors);\n            let e = 0;\n            for (let i /*int*/ = 1; i < this.field.getSize() && e < numErrors; i++) {\n                if (errorLocator.evaluateAt(i) === 0) {\n                    result[e] = this.field.inverse(i);\n                    e++;\n                }\n            }\n            if (e !== numErrors) {\n                throw ChecksumException.getChecksumInstance();\n            }\n            return result;\n        }\n        findErrorMagnitudes(errorEvaluator, errorLocator, errorLocations) {\n            let errorLocatorDegree = errorLocator.getDegree();\n            let formalDerivativeCoefficients = new Int32Array(errorLocatorDegree);\n            for (let i /*int*/ = 1; i <= errorLocatorDegree; i++) {\n                formalDerivativeCoefficients[errorLocatorDegree - i] =\n                    this.field.multiply(i, errorLocator.getCoefficient(i));\n            }\n            let formalDerivative = new ModulusPoly(this.field, formalDerivativeCoefficients);\n            // This is directly applying Forney's Formula\n            let s = errorLocations.length;\n            let result = new Int32Array(s);\n            for (let i /*int*/ = 0; i < s; i++) {\n                let xiInverse = this.field.inverse(errorLocations[i]);\n                let numerator = this.field.subtract(0, errorEvaluator.evaluateAt(xiInverse));\n                let denominator = this.field.inverse(formalDerivative.evaluateAt(xiInverse));\n                result[i] = this.field.multiply(numerator, denominator);\n            }\n            return result;\n        }\n    }\n\n    /*\n    * Copyright 2013 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class BoundingBox {\n        constructor(image, topLeft, bottomLeft, topRight, bottomRight) {\n            if (image instanceof BoundingBox) {\n                this.constructor_2(image);\n            }\n            else {\n                this.constructor_1(image, topLeft, bottomLeft, topRight, bottomRight);\n            }\n        }\n        /**\n         *\n         * @param image\n         * @param topLeft\n         * @param bottomLeft\n         * @param topRight\n         * @param bottomRight\n         *\n         * @throws NotFoundException\n         */\n        constructor_1(image, topLeft, bottomLeft, topRight, bottomRight) {\n            const leftUnspecified = topLeft == null || bottomLeft == null;\n            const rightUnspecified = topRight == null || bottomRight == null;\n            if (leftUnspecified && rightUnspecified) {\n                throw new NotFoundException();\n            }\n            if (leftUnspecified) {\n                topLeft = new ResultPoint(0, topRight.getY());\n                bottomLeft = new ResultPoint(0, bottomRight.getY());\n            }\n            else if (rightUnspecified) {\n                topRight = new ResultPoint(image.getWidth() - 1, topLeft.getY());\n                bottomRight = new ResultPoint(image.getWidth() - 1, bottomLeft.getY());\n            }\n            this.image = image;\n            this.topLeft = topLeft;\n            this.bottomLeft = bottomLeft;\n            this.topRight = topRight;\n            this.bottomRight = bottomRight;\n            this.minX = Math.trunc(Math.min(topLeft.getX(), bottomLeft.getX()));\n            this.maxX = Math.trunc(Math.max(topRight.getX(), bottomRight.getX()));\n            this.minY = Math.trunc(Math.min(topLeft.getY(), topRight.getY()));\n            this.maxY = Math.trunc(Math.max(bottomLeft.getY(), bottomRight.getY()));\n        }\n        constructor_2(boundingBox) {\n            this.image = boundingBox.image;\n            this.topLeft = boundingBox.getTopLeft();\n            this.bottomLeft = boundingBox.getBottomLeft();\n            this.topRight = boundingBox.getTopRight();\n            this.bottomRight = boundingBox.getBottomRight();\n            this.minX = boundingBox.getMinX();\n            this.maxX = boundingBox.getMaxX();\n            this.minY = boundingBox.getMinY();\n            this.maxY = boundingBox.getMaxY();\n        }\n        /**\n         * @throws NotFoundException\n         */\n        static merge(leftBox, rightBox) {\n            if (leftBox == null) {\n                return rightBox;\n            }\n            if (rightBox == null) {\n                return leftBox;\n            }\n            return new BoundingBox(leftBox.image, leftBox.topLeft, leftBox.bottomLeft, rightBox.topRight, rightBox.bottomRight);\n        }\n        /**\n         * @throws NotFoundException\n         */\n        addMissingRows(missingStartRows, missingEndRows, isLeft) {\n            let newTopLeft = this.topLeft;\n            let newBottomLeft = this.bottomLeft;\n            let newTopRight = this.topRight;\n            let newBottomRight = this.bottomRight;\n            if (missingStartRows > 0) {\n                let top = isLeft ? this.topLeft : this.topRight;\n                let newMinY = Math.trunc(top.getY() - missingStartRows);\n                if (newMinY < 0) {\n                    newMinY = 0;\n                }\n                let newTop = new ResultPoint(top.getX(), newMinY);\n                if (isLeft) {\n                    newTopLeft = newTop;\n                }\n                else {\n                    newTopRight = newTop;\n                }\n            }\n            if (missingEndRows > 0) {\n                let bottom = isLeft ? this.bottomLeft : this.bottomRight;\n                let newMaxY = Math.trunc(bottom.getY() + missingEndRows);\n                if (newMaxY >= this.image.getHeight()) {\n                    newMaxY = this.image.getHeight() - 1;\n                }\n                let newBottom = new ResultPoint(bottom.getX(), newMaxY);\n                if (isLeft) {\n                    newBottomLeft = newBottom;\n                }\n                else {\n                    newBottomRight = newBottom;\n                }\n            }\n            return new BoundingBox(this.image, newTopLeft, newBottomLeft, newTopRight, newBottomRight);\n        }\n        getMinX() {\n            return this.minX;\n        }\n        getMaxX() {\n            return this.maxX;\n        }\n        getMinY() {\n            return this.minY;\n        }\n        getMaxY() {\n            return this.maxY;\n        }\n        getTopLeft() {\n            return this.topLeft;\n        }\n        getTopRight() {\n            return this.topRight;\n        }\n        getBottomLeft() {\n            return this.bottomLeft;\n        }\n        getBottomRight() {\n            return this.bottomRight;\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // package com.google.zxing.pdf417.decoder;\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class BarcodeMetadata {\n        constructor(columnCount, rowCountUpperPart, rowCountLowerPart, errorCorrectionLevel) {\n            this.columnCount = columnCount;\n            this.errorCorrectionLevel = errorCorrectionLevel;\n            this.rowCountUpperPart = rowCountUpperPart;\n            this.rowCountLowerPart = rowCountLowerPart;\n            this.rowCount = rowCountUpperPart + rowCountLowerPart;\n        }\n        getColumnCount() {\n            return this.columnCount;\n        }\n        getErrorCorrectionLevel() {\n            return this.errorCorrectionLevel;\n        }\n        getRowCount() {\n            return this.rowCount;\n        }\n        getRowCountUpperPart() {\n            return this.rowCountUpperPart;\n        }\n        getRowCountLowerPart() {\n            return this.rowCountLowerPart;\n        }\n    }\n\n    /**\n     * Java Formatter class polyfill that works in the JS way.\n     */\n    class Formatter {\n        constructor() {\n            this.buffer = '';\n        }\n        /**\n         *\n         * @see https://stackoverflow.com/a/13439711/4367683\n         *\n         * @param str\n         * @param arr\n         */\n        static form(str, arr) {\n            let i = -1;\n            function callback(exp, p0, p1, p2, p3, p4) {\n                if (exp === '%%')\n                    return '%';\n                if (arr[++i] === undefined)\n                    return undefined;\n                exp = p2 ? parseInt(p2.substr(1)) : undefined;\n                let base = p3 ? parseInt(p3.substr(1)) : undefined;\n                let val;\n                switch (p4) {\n                    case 's':\n                        val = arr[i];\n                        break;\n                    case 'c':\n                        val = arr[i][0];\n                        break;\n                    case 'f':\n                        val = parseFloat(arr[i]).toFixed(exp);\n                        break;\n                    case 'p':\n                        val = parseFloat(arr[i]).toPrecision(exp);\n                        break;\n                    case 'e':\n                        val = parseFloat(arr[i]).toExponential(exp);\n                        break;\n                    case 'x':\n                        val = parseInt(arr[i]).toString(base ? base : 16);\n                        break;\n                    case 'd':\n                        val = parseFloat(parseInt(arr[i], base ? base : 10).toPrecision(exp)).toFixed(0);\n                        break;\n                }\n                val = typeof val === 'object' ? JSON.stringify(val) : (+val).toString(base);\n                let size = parseInt(p1); /* padding size */\n                let ch = p1 && (p1[0] + '') === '0' ? '0' : ' '; /* isnull? */\n                while (val.length < size)\n                    val = p0 !== undefined ? val + ch : ch + val; /* isminus? */\n                return val;\n            }\n            let regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;\n            return str.replace(regex, callback);\n        }\n        /**\n         *\n         * @param append The new string to append.\n         * @param args Argumets values to be formated.\n         */\n        format(append, ...args) {\n            this.buffer += Formatter.form(append, args);\n        }\n        /**\n         * Returns the Formatter string value.\n         */\n        toString() {\n            return this.buffer;\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Guenther Grau\n     */\n    class DetectionResultColumn {\n        constructor(boundingBox) {\n            this.boundingBox = new BoundingBox(boundingBox);\n            // this.codewords = new Codeword[boundingBox.getMaxY() - boundingBox.getMinY() + 1];\n            this.codewords = new Array(boundingBox.getMaxY() - boundingBox.getMinY() + 1);\n        }\n        /*final*/ getCodewordNearby(imageRow) {\n            let codeword = this.getCodeword(imageRow);\n            if (codeword != null) {\n                return codeword;\n            }\n            for (let i = 1; i < DetectionResultColumn.MAX_NEARBY_DISTANCE; i++) {\n                let nearImageRow = this.imageRowToCodewordIndex(imageRow) - i;\n                if (nearImageRow >= 0) {\n                    codeword = this.codewords[nearImageRow];\n                    if (codeword != null) {\n                        return codeword;\n                    }\n                }\n                nearImageRow = this.imageRowToCodewordIndex(imageRow) + i;\n                if (nearImageRow < this.codewords.length) {\n                    codeword = this.codewords[nearImageRow];\n                    if (codeword != null) {\n                        return codeword;\n                    }\n                }\n            }\n            return null;\n        }\n        /*final int*/ imageRowToCodewordIndex(imageRow) {\n            return imageRow - this.boundingBox.getMinY();\n        }\n        /*final void*/ setCodeword(imageRow, codeword) {\n            this.codewords[this.imageRowToCodewordIndex(imageRow)] = codeword;\n        }\n        /*final*/ getCodeword(imageRow) {\n            return this.codewords[this.imageRowToCodewordIndex(imageRow)];\n        }\n        /*final*/ getBoundingBox() {\n            return this.boundingBox;\n        }\n        /*final*/ getCodewords() {\n            return this.codewords;\n        }\n        // @Override\n        toString() {\n            const formatter = new Formatter();\n            let row = 0;\n            for (const codeword of this.codewords) {\n                if (codeword == null) {\n                    formatter.format('%3d:    |   %n', row++);\n                    continue;\n                }\n                formatter.format('%3d: %3d|%3d%n', row++, codeword.getRowNumber(), codeword.getValue());\n            }\n            return formatter.toString();\n        }\n    }\n    DetectionResultColumn.MAX_NEARBY_DISTANCE = 5;\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // import java.util.ArrayList;\n    // import java.util.Collection;\n    // import java.util.HashMap;\n    // import java.util.Map;\n    // import java.util.Map.Entry;\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class BarcodeValue {\n        constructor() {\n            this.values = new Map();\n        }\n        /**\n         * Add an occurrence of a value\n         */\n        setValue(value) {\n            value = Math.trunc(value);\n            let confidence = this.values.get(value);\n            if (confidence == null) {\n                confidence = 0;\n            }\n            confidence++;\n            this.values.set(value, confidence);\n        }\n        /**\n         * Determines the maximum occurrence of a set value and returns all values which were set with this occurrence.\n         * @return an array of int, containing the values with the highest occurrence, or null, if no value was set\n         */\n        getValue() {\n            let maxConfidence = -1;\n            let result = new Array();\n            for (const [key, value] of this.values.entries()) {\n                const entry = {\n                    getKey: () => key,\n                    getValue: () => value,\n                };\n                if (entry.getValue() > maxConfidence) {\n                    maxConfidence = entry.getValue();\n                    result = [];\n                    result.push(entry.getKey());\n                }\n                else if (entry.getValue() === maxConfidence) {\n                    result.push(entry.getKey());\n                }\n            }\n            return PDF417Common.toIntArray(result);\n        }\n        getConfidence(value) {\n            return this.values.get(value);\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class DetectionResultRowIndicatorColumn extends DetectionResultColumn {\n        constructor(boundingBox, isLeft) {\n            super(boundingBox);\n            this._isLeft = isLeft;\n        }\n        setRowNumbers() {\n            for (let codeword /*Codeword*/ of this.getCodewords()) {\n                if (codeword != null) {\n                    codeword.setRowNumberAsRowIndicatorColumn();\n                }\n            }\n        }\n        // TODO implement properly\n        // TODO maybe we should add missing codewords to store the correct row number to make\n        // finding row numbers for other columns easier\n        // use row height count to make detection of invalid row numbers more reliable\n        adjustCompleteIndicatorColumnRowNumbers(barcodeMetadata) {\n            let codewords = this.getCodewords();\n            this.setRowNumbers();\n            this.removeIncorrectCodewords(codewords, barcodeMetadata);\n            let boundingBox = this.getBoundingBox();\n            let top = this._isLeft ? boundingBox.getTopLeft() : boundingBox.getTopRight();\n            let bottom = this._isLeft ? boundingBox.getBottomLeft() : boundingBox.getBottomRight();\n            let firstRow = this.imageRowToCodewordIndex(Math.trunc(top.getY()));\n            let lastRow = this.imageRowToCodewordIndex(Math.trunc(bottom.getY()));\n            // We need to be careful using the average row height. Barcode could be skewed so that we have smaller and\n            // taller rows\n            // float averageRowHeight = (lastRow - firstRow) / /*(float)*/ barcodeMetadata.getRowCount();\n            let barcodeRow = -1;\n            let maxRowHeight = 1;\n            let currentRowHeight = 0;\n            for (let codewordsRow /*int*/ = firstRow; codewordsRow < lastRow; codewordsRow++) {\n                if (codewords[codewordsRow] == null) {\n                    continue;\n                }\n                let codeword = codewords[codewordsRow];\n                //      float expectedRowNumber = (codewordsRow - firstRow) / averageRowHeight;\n                //      if (Math.abs(codeword.getRowNumber() - expectedRowNumber) > 2) {\n                //        SimpleLog.log(LEVEL.WARNING,\n                //            \"Removing codeword, rowNumberSkew too high, codeword[\" + codewordsRow + \"]: Expected Row: \" +\n                //                expectedRowNumber + \", RealRow: \" + codeword.getRowNumber() + \", value: \" + codeword.getValue());\n                //        codewords[codewordsRow] = null;\n                //      }\n                let rowDifference = codeword.getRowNumber() - barcodeRow;\n                // TODO improve handling with case where first row indicator doesn't start with 0\n                if (rowDifference === 0) {\n                    currentRowHeight++;\n                }\n                else if (rowDifference === 1) {\n                    maxRowHeight = Math.max(maxRowHeight, currentRowHeight);\n                    currentRowHeight = 1;\n                    barcodeRow = codeword.getRowNumber();\n                }\n                else if (rowDifference < 0 ||\n                    codeword.getRowNumber() >= barcodeMetadata.getRowCount() ||\n                    rowDifference > codewordsRow) {\n                    codewords[codewordsRow] = null;\n                }\n                else {\n                    let checkedRows;\n                    if (maxRowHeight > 2) {\n                        checkedRows = (maxRowHeight - 2) * rowDifference;\n                    }\n                    else {\n                        checkedRows = rowDifference;\n                    }\n                    let closePreviousCodewordFound = checkedRows >= codewordsRow;\n                    for (let i /*int*/ = 1; i <= checkedRows && !closePreviousCodewordFound; i++) {\n                        // there must be (height * rowDifference) number of codewords missing. For now we assume height = 1.\n                        // This should hopefully get rid of most problems already.\n                        closePreviousCodewordFound = codewords[codewordsRow - i] != null;\n                    }\n                    if (closePreviousCodewordFound) {\n                        codewords[codewordsRow] = null;\n                    }\n                    else {\n                        barcodeRow = codeword.getRowNumber();\n                        currentRowHeight = 1;\n                    }\n                }\n            }\n            // return (int) (averageRowHeight + 0.5);\n        }\n        getRowHeights() {\n            let barcodeMetadata = this.getBarcodeMetadata();\n            if (barcodeMetadata == null) {\n                return null;\n            }\n            this.adjustIncompleteIndicatorColumnRowNumbers(barcodeMetadata);\n            let result = new Int32Array(barcodeMetadata.getRowCount());\n            for (let codeword /*Codeword*/ of this.getCodewords()) {\n                if (codeword != null) {\n                    let rowNumber = codeword.getRowNumber();\n                    if (rowNumber >= result.length) {\n                        // We have more rows than the barcode metadata allows for, ignore them.\n                        continue;\n                    }\n                    result[rowNumber]++;\n                } // else throw exception?\n            }\n            return result;\n        }\n        // TODO maybe we should add missing codewords to store the correct row number to make\n        // finding row numbers for other columns easier\n        // use row height count to make detection of invalid row numbers more reliable\n        adjustIncompleteIndicatorColumnRowNumbers(barcodeMetadata) {\n            let boundingBox = this.getBoundingBox();\n            let top = this._isLeft ? boundingBox.getTopLeft() : boundingBox.getTopRight();\n            let bottom = this._isLeft ? boundingBox.getBottomLeft() : boundingBox.getBottomRight();\n            let firstRow = this.imageRowToCodewordIndex(Math.trunc(top.getY()));\n            let lastRow = this.imageRowToCodewordIndex(Math.trunc(bottom.getY()));\n            // float averageRowHeight = (lastRow - firstRow) / /*(float)*/ barcodeMetadata.getRowCount();\n            let codewords = this.getCodewords();\n            let barcodeRow = -1;\n            for (let codewordsRow /*int*/ = firstRow; codewordsRow < lastRow; codewordsRow++) {\n                if (codewords[codewordsRow] == null) {\n                    continue;\n                }\n                let codeword = codewords[codewordsRow];\n                codeword.setRowNumberAsRowIndicatorColumn();\n                let rowDifference = codeword.getRowNumber() - barcodeRow;\n                // TODO improve handling with case where first row indicator doesn't start with 0\n                if (rowDifference === 0) ;\n                else if (rowDifference === 1) {\n                    barcodeRow = codeword.getRowNumber();\n                }\n                else if (codeword.getRowNumber() >= barcodeMetadata.getRowCount()) {\n                    codewords[codewordsRow] = null;\n                }\n                else {\n                    barcodeRow = codeword.getRowNumber();\n                }\n            }\n            // return (int) (averageRowHeight + 0.5);\n        }\n        getBarcodeMetadata() {\n            let codewords = this.getCodewords();\n            let barcodeColumnCount = new BarcodeValue();\n            let barcodeRowCountUpperPart = new BarcodeValue();\n            let barcodeRowCountLowerPart = new BarcodeValue();\n            let barcodeECLevel = new BarcodeValue();\n            for (let codeword /*Codeword*/ of codewords) {\n                if (codeword == null) {\n                    continue;\n                }\n                codeword.setRowNumberAsRowIndicatorColumn();\n                let rowIndicatorValue = codeword.getValue() % 30;\n                let codewordRowNumber = codeword.getRowNumber();\n                if (!this._isLeft) {\n                    codewordRowNumber += 2;\n                }\n                switch (codewordRowNumber % 3) {\n                    case 0:\n                        barcodeRowCountUpperPart.setValue(rowIndicatorValue * 3 + 1);\n                        break;\n                    case 1:\n                        barcodeECLevel.setValue(rowIndicatorValue / 3);\n                        barcodeRowCountLowerPart.setValue(rowIndicatorValue % 3);\n                        break;\n                    case 2:\n                        barcodeColumnCount.setValue(rowIndicatorValue + 1);\n                        break;\n                }\n            }\n            // Maybe we should check if we have ambiguous values?\n            if ((barcodeColumnCount.getValue().length === 0) ||\n                (barcodeRowCountUpperPart.getValue().length === 0) ||\n                (barcodeRowCountLowerPart.getValue().length === 0) ||\n                (barcodeECLevel.getValue().length === 0) ||\n                barcodeColumnCount.getValue()[0] < 1 ||\n                barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] < PDF417Common.MIN_ROWS_IN_BARCODE ||\n                barcodeRowCountUpperPart.getValue()[0] + barcodeRowCountLowerPart.getValue()[0] > PDF417Common.MAX_ROWS_IN_BARCODE) {\n                return null;\n            }\n            let barcodeMetadata = new BarcodeMetadata(barcodeColumnCount.getValue()[0], barcodeRowCountUpperPart.getValue()[0], barcodeRowCountLowerPart.getValue()[0], barcodeECLevel.getValue()[0]);\n            this.removeIncorrectCodewords(codewords, barcodeMetadata);\n            return barcodeMetadata;\n        }\n        removeIncorrectCodewords(codewords, barcodeMetadata) {\n            // Remove codewords which do not match the metadata\n            // TODO Maybe we should keep the incorrect codewords for the start and end positions?\n            for (let codewordRow /*int*/ = 0; codewordRow < codewords.length; codewordRow++) {\n                let codeword = codewords[codewordRow];\n                if (codewords[codewordRow] == null) {\n                    continue;\n                }\n                let rowIndicatorValue = codeword.getValue() % 30;\n                let codewordRowNumber = codeword.getRowNumber();\n                if (codewordRowNumber > barcodeMetadata.getRowCount()) {\n                    codewords[codewordRow] = null;\n                    continue;\n                }\n                if (!this._isLeft) {\n                    codewordRowNumber += 2;\n                }\n                switch (codewordRowNumber % 3) {\n                    case 0:\n                        if (rowIndicatorValue * 3 + 1 !== barcodeMetadata.getRowCountUpperPart()) {\n                            codewords[codewordRow] = null;\n                        }\n                        break;\n                    case 1:\n                        if (Math.trunc(rowIndicatorValue / 3) !== barcodeMetadata.getErrorCorrectionLevel() ||\n                            rowIndicatorValue % 3 !== barcodeMetadata.getRowCountLowerPart()) {\n                            codewords[codewordRow] = null;\n                        }\n                        break;\n                    case 2:\n                        if (rowIndicatorValue + 1 !== barcodeMetadata.getColumnCount()) {\n                            codewords[codewordRow] = null;\n                        }\n                        break;\n                }\n            }\n        }\n        isLeft() {\n            return this._isLeft;\n        }\n        // @Override\n        toString() {\n            return 'IsLeft: ' + this._isLeft + '\\n' + super.toString();\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class DetectionResult {\n        constructor(barcodeMetadata, boundingBox) {\n            /*final*/ this.ADJUST_ROW_NUMBER_SKIP = 2;\n            this.barcodeMetadata = barcodeMetadata;\n            this.barcodeColumnCount = barcodeMetadata.getColumnCount();\n            this.boundingBox = boundingBox;\n            // this.detectionResultColumns = new DetectionResultColumn[this.barcodeColumnCount + 2];\n            this.detectionResultColumns = new Array(this.barcodeColumnCount + 2);\n        }\n        getDetectionResultColumns() {\n            this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]);\n            this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount + 1]);\n            let unadjustedCodewordCount = PDF417Common.MAX_CODEWORDS_IN_BARCODE;\n            let previousUnadjustedCount;\n            do {\n                previousUnadjustedCount = unadjustedCodewordCount;\n                unadjustedCodewordCount = this.adjustRowNumbersAndGetCount();\n            } while (unadjustedCodewordCount > 0 && unadjustedCodewordCount < previousUnadjustedCount);\n            return this.detectionResultColumns;\n        }\n        adjustIndicatorColumnRowNumbers(detectionResultColumn) {\n            if (detectionResultColumn != null) {\n                detectionResultColumn\n                    .adjustCompleteIndicatorColumnRowNumbers(this.barcodeMetadata);\n            }\n        }\n        // TODO ensure that no detected codewords with unknown row number are left\n        // we should be able to estimate the row height and use it as a hint for the row number\n        // we should also fill the rows top to bottom and bottom to top\n        /**\n         * @return number of codewords which don't have a valid row number. Note that the count is not accurate as codewords\n         * will be counted several times. It just serves as an indicator to see when we can stop adjusting row numbers\n         */\n        adjustRowNumbersAndGetCount() {\n            let unadjustedCount = this.adjustRowNumbersByRow();\n            if (unadjustedCount === 0) {\n                return 0;\n            }\n            for (let barcodeColumn /*int*/ = 1; barcodeColumn < this.barcodeColumnCount + 1; barcodeColumn++) {\n                let codewords = this.detectionResultColumns[barcodeColumn].getCodewords();\n                for (let codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n                    if (codewords[codewordsRow] == null) {\n                        continue;\n                    }\n                    if (!codewords[codewordsRow].hasValidRowNumber()) {\n                        this.adjustRowNumbers(barcodeColumn, codewordsRow, codewords);\n                    }\n                }\n            }\n            return unadjustedCount;\n        }\n        adjustRowNumbersByRow() {\n            this.adjustRowNumbersFromBothRI();\n            // TODO we should only do full row adjustments if row numbers of left and right row indicator column match.\n            // Maybe it's even better to calculated the height (rows: d) and divide it by the number of barcode\n            // rows. This, together with the LRI and RRI row numbers should allow us to get a good estimate where a row\n            // number starts and ends.\n            let unadjustedCount = this.adjustRowNumbersFromLRI();\n            return unadjustedCount + this.adjustRowNumbersFromRRI();\n        }\n        adjustRowNumbersFromBothRI() {\n            if (this.detectionResultColumns[0] == null || this.detectionResultColumns[this.barcodeColumnCount + 1] == null) {\n                return;\n            }\n            let LRIcodewords = this.detectionResultColumns[0].getCodewords();\n            let RRIcodewords = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\n            for (let codewordsRow /*int*/ = 0; codewordsRow < LRIcodewords.length; codewordsRow++) {\n                if (LRIcodewords[codewordsRow] != null &&\n                    RRIcodewords[codewordsRow] != null &&\n                    LRIcodewords[codewordsRow].getRowNumber() === RRIcodewords[codewordsRow].getRowNumber()) {\n                    for (let barcodeColumn /*int*/ = 1; barcodeColumn <= this.barcodeColumnCount; barcodeColumn++) {\n                        let codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n                        if (codeword == null) {\n                            continue;\n                        }\n                        codeword.setRowNumber(LRIcodewords[codewordsRow].getRowNumber());\n                        if (!codeword.hasValidRowNumber()) {\n                            this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow] = null;\n                        }\n                    }\n                }\n            }\n        }\n        adjustRowNumbersFromRRI() {\n            if (this.detectionResultColumns[this.barcodeColumnCount + 1] == null) {\n                return 0;\n            }\n            let unadjustedCount = 0;\n            let codewords = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\n            for (let codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n                if (codewords[codewordsRow] == null) {\n                    continue;\n                }\n                let rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();\n                let invalidRowCounts = 0;\n                for (let barcodeColumn /*int*/ = this.barcodeColumnCount + 1; barcodeColumn > 0 && invalidRowCounts < this.ADJUST_ROW_NUMBER_SKIP; barcodeColumn--) {\n                    let codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n                    if (codeword != null) {\n                        invalidRowCounts = DetectionResult.adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword);\n                        if (!codeword.hasValidRowNumber()) {\n                            unadjustedCount++;\n                        }\n                    }\n                }\n            }\n            return unadjustedCount;\n        }\n        adjustRowNumbersFromLRI() {\n            if (this.detectionResultColumns[0] == null) {\n                return 0;\n            }\n            let unadjustedCount = 0;\n            let codewords = this.detectionResultColumns[0].getCodewords();\n            for (let codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n                if (codewords[codewordsRow] == null) {\n                    continue;\n                }\n                let rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();\n                let invalidRowCounts = 0;\n                for (let barcodeColumn /*int*/ = 1; barcodeColumn < this.barcodeColumnCount + 1 && invalidRowCounts < this.ADJUST_ROW_NUMBER_SKIP; barcodeColumn++) {\n                    let codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n                    if (codeword != null) {\n                        invalidRowCounts = DetectionResult.adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword);\n                        if (!codeword.hasValidRowNumber()) {\n                            unadjustedCount++;\n                        }\n                    }\n                }\n            }\n            return unadjustedCount;\n        }\n        static adjustRowNumberIfValid(rowIndicatorRowNumber, invalidRowCounts, codeword) {\n            if (codeword == null) {\n                return invalidRowCounts;\n            }\n            if (!codeword.hasValidRowNumber()) {\n                if (codeword.isValidRowNumber(rowIndicatorRowNumber)) {\n                    codeword.setRowNumber(rowIndicatorRowNumber);\n                    invalidRowCounts = 0;\n                }\n                else {\n                    ++invalidRowCounts;\n                }\n            }\n            return invalidRowCounts;\n        }\n        adjustRowNumbers(barcodeColumn, codewordsRow, codewords) {\n            if (!this.detectionResultColumns[barcodeColumn - 1]) {\n                return;\n            }\n            let codeword = codewords[codewordsRow];\n            let previousColumnCodewords = this.detectionResultColumns[barcodeColumn - 1].getCodewords();\n            let nextColumnCodewords = previousColumnCodewords;\n            if (this.detectionResultColumns[barcodeColumn + 1] != null) {\n                nextColumnCodewords = this.detectionResultColumns[barcodeColumn + 1].getCodewords();\n            }\n            // let otherCodewords: Codeword[] = new Codeword[14];\n            let otherCodewords = new Array(14);\n            otherCodewords[2] = previousColumnCodewords[codewordsRow];\n            otherCodewords[3] = nextColumnCodewords[codewordsRow];\n            if (codewordsRow > 0) {\n                otherCodewords[0] = codewords[codewordsRow - 1];\n                otherCodewords[4] = previousColumnCodewords[codewordsRow - 1];\n                otherCodewords[5] = nextColumnCodewords[codewordsRow - 1];\n            }\n            if (codewordsRow > 1) {\n                otherCodewords[8] = codewords[codewordsRow - 2];\n                otherCodewords[10] = previousColumnCodewords[codewordsRow - 2];\n                otherCodewords[11] = nextColumnCodewords[codewordsRow - 2];\n            }\n            if (codewordsRow < codewords.length - 1) {\n                otherCodewords[1] = codewords[codewordsRow + 1];\n                otherCodewords[6] = previousColumnCodewords[codewordsRow + 1];\n                otherCodewords[7] = nextColumnCodewords[codewordsRow + 1];\n            }\n            if (codewordsRow < codewords.length - 2) {\n                otherCodewords[9] = codewords[codewordsRow + 2];\n                otherCodewords[12] = previousColumnCodewords[codewordsRow + 2];\n                otherCodewords[13] = nextColumnCodewords[codewordsRow + 2];\n            }\n            for (let otherCodeword of otherCodewords) {\n                if (DetectionResult.adjustRowNumber(codeword, otherCodeword)) {\n                    return;\n                }\n            }\n        }\n        /**\n         * @return true, if row number was adjusted, false otherwise\n         */\n        static adjustRowNumber(codeword, otherCodeword) {\n            if (otherCodeword == null) {\n                return false;\n            }\n            if (otherCodeword.hasValidRowNumber() && otherCodeword.getBucket() === codeword.getBucket()) {\n                codeword.setRowNumber(otherCodeword.getRowNumber());\n                return true;\n            }\n            return false;\n        }\n        getBarcodeColumnCount() {\n            return this.barcodeColumnCount;\n        }\n        getBarcodeRowCount() {\n            return this.barcodeMetadata.getRowCount();\n        }\n        getBarcodeECLevel() {\n            return this.barcodeMetadata.getErrorCorrectionLevel();\n        }\n        setBoundingBox(boundingBox) {\n            this.boundingBox = boundingBox;\n        }\n        getBoundingBox() {\n            return this.boundingBox;\n        }\n        setDetectionResultColumn(barcodeColumn, detectionResultColumn) {\n            this.detectionResultColumns[barcodeColumn] = detectionResultColumn;\n        }\n        getDetectionResultColumn(barcodeColumn) {\n            return this.detectionResultColumns[barcodeColumn];\n        }\n        // @Override\n        toString() {\n            let rowIndicatorColumn = this.detectionResultColumns[0];\n            if (rowIndicatorColumn == null) {\n                rowIndicatorColumn = this.detectionResultColumns[this.barcodeColumnCount + 1];\n            }\n            // try (\n            let formatter = new Formatter();\n            // ) {\n            for (let codewordsRow /*int*/ = 0; codewordsRow < rowIndicatorColumn.getCodewords().length; codewordsRow++) {\n                formatter.format('CW %3d:', codewordsRow);\n                for (let barcodeColumn /*int*/ = 0; barcodeColumn < this.barcodeColumnCount + 2; barcodeColumn++) {\n                    if (this.detectionResultColumns[barcodeColumn] == null) {\n                        formatter.format('    |   ');\n                        continue;\n                    }\n                    let codeword = this.detectionResultColumns[barcodeColumn].getCodewords()[codewordsRow];\n                    if (codeword == null) {\n                        formatter.format('    |   ');\n                        continue;\n                    }\n                    formatter.format(' %3d|%3d', codeword.getRowNumber(), codeword.getValue());\n                }\n                formatter.format('%n');\n            }\n            return formatter.toString();\n            // }\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // package com.google.zxing.pdf417.decoder;\n    /**\n     * @author Guenther Grau\n     */\n    /*final*/ class Codeword {\n        constructor(startX, endX, bucket, value) {\n            this.rowNumber = Codeword.BARCODE_ROW_UNKNOWN;\n            this.startX = Math.trunc(startX);\n            this.endX = Math.trunc(endX);\n            this.bucket = Math.trunc(bucket);\n            this.value = Math.trunc(value);\n        }\n        hasValidRowNumber() {\n            return this.isValidRowNumber(this.rowNumber);\n        }\n        isValidRowNumber(rowNumber) {\n            return rowNumber !== Codeword.BARCODE_ROW_UNKNOWN && this.bucket === (rowNumber % 3) * 3;\n        }\n        setRowNumberAsRowIndicatorColumn() {\n            this.rowNumber = Math.trunc((Math.trunc(this.value / 30)) * 3 + Math.trunc(this.bucket / 3));\n        }\n        getWidth() {\n            return this.endX - this.startX;\n        }\n        getStartX() {\n            return this.startX;\n        }\n        getEndX() {\n            return this.endX;\n        }\n        getBucket() {\n            return this.bucket;\n        }\n        getValue() {\n            return this.value;\n        }\n        getRowNumber() {\n            return this.rowNumber;\n        }\n        setRowNumber(rowNumber) {\n            this.rowNumber = rowNumber;\n        }\n        //   @Override\n        toString() {\n            return this.rowNumber + '|' + this.value;\n        }\n    }\n    Codeword.BARCODE_ROW_UNKNOWN = -1;\n\n    /*\n    * Copyright 2013 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * @author Guenther Grau\n     * @author creatale GmbH (christoph.schulz@creatale.de)\n     */\n    /*final*/ class PDF417CodewordDecoder {\n        /* @note\n         * this action have to be performed before first use of class\n         * - static constructor\n         * working with 32bit float (based from Java logic)\n        */\n        static initialize() {\n            // Pre-computes the symbol ratio table.\n            for ( /*int*/let i = 0; i < PDF417Common.SYMBOL_TABLE.length; i++) {\n                let currentSymbol = PDF417Common.SYMBOL_TABLE[i];\n                let currentBit = currentSymbol & 0x1;\n                for ( /*int*/let j = 0; j < PDF417Common.BARS_IN_MODULE; j++) {\n                    let size = 0.0;\n                    while ((currentSymbol & 0x1) === currentBit) {\n                        size += 1.0;\n                        currentSymbol >>= 1;\n                    }\n                    currentBit = currentSymbol & 0x1;\n                    if (!PDF417CodewordDecoder.RATIOS_TABLE[i]) {\n                        PDF417CodewordDecoder.RATIOS_TABLE[i] = new Array(PDF417Common.BARS_IN_MODULE);\n                    }\n                    PDF417CodewordDecoder.RATIOS_TABLE[i][PDF417Common.BARS_IN_MODULE - j - 1] = Math.fround(size / PDF417Common.MODULES_IN_CODEWORD);\n                }\n            }\n            this.bSymbolTableReady = true;\n        }\n        static getDecodedValue(moduleBitCount) {\n            let decodedValue = PDF417CodewordDecoder.getDecodedCodewordValue(PDF417CodewordDecoder.sampleBitCounts(moduleBitCount));\n            if (decodedValue !== -1) {\n                return decodedValue;\n            }\n            return PDF417CodewordDecoder.getClosestDecodedValue(moduleBitCount);\n        }\n        static sampleBitCounts(moduleBitCount) {\n            let bitCountSum = MathUtils.sum(moduleBitCount);\n            let result = new Int32Array(PDF417Common.BARS_IN_MODULE);\n            let bitCountIndex = 0;\n            let sumPreviousBits = 0;\n            for ( /*int*/let i = 0; i < PDF417Common.MODULES_IN_CODEWORD; i++) {\n                let sampleIndex = bitCountSum / (2 * PDF417Common.MODULES_IN_CODEWORD) +\n                    (i * bitCountSum) / PDF417Common.MODULES_IN_CODEWORD;\n                if (sumPreviousBits + moduleBitCount[bitCountIndex] <= sampleIndex) {\n                    sumPreviousBits += moduleBitCount[bitCountIndex];\n                    bitCountIndex++;\n                }\n                result[bitCountIndex]++;\n            }\n            return result;\n        }\n        static getDecodedCodewordValue(moduleBitCount) {\n            let decodedValue = PDF417CodewordDecoder.getBitValue(moduleBitCount);\n            return PDF417Common.getCodeword(decodedValue) === -1 ? -1 : decodedValue;\n        }\n        static getBitValue(moduleBitCount) {\n            let result = /*long*/ 0;\n            for (let /*int*/ i = 0; i < moduleBitCount.length; i++) {\n                for ( /*int*/let bit = 0; bit < moduleBitCount[i]; bit++) {\n                    result = (result << 1) | (i % 2 === 0 ? 1 : 0);\n                }\n            }\n            return Math.trunc(result);\n        }\n        // working with 32bit float (as in Java)\n        static getClosestDecodedValue(moduleBitCount) {\n            let bitCountSum = MathUtils.sum(moduleBitCount);\n            let bitCountRatios = new Array(PDF417Common.BARS_IN_MODULE);\n            if (bitCountSum > 1) {\n                for (let /*int*/ i = 0; i < bitCountRatios.length; i++) {\n                    bitCountRatios[i] = Math.fround(moduleBitCount[i] / bitCountSum);\n                }\n            }\n            let bestMatchError = Float.MAX_VALUE;\n            let bestMatch = -1;\n            if (!this.bSymbolTableReady) {\n                PDF417CodewordDecoder.initialize();\n            }\n            for ( /*int*/let j = 0; j < PDF417CodewordDecoder.RATIOS_TABLE.length; j++) {\n                let error = 0.0;\n                let ratioTableRow = PDF417CodewordDecoder.RATIOS_TABLE[j];\n                for ( /*int*/let k = 0; k < PDF417Common.BARS_IN_MODULE; k++) {\n                    let diff = Math.fround(ratioTableRow[k] - bitCountRatios[k]);\n                    error += Math.fround(diff * diff);\n                    if (error >= bestMatchError) {\n                        break;\n                    }\n                }\n                if (error < bestMatchError) {\n                    bestMatchError = error;\n                    bestMatch = PDF417Common.SYMBOL_TABLE[j];\n                }\n            }\n            return bestMatch;\n        }\n    }\n    // flag that the table is ready for use\n    PDF417CodewordDecoder.bSymbolTableReady = false;\n    PDF417CodewordDecoder.RATIOS_TABLE = new Array(PDF417Common.SYMBOL_TABLE.length).map(x => x = new Array(PDF417Common.BARS_IN_MODULE));\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // package com.google.zxing.pdf417;\n    /**\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417ResultMetadata {\n        constructor() {\n            this.segmentCount = -1;\n            this.fileSize = -1;\n            this.timestamp = -1;\n            this.checksum = -1;\n        }\n        /**\n         * The Segment ID represents the segment of the whole file distributed over different symbols.\n         *\n         * @return File segment index\n         */\n        getSegmentIndex() {\n            return this.segmentIndex;\n        }\n        setSegmentIndex(segmentIndex) {\n            this.segmentIndex = segmentIndex;\n        }\n        /**\n         * Is the same for each related PDF417 symbol\n         *\n         * @return File ID\n         */\n        getFileId() {\n            return this.fileId;\n        }\n        setFileId(fileId) {\n            this.fileId = fileId;\n        }\n        /**\n         * @return always null\n         * @deprecated use dedicated already parsed fields\n         */\n        //   @Deprecated\n        getOptionalData() {\n            return this.optionalData;\n        }\n        /**\n         * @param optionalData old optional data format as int array\n         * @deprecated parse and use new fields\n         */\n        //   @Deprecated\n        setOptionalData(optionalData) {\n            this.optionalData = optionalData;\n        }\n        /**\n         * @return true if it is the last segment\n         */\n        isLastSegment() {\n            return this.lastSegment;\n        }\n        setLastSegment(lastSegment) {\n            this.lastSegment = lastSegment;\n        }\n        /**\n         * @return count of segments, -1 if not set\n         */\n        getSegmentCount() {\n            return this.segmentCount;\n        }\n        setSegmentCount(segmentCount /*int*/) {\n            this.segmentCount = segmentCount;\n        }\n        getSender() {\n            return this.sender || null;\n        }\n        setSender(sender) {\n            this.sender = sender;\n        }\n        getAddressee() {\n            return this.addressee || null;\n        }\n        setAddressee(addressee) {\n            this.addressee = addressee;\n        }\n        /**\n         * Filename of the encoded file\n         *\n         * @return filename\n         */\n        getFileName() {\n            return this.fileName;\n        }\n        setFileName(fileName) {\n            this.fileName = fileName;\n        }\n        /**\n         * filesize in bytes of the encoded file\n         *\n         * @return filesize in bytes, -1 if not set\n         */\n        getFileSize() {\n            return this.fileSize;\n        }\n        setFileSize(fileSize /*long*/) {\n            this.fileSize = fileSize;\n        }\n        /**\n         * 16-bit CRC checksum using CCITT-16\n         *\n         * @return crc checksum, -1 if not set\n         */\n        getChecksum() {\n            return this.checksum;\n        }\n        setChecksum(checksum /*int*/) {\n            this.checksum = checksum;\n        }\n        /**\n         * unix epock timestamp, elapsed seconds since 1970-01-01\n         *\n         * @return elapsed seconds, -1 if not set\n         */\n        getTimestamp() {\n            return this.timestamp;\n        }\n        setTimestamp(timestamp /*long*/) {\n            this.timestamp = timestamp;\n        }\n    }\n\n    /**\n     * Ponyfill for Java's Long class.\n     */\n    class Long {\n        /**\n         * Parses a string to a number, since JS has no really Int64.\n         *\n         * @param num Numeric string.\n         * @param radix Destination radix.\n         */\n        static parseLong(num, radix = undefined) {\n            return parseInt(num, radix);\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class NullPointerException extends Exception {\n    }\n    NullPointerException.kind = 'NullPointerException';\n\n    /*\n     * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved.\n     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n     *\n     * This code is free software; you can redistribute it and/or modify it\n     * under the terms of the GNU General Public License version 2 only, as\n     * published by the Free Software Foundation.  Oracle designates this\n     * particular file as subject to the \"Classpath\" exception as provided\n     * by Oracle in the LICENSE file that accompanied this code.\n     *\n     * This code is distributed in the hope that it will be useful, but WITHOUT\n     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n     * version 2 for more details (a copy is included in the LICENSE file that\n     * accompanied this code).\n     *\n     * You should have received a copy of the GNU General Public License version\n     * 2 along with this work; if not, write to the Free Software Foundation,\n     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n     *\n     * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA\n     * or visit www.oracle.com if you need additional information or have any\n     * questions.\n     */\n    // package java.io;\n    /**\n     * This abstract class is the superclass of all classes representing\n     * an output stream of bytes. An output stream accepts output bytes\n     * and sends them to some sink.\n     * <p>\n     * Applications that need to define a subclass of\n     * <code>OutputStream</code> must always provide at least a method\n     * that writes one byte of output.\n     *\n     * @author  Arthur van Hoff\n     * @see     java.io.BufferedOutputStream\n     * @see     java.io.ByteArrayOutputStream\n     * @see     java.io.DataOutputStream\n     * @see     java.io.FilterOutputStream\n     * @see     java.io.InputStream\n     * @see     java.io.OutputStream#write(int)\n     * @since   JDK1.0\n     */\n    /*public*/ class OutputStream /*implements Closeable, Flushable*/ {\n        /**\n         * Writes <code>b.length</code> bytes from the specified byte array\n         * to this output stream. The general contract for <code>write(b)</code>\n         * is that it should have exactly the same effect as the call\n         * <code>write(b, 0, b.length)</code>.\n         *\n         * @param      b   the data.\n         * @exception  IOException  if an I/O error occurs.\n         * @see        java.io.OutputStream#write(byte[], int, int)\n         */\n        writeBytes(b) {\n            this.writeBytesOffset(b, 0, b.length);\n        }\n        /**\n         * Writes <code>len</code> bytes from the specified byte array\n         * starting at offset <code>off</code> to this output stream.\n         * The general contract for <code>write(b, off, len)</code> is that\n         * some of the bytes in the array <code>b</code> are written to the\n         * output stream in order; element <code>b[off]</code> is the first\n         * byte written and <code>b[off+len-1]</code> is the last byte written\n         * by this operation.\n         * <p>\n         * The <code>write</code> method of <code>OutputStream</code> calls\n         * the write method of one argument on each of the bytes to be\n         * written out. Subclasses are encouraged to override this method and\n         * provide a more efficient implementation.\n         * <p>\n         * If <code>b</code> is <code>null</code>, a\n         * <code>NullPointerException</code> is thrown.\n         * <p>\n         * If <code>off</code> is negative, or <code>len</code> is negative, or\n         * <code>off+len</code> is greater than the length of the array\n         * <code>b</code>, then an <tt>IndexOutOfBoundsException</tt> is thrown.\n         *\n         * @param      b     the data.\n         * @param      off   the start offset in the data.\n         * @param      len   the number of bytes to write.\n         * @exception  IOException  if an I/O error occurs. In particular,\n         *             an <code>IOException</code> is thrown if the output\n         *             stream is closed.\n         */\n        writeBytesOffset(b, off, len) {\n            if (b == null) {\n                throw new NullPointerException();\n            }\n            else if ((off < 0) || (off > b.length) || (len < 0) ||\n                ((off + len) > b.length) || ((off + len) < 0)) {\n                throw new IndexOutOfBoundsException();\n            }\n            else if (len === 0) {\n                return;\n            }\n            for (let i = 0; i < len; i++) {\n                this.write(b[off + i]);\n            }\n        }\n        /**\n         * Flushes this output stream and forces any buffered output bytes\n         * to be written out. The general contract of <code>flush</code> is\n         * that calling it is an indication that, if any bytes previously\n         * written have been buffered by the implementation of the output\n         * stream, such bytes should immediately be written to their\n         * intended destination.\n         * <p>\n         * If the intended destination of this stream is an abstraction provided by\n         * the underlying operating system, for example a file, then flushing the\n         * stream guarantees only that bytes previously written to the stream are\n         * passed to the operating system for writing; it does not guarantee that\n         * they are actually written to a physical device such as a disk drive.\n         * <p>\n         * The <code>flush</code> method of <code>OutputStream</code> does nothing.\n         *\n         * @exception  IOException  if an I/O error occurs.\n         */\n        flush() {\n        }\n        /**\n         * Closes this output stream and releases any system resources\n         * associated with this stream. The general contract of <code>close</code>\n         * is that it closes the output stream. A closed stream cannot perform\n         * output operations and cannot be reopened.\n         * <p>\n         * The <code>close</code> method of <code>OutputStream</code> does nothing.\n         *\n         * @exception  IOException  if an I/O error occurs.\n         */\n        close() {\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class OutOfMemoryError extends Exception {\n    }\n\n    /*\n     * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.\n     * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.\n     *\n     * This code is free software; you can redistribute it and/or modify it\n     * under the terms of the GNU General Public License version 2 only, as\n     * published by the Free Software Foundation.  Oracle designates this\n     * particular file as subject to the \"Classpath\" exception as provided\n     * by Oracle in the LICENSE file that accompanied this code.\n     *\n     * This code is distributed in the hope that it will be useful, but WITHOUT\n     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n     * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\n     * version 2 for more details (a copy is included in the LICENSE file that\n     * accompanied this code).\n     *\n     * You should have received a copy of the GNU General Public License version\n     * 2 along with this work; if not, write to the Free Software Foundation,\n     * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.\n     *\n     * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA\n     * or visit www.oracle.com if you need additional information or have any\n     * questions.\n     */\n    /**\n     * This class implements an output stream in which the data is\n     * written into a byte array. The buffer automatically grows as data\n     * is written to it.\n     * The data can be retrieved using <code>toByteArray()</code> and\n     * <code>toString()</code>.\n     * <p>\n     * Closing a <tt>ByteArrayOutputStream</tt> has no effect. The methods in\n     * this class can be called after the stream has been closed without\n     * generating an <tt>IOException</tt>.\n     *\n     * @author  Arthur van Hoff\n     * @since   JDK1.0\n     */\n    /*public*/ class ByteArrayOutputStream extends OutputStream {\n        /**\n         * Creates a new byte array output stream. The buffer capacity is\n         * initially 32 bytes, though its size increases if necessary.\n         */\n        // public constructor() {\n        //     this(32);\n        // }\n        /**\n         * Creates a new byte array output stream, with a buffer capacity of\n         * the specified size, in bytes.\n         *\n         * @param   size   the initial size.\n         * @exception  IllegalArgumentException if size is negative.\n         */\n        constructor(size = 32) {\n            super();\n            /**\n             * The number of valid bytes in the buffer.\n             */\n            this.count = 0;\n            if (size < 0) {\n                throw new IllegalArgumentException('Negative initial size: '\n                    + size);\n            }\n            this.buf = new Uint8Array(size);\n        }\n        /**\n         * Increases the capacity if necessary to ensure that it can hold\n         * at least the number of elements specified by the minimum\n         * capacity argument.\n         *\n         * @param minCapacity the desired minimum capacity\n         * @throws OutOfMemoryError if {@code minCapacity < 0}.  This is\n         * interpreted as a request for the unsatisfiably large capacity\n         * {@code (long) Integer.MAX_VALUE + (minCapacity - Integer.MAX_VALUE)}.\n         */\n        ensureCapacity(minCapacity) {\n            // overflow-conscious code\n            if (minCapacity - this.buf.length > 0)\n                this.grow(minCapacity);\n        }\n        /**\n         * Increases the capacity to ensure that it can hold at least the\n         * number of elements specified by the minimum capacity argument.\n         *\n         * @param minCapacity the desired minimum capacity\n         */\n        grow(minCapacity) {\n            // overflow-conscious code\n            let oldCapacity = this.buf.length;\n            let newCapacity = oldCapacity << 1;\n            if (newCapacity - minCapacity < 0)\n                newCapacity = minCapacity;\n            if (newCapacity < 0) {\n                if (minCapacity < 0) // overflow\n                    throw new OutOfMemoryError();\n                newCapacity = Integer.MAX_VALUE;\n            }\n            this.buf = Arrays.copyOfUint8Array(this.buf, newCapacity);\n        }\n        /**\n         * Writes the specified byte to this byte array output stream.\n         *\n         * @param   b   the byte to be written.\n         */\n        write(b) {\n            this.ensureCapacity(this.count + 1);\n            this.buf[this.count] = /*(byte)*/ b;\n            this.count += 1;\n        }\n        /**\n         * Writes <code>len</code> bytes from the specified byte array\n         * starting at offset <code>off</code> to this byte array output stream.\n         *\n         * @param   b     the data.\n         * @param   off   the start offset in the data.\n         * @param   len   the number of bytes to write.\n         */\n        writeBytesOffset(b, off, len) {\n            if ((off < 0) || (off > b.length) || (len < 0) ||\n                ((off + len) - b.length > 0)) {\n                throw new IndexOutOfBoundsException();\n            }\n            this.ensureCapacity(this.count + len);\n            System.arraycopy(b, off, this.buf, this.count, len);\n            this.count += len;\n        }\n        /**\n         * Writes the complete contents of this byte array output stream to\n         * the specified output stream argument, as if by calling the output\n         * stream's write method using <code>out.write(buf, 0, count)</code>.\n         *\n         * @param      out   the output stream to which to write the data.\n         * @exception  IOException  if an I/O error occurs.\n         */\n        writeTo(out) {\n            out.writeBytesOffset(this.buf, 0, this.count);\n        }\n        /**\n         * Resets the <code>count</code> field of this byte array output\n         * stream to zero, so that all currently accumulated output in the\n         * output stream is discarded. The output stream can be used again,\n         * reusing the already allocated buffer space.\n         *\n         * @see     java.io.ByteArrayInputStream#count\n         */\n        reset() {\n            this.count = 0;\n        }\n        /**\n         * Creates a newly allocated byte array. Its size is the current\n         * size of this output stream and the valid contents of the buffer\n         * have been copied into it.\n         *\n         * @return  the current contents of this output stream, as a byte array.\n         * @see     java.io.ByteArrayOutputStream#size()\n         */\n        toByteArray() {\n            return Arrays.copyOfUint8Array(this.buf, this.count);\n        }\n        /**\n         * Returns the current size of the buffer.\n         *\n         * @return  the value of the <code>count</code> field, which is the number\n         *          of valid bytes in this output stream.\n         * @see     java.io.ByteArrayOutputStream#count\n         */\n        size() {\n            return this.count;\n        }\n        toString(param) {\n            if (!param) {\n                return this.toString_void();\n            }\n            if (typeof param === 'string') {\n                return this.toString_string(param);\n            }\n            return this.toString_number(param);\n        }\n        /**\n         * Converts the buffer's contents into a string decoding bytes using the\n         * platform's default character set. The length of the new <tt>String</tt>\n         * is a function of the character set, and hence may not be equal to the\n         * size of the buffer.\n         *\n         * <p> This method always replaces malformed-input and unmappable-character\n         * sequences with the default replacement string for the platform's\n         * default character set. The {@linkplain java.nio.charset.CharsetDecoder}\n         * class should be used when more control over the decoding process is\n         * required.\n         *\n         * @return String decoded from the buffer's contents.\n         * @since  JDK1.1\n         */\n        toString_void() {\n            return new String(this.buf /*, 0, this.count*/).toString();\n        }\n        /**\n         * Converts the buffer's contents into a string by decoding the bytes using\n         * the specified {@link java.nio.charset.Charset charsetName}. The length of\n         * the new <tt>String</tt> is a function of the charset, and hence may not be\n         * equal to the length of the byte array.\n         *\n         * <p> This method always replaces malformed-input and unmappable-character\n         * sequences with this charset's default replacement string. The {@link\n         * java.nio.charset.CharsetDecoder} class should be used when more control\n         * over the decoding process is required.\n         *\n         * @param  charsetName  the name of a supported\n         *              {@linkplain java.nio.charset.Charset </code>charset<code>}\n         * @return String decoded from the buffer's contents.\n         * @exception  UnsupportedEncodingException\n         *             If the named charset is not supported\n         * @since   JDK1.1\n         */\n        toString_string(charsetName) {\n            return new String(this.buf /*, 0, this.count, charsetName*/).toString();\n        }\n        /**\n         * Creates a newly allocated string. Its size is the current size of\n         * the output stream and the valid contents of the buffer have been\n         * copied into it. Each character <i>c</i> in the resulting string is\n         * constructed from the corresponding element <i>b</i> in the byte\n         * array such that:\n         * <blockquote><pre>\n         *     c == (char)(((hibyte &amp; 0xff) &lt;&lt; 8) | (b &amp; 0xff))\n         * </pre></blockquote>\n         *\n         * @deprecated This method does not properly convert bytes into characters.\n         * As of JDK&nbsp;1.1, the preferred way to do this is via the\n         * <code>toString(String enc)</code> method, which takes an encoding-name\n         * argument, or the <code>toString()</code> method, which uses the\n         * platform's default character encoding.\n         *\n         * @param      hibyte    the high byte of each resulting Unicode character.\n         * @return     the current contents of the output stream, as a string.\n         * @see        java.io.ByteArrayOutputStream#size()\n         * @see        java.io.ByteArrayOutputStream#toString(String)\n         * @see        java.io.ByteArrayOutputStream#toString()\n         */\n        // @Deprecated\n        toString_number(hibyte) {\n            return new String(this.buf /*, hibyte, 0, this.count*/).toString();\n        }\n        /**\n         * Closing a <tt>ByteArrayOutputStream</tt> has no effect. The methods in\n         * this class can be called after the stream has been closed without\n         * generating an <tt>IOException</tt>.\n         * <p>\n         *\n         * @throws IOException\n         */\n        close() {\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*private*/ var Mode$2;\n    (function (Mode) {\n        Mode[Mode[\"ALPHA\"] = 0] = \"ALPHA\";\n        Mode[Mode[\"LOWER\"] = 1] = \"LOWER\";\n        Mode[Mode[\"MIXED\"] = 2] = \"MIXED\";\n        Mode[Mode[\"PUNCT\"] = 3] = \"PUNCT\";\n        Mode[Mode[\"ALPHA_SHIFT\"] = 4] = \"ALPHA_SHIFT\";\n        Mode[Mode[\"PUNCT_SHIFT\"] = 5] = \"PUNCT_SHIFT\";\n    })(Mode$2 || (Mode$2 = {}));\n    /**\n     * Indirectly access the global BigInt constructor, it\n     * allows browsers that doesn't support BigInt to run\n     * the library without breaking due to \"undefined BigInt\"\n     * errors.\n     */\n    function getBigIntConstructor() {\n        if (typeof window !== 'undefined') {\n            return window['BigInt'] || null;\n        }\n        if (typeof global !== 'undefined') {\n            return global['BigInt'] || null;\n        }\n        if (typeof self !== 'undefined') {\n            return self['BigInt'] || null;\n        }\n        throw new Error('Can\\'t search globals for BigInt!');\n    }\n    /**\n     * Used to store the BigInt constructor.\n     */\n    let BigInteger;\n    /**\n     * This function creates a bigint value. It allows browsers\n     * that doesn't support BigInt to run the rest of the library\n     * by not directly accessing the BigInt constructor.\n     */\n    function createBigInt(num) {\n        if (typeof BigInteger === 'undefined') {\n            BigInteger = getBigIntConstructor();\n        }\n        if (BigInteger === null) {\n            throw new Error('BigInt is not supported!');\n        }\n        return BigInteger(num);\n    }\n    function getEXP900() {\n        // in Java - array with length = 16\n        let EXP900 = [];\n        EXP900[0] = createBigInt(1);\n        let nineHundred = createBigInt(900);\n        EXP900[1] = nineHundred;\n        // in Java - array with length = 16\n        for (let i /*int*/ = 2; i < 16; i++) {\n            EXP900[i] = EXP900[i - 1] * nineHundred;\n        }\n        return EXP900;\n    }\n    /**\n     * <p>This class contains the methods for decoding the PDF417 codewords.</p>\n     *\n     * @author SITA Lab (kevin.osullivan@sita.aero)\n     * @author Guenther Grau\n     */\n    /*final*/ class DecodedBitStreamParser$2 {\n        //   private DecodedBitStreamParser() {\n        // }\n        /**\n         *\n         * @param codewords\n         * @param ecLevel\n         *\n         * @throws FormatException\n         */\n        static decode(codewords, ecLevel) {\n            // pass encoding to result (will be used for decode symbols in byte mode)\n            let result = new StringBuilder('');\n            // let encoding: Charset = StandardCharsets.ISO_8859_1;\n            let encoding = CharacterSetECI.ISO8859_1;\n            /**\n             * @note the next command is specific from this TypeScript library\n             * because TS can't properly cast some values to char and\n             * convert it to string later correctly due to encoding\n             * differences from Java version. As reported here:\n             * https://github.com/zxing-js/library/pull/264/files#r382831593\n             */\n            result.enableDecoding(encoding);\n            // Get compaction mode\n            let codeIndex = 1;\n            let code = codewords[codeIndex++];\n            let resultMetadata = new PDF417ResultMetadata();\n            while (codeIndex < codewords[0]) {\n                switch (code) {\n                    case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                        codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex, result);\n                        break;\n                    case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                    case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                        codeIndex = DecodedBitStreamParser$2.byteCompaction(code, codewords, encoding, codeIndex, result);\n                        break;\n                    case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                        result.append(/*(char)*/ codewords[codeIndex++]);\n                        break;\n                    case DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH:\n                        codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex, result);\n                        break;\n                    case DecodedBitStreamParser$2.ECI_CHARSET:\n                        let charsetECI = CharacterSetECI.getCharacterSetECIByValue(codewords[codeIndex++]);\n                        // encoding = Charset.forName(charsetECI.getName());\n                        break;\n                    case DecodedBitStreamParser$2.ECI_GENERAL_PURPOSE:\n                        // Can't do anything with generic ECI; skip its 2 characters\n                        codeIndex += 2;\n                        break;\n                    case DecodedBitStreamParser$2.ECI_USER_DEFINED:\n                        // Can't do anything with user ECI; skip its 1 character\n                        codeIndex++;\n                        break;\n                    case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                        codeIndex = DecodedBitStreamParser$2.decodeMacroBlock(codewords, codeIndex, resultMetadata);\n                        break;\n                    case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                    case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                        // Should not see these outside a macro block\n                        throw new FormatException();\n                    default:\n                        // Default to text compaction. During testing numerous barcodes\n                        // appeared to be missing the starting mode. In these cases defaulting\n                        // to text compaction seems to work.\n                        codeIndex--;\n                        codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex, result);\n                        break;\n                }\n                if (codeIndex < codewords.length) {\n                    code = codewords[codeIndex++];\n                }\n                else {\n                    throw FormatException.getFormatInstance();\n                }\n            }\n            if (result.length() === 0) {\n                throw FormatException.getFormatInstance();\n            }\n            let decoderResult = new DecoderResult(null, result.toString(), null, ecLevel);\n            decoderResult.setOther(resultMetadata);\n            return decoderResult;\n        }\n        /**\n         *\n         * @param int\n         * @param param1\n         * @param codewords\n         * @param int\n         * @param codeIndex\n         * @param PDF417ResultMetadata\n         * @param resultMetadata\n         *\n         * @throws FormatException\n         */\n        // @SuppressWarnings(\"deprecation\")\n        static decodeMacroBlock(codewords, codeIndex, resultMetadata) {\n            if (codeIndex + DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS > codewords[0]) {\n                // we must have at least two bytes left for the segment index\n                throw FormatException.getFormatInstance();\n            }\n            let segmentIndexArray = new Int32Array(DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS);\n            for (let i /*int*/ = 0; i < DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS; i++, codeIndex++) {\n                segmentIndexArray[i] = codewords[codeIndex];\n            }\n            resultMetadata.setSegmentIndex(Integer.parseInt(DecodedBitStreamParser$2.decodeBase900toBase10(segmentIndexArray, DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS)));\n            let fileId = new StringBuilder();\n            codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex, fileId);\n            resultMetadata.setFileId(fileId.toString());\n            let optionalFieldsStart = -1;\n            if (codewords[codeIndex] === DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD) {\n                optionalFieldsStart = codeIndex + 1;\n            }\n            while (codeIndex < codewords[0]) {\n                switch (codewords[codeIndex]) {\n                    case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                        codeIndex++;\n                        switch (codewords[codeIndex]) {\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME:\n                                let fileName = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex + 1, fileName);\n                                resultMetadata.setFileName(fileName.toString());\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_SENDER:\n                                let sender = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex + 1, sender);\n                                resultMetadata.setSender(sender.toString());\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE:\n                                let addressee = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.textCompaction(codewords, codeIndex + 1, addressee);\n                                resultMetadata.setAddressee(addressee.toString());\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT:\n                                let segmentCount = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex + 1, segmentCount);\n                                resultMetadata.setSegmentCount(Integer.parseInt(segmentCount.toString()));\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP:\n                                let timestamp = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex + 1, timestamp);\n                                resultMetadata.setTimestamp(Long.parseLong(timestamp.toString()));\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM:\n                                let checksum = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex + 1, checksum);\n                                resultMetadata.setChecksum(Integer.parseInt(checksum.toString()));\n                                break;\n                            case DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE:\n                                let fileSize = new StringBuilder();\n                                codeIndex = DecodedBitStreamParser$2.numericCompaction(codewords, codeIndex + 1, fileSize);\n                                resultMetadata.setFileSize(Long.parseLong(fileSize.toString()));\n                                break;\n                            default:\n                                throw FormatException.getFormatInstance();\n                        }\n                        break;\n                    case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                        codeIndex++;\n                        resultMetadata.setLastSegment(true);\n                        break;\n                    default:\n                        throw FormatException.getFormatInstance();\n                }\n            }\n            // copy optional fields to additional options\n            if (optionalFieldsStart !== -1) {\n                let optionalFieldsLength = codeIndex - optionalFieldsStart;\n                if (resultMetadata.isLastSegment()) {\n                    // do not include terminator\n                    optionalFieldsLength--;\n                }\n                resultMetadata.setOptionalData(Arrays.copyOfRange(codewords, optionalFieldsStart, optionalFieldsStart + optionalFieldsLength));\n            }\n            return codeIndex;\n        }\n        /**\n         * Text Compaction mode (see 5.4.1.5) permits all printable ASCII characters to be\n         * encoded, i.e. values 32 - 126 inclusive in accordance with ISO/IEC 646 (IRV), as\n         * well as selected control characters.\n         *\n         * @param codewords The array of codewords (data + error)\n         * @param codeIndex The current index into the codeword array.\n         * @param result    The decoded data is appended to the result.\n         * @return The next index into the codeword array.\n         */\n        static textCompaction(codewords, codeIndex, result) {\n            // 2 character per codeword\n            let textCompactionData = new Int32Array((codewords[0] - codeIndex) * 2);\n            // Used to hold the byte compaction value if there is a mode shift\n            let byteCompactionData = new Int32Array((codewords[0] - codeIndex) * 2);\n            let index = 0;\n            let end = false;\n            while ((codeIndex < codewords[0]) && !end) {\n                let code = codewords[codeIndex++];\n                if (code < DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH) {\n                    textCompactionData[index] = code / 30;\n                    textCompactionData[index + 1] = code % 30;\n                    index += 2;\n                }\n                else {\n                    switch (code) {\n                        case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                            // reinitialize text compaction mode to alpha sub mode\n                            textCompactionData[index++] = DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH;\n                            break;\n                        case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                        case DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                        case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                        case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                            codeIndex--;\n                            end = true;\n                            break;\n                        case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                            // The Mode Shift codeword 913 shall cause a temporary\n                            // switch from Text Compaction mode to Byte Compaction mode.\n                            // This switch shall be in effect for only the next codeword,\n                            // after which the mode shall revert to the prevailing sub-mode\n                            // of the Text Compaction mode. Codeword 913 is only available\n                            // in Text Compaction mode; its use is described in 5.4.2.4.\n                            textCompactionData[index] = DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE;\n                            code = codewords[codeIndex++];\n                            byteCompactionData[index] = code;\n                            index++;\n                            break;\n                    }\n                }\n            }\n            DecodedBitStreamParser$2.decodeTextCompaction(textCompactionData, byteCompactionData, index, result);\n            return codeIndex;\n        }\n        /**\n         * The Text Compaction mode includes all the printable ASCII characters\n         * (i.e. values from 32 to 126) and three ASCII control characters: HT or tab\n         * (9: e), LF or line feed (10: e), and CR or carriage\n         * return (13: e). The Text Compaction mode also includes various latch\n         * and shift characters which are used exclusively within the mode. The Text\n         * Compaction mode encodes up to 2 characters per codeword. The compaction rules\n         * for converting data into PDF417 codewords are defined in 5.4.2.2. The sub-mode\n         * switches are defined in 5.4.2.3.\n         *\n         * @param textCompactionData The text compaction data.\n         * @param byteCompactionData The byte compaction data if there\n         *                           was a mode shift.\n         * @param length             The size of the text compaction and byte compaction data.\n         * @param result             The decoded data is appended to the result.\n         */\n        static decodeTextCompaction(textCompactionData, byteCompactionData, length, result) {\n            // Beginning from an initial state of the Alpha sub-mode\n            // The default compaction mode for PDF417 in effect at the start of each symbol shall always be Text\n            // Compaction mode Alpha sub-mode (alphabetic: uppercase). A latch codeword from another mode to the Text\n            // Compaction mode shall always switch to the Text Compaction Alpha sub-mode.\n            let subMode = Mode$2.ALPHA;\n            let priorToShiftMode = Mode$2.ALPHA;\n            let i = 0;\n            while (i < length) {\n                let subModeCh = textCompactionData[i];\n                let ch = /*char*/ '';\n                switch (subMode) {\n                    case Mode$2.ALPHA:\n                        // Alpha (alphabetic: uppercase)\n                        if (subModeCh < 26) {\n                            // Upper case Alpha Character\n                            // Note: 65 = 'A' ASCII -> there is byte code of symbol\n                            ch = /*(char)('A' + subModeCh) */ String.fromCharCode(65 + subModeCh);\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case 26:\n                                    ch = ' ';\n                                    break;\n                                case DecodedBitStreamParser$2.LL:\n                                    subMode = Mode$2.LOWER;\n                                    break;\n                                case DecodedBitStreamParser$2.ML:\n                                    subMode = Mode$2.MIXED;\n                                    break;\n                                case DecodedBitStreamParser$2.PS:\n                                    // Shift to punctuation\n                                    priorToShiftMode = subMode;\n                                    subMode = Mode$2.PUNCT_SHIFT;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.LOWER:\n                        // Lower (alphabetic: lowercase)\n                        if (subModeCh < 26) {\n                            ch = /*(char)('a' + subModeCh)*/ String.fromCharCode(97 + subModeCh);\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case 26:\n                                    ch = ' ';\n                                    break;\n                                case DecodedBitStreamParser$2.AS:\n                                    // Shift to alpha\n                                    priorToShiftMode = subMode;\n                                    subMode = Mode$2.ALPHA_SHIFT;\n                                    break;\n                                case DecodedBitStreamParser$2.ML:\n                                    subMode = Mode$2.MIXED;\n                                    break;\n                                case DecodedBitStreamParser$2.PS:\n                                    // Shift to punctuation\n                                    priorToShiftMode = subMode;\n                                    subMode = Mode$2.PUNCT_SHIFT;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    // TODO Does this need to use the current character encoding? See other occurrences below\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.MIXED:\n                        // Mixed (punctuation: e)\n                        if (subModeCh < DecodedBitStreamParser$2.PL) {\n                            ch = DecodedBitStreamParser$2.MIXED_CHARS[subModeCh];\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case DecodedBitStreamParser$2.PL:\n                                    subMode = Mode$2.PUNCT;\n                                    break;\n                                case 26:\n                                    ch = ' ';\n                                    break;\n                                case DecodedBitStreamParser$2.LL:\n                                    subMode = Mode$2.LOWER;\n                                    break;\n                                case DecodedBitStreamParser$2.AL:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                                case DecodedBitStreamParser$2.PS:\n                                    // Shift to punctuation\n                                    priorToShiftMode = subMode;\n                                    subMode = Mode$2.PUNCT_SHIFT;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.PUNCT:\n                        // Punctuation\n                        if (subModeCh < DecodedBitStreamParser$2.PAL) {\n                            ch = DecodedBitStreamParser$2.PUNCT_CHARS[subModeCh];\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case DecodedBitStreamParser$2.PAL:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.ALPHA_SHIFT:\n                        // Restore sub-mode\n                        subMode = priorToShiftMode;\n                        if (subModeCh < 26) {\n                            ch = /*(char)('A' + subModeCh)*/ String.fromCharCode(65 + subModeCh);\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case 26:\n                                    ch = ' ';\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                    case Mode$2.PUNCT_SHIFT:\n                        // Restore sub-mode\n                        subMode = priorToShiftMode;\n                        if (subModeCh < DecodedBitStreamParser$2.PAL) {\n                            ch = DecodedBitStreamParser$2.PUNCT_CHARS[subModeCh];\n                        }\n                        else {\n                            switch (subModeCh) {\n                                case DecodedBitStreamParser$2.PAL:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                                case DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                    // PS before Shift-to-Byte is used as a padding character,\n                                    // see 5.4.2.4 of the specification\n                                    result.append(/*(char)*/ byteCompactionData[i]);\n                                    break;\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                    subMode = Mode$2.ALPHA;\n                                    break;\n                            }\n                        }\n                        break;\n                }\n                // if (ch !== 0) {\n                if (ch !== '') {\n                    // Append decoded character to result\n                    result.append(ch);\n                }\n                i++;\n            }\n        }\n        /**\n         * Byte Compaction mode (see 5.4.3) permits all 256 possible 8-bit byte values to be encoded.\n         * This includes all ASCII characters value 0 to 127 inclusive and provides for international\n         * character set support.\n         *\n         * @param mode      The byte compaction mode i.e. 901 or 924\n         * @param codewords The array of codewords (data + error)\n         * @param encoding  Currently active character encoding\n         * @param codeIndex The current index into the codeword array.\n         * @param result    The decoded data is appended to the result.\n         * @return The next index into the codeword array.\n         */\n        static /*int*/ byteCompaction(mode, codewords, encoding, codeIndex, result) {\n            let decodedBytes = new ByteArrayOutputStream();\n            let count = 0;\n            let value = /*long*/ 0;\n            let end = false;\n            switch (mode) {\n                case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                    // Total number of Byte Compaction characters to be encoded\n                    // is not a multiple of 6\n                    let byteCompactedCodewords = new Int32Array(6);\n                    let nextCode = codewords[codeIndex++];\n                    while ((codeIndex < codewords[0]) && !end) {\n                        byteCompactedCodewords[count++] = nextCode;\n                        // Base 900\n                        value = 900 * value + nextCode;\n                        nextCode = codewords[codeIndex++];\n                        // perhaps it should be ok to check only nextCode >= TEXT_COMPACTION_MODE_LATCH\n                        switch (nextCode) {\n                            case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                            case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                            case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                            case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                                codeIndex--;\n                                end = true;\n                                break;\n                            default:\n                                if ((count % 5 === 0) && (count > 0)) {\n                                    // Decode every 5 codewords\n                                    // Convert to Base 256\n                                    for (let j /*int*/ = 0; j < 6; ++j) {\n                                        /* @note\n                                         * JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.\n                                         * So the next bitwise operation could not be done with simple numbers\n                                         */\n                                        decodedBytes.write(/*(byte)*/ Number(createBigInt(value) >> createBigInt(8 * (5 - j))));\n                                    }\n                                    value = 0;\n                                    count = 0;\n                                }\n                                break;\n                        }\n                    }\n                    // if the end of all codewords is reached the last codeword needs to be added\n                    if (codeIndex === codewords[0] && nextCode < DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH) {\n                        byteCompactedCodewords[count++] = nextCode;\n                    }\n                    // If Byte Compaction mode is invoked with codeword 901,\n                    // the last group of codewords is interpreted directly\n                    // as one byte per codeword, without compaction.\n                    for (let i /*int*/ = 0; i < count; i++) {\n                        decodedBytes.write(/*(byte)*/ byteCompactedCodewords[i]);\n                    }\n                    break;\n                case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                    // Total number of Byte Compaction characters to be encoded\n                    // is an integer multiple of 6\n                    while (codeIndex < codewords[0] && !end) {\n                        let code = codewords[codeIndex++];\n                        if (code < DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH) {\n                            count++;\n                            // Base 900\n                            value = 900 * value + code;\n                        }\n                        else {\n                            switch (code) {\n                                case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                                case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                                case DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH:\n                                case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                                case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                                case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                                case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                                    codeIndex--;\n                                    end = true;\n                                    break;\n                            }\n                        }\n                        if ((count % 5 === 0) && (count > 0)) {\n                            // Decode every 5 codewords\n                            // Convert to Base 256\n                            /* @note\n                             * JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.\n                             * So the next bitwise operation could not be done with simple numbers\n                            */\n                            for (let j /*int*/ = 0; j < 6; ++j) {\n                                decodedBytes.write(/*(byte)*/ Number(createBigInt(value) >> createBigInt(8 * (5 - j))));\n                            }\n                            value = 0;\n                            count = 0;\n                        }\n                    }\n                    break;\n            }\n            result.append(StringEncoding.decode(decodedBytes.toByteArray(), encoding));\n            return codeIndex;\n        }\n        /**\n         * Numeric Compaction mode (see 5.4.4) permits efficient encoding of numeric data strings.\n         *\n         * @param codewords The array of codewords (data + error)\n         * @param codeIndex The current index into the codeword array.\n         * @param result    The decoded data is appended to the result.\n         * @return The next index into the codeword array.\n         *\n         * @throws FormatException\n         */\n        static numericCompaction(codewords, codeIndex /*int*/, result) {\n            let count = 0;\n            let end = false;\n            let numericCodewords = new Int32Array(DecodedBitStreamParser$2.MAX_NUMERIC_CODEWORDS);\n            while (codeIndex < codewords[0] && !end) {\n                let code = codewords[codeIndex++];\n                if (codeIndex === codewords[0]) {\n                    end = true;\n                }\n                if (code < DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH) {\n                    numericCodewords[count] = code;\n                    count++;\n                }\n                else {\n                    switch (code) {\n                        case DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6:\n                        case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                        case DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                        case DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR:\n                            codeIndex--;\n                            end = true;\n                            break;\n                    }\n                }\n                if ((count % DecodedBitStreamParser$2.MAX_NUMERIC_CODEWORDS === 0 || code === DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH || end) && count > 0) {\n                    // Re-invoking Numeric Compaction mode (by using codeword 902\n                    // while in Numeric Compaction mode) serves  to terminate the\n                    // current Numeric Compaction mode grouping as described in 5.4.4.2,\n                    // and then to start a new one grouping.\n                    result.append(DecodedBitStreamParser$2.decodeBase900toBase10(numericCodewords, count));\n                    count = 0;\n                }\n            }\n            return codeIndex;\n        }\n        /**\n         * Convert a list of Numeric Compacted codewords from Base 900 to Base 10.\n         *\n         * @param codewords The array of codewords\n         * @param count     The number of codewords\n         * @return The decoded string representing the Numeric data.\n         *\n         * EXAMPLE\n         * Encode the fifteen digit numeric string 000213298174000\n         * Prefix the numeric string with a 1 and set the initial value of\n         * t = 1 000 213 298 174 000\n         * Calculate codeword 0\n         * d0 = 1 000 213 298 174 000 mod 900 = 200\n         *\n         * t = 1 000 213 298 174 000 div 900 = 1 111 348 109 082\n         * Calculate codeword 1\n         * d1 = 1 111 348 109 082 mod 900 = 282\n         *\n         * t = 1 111 348 109 082 div 900 = 1 234 831 232\n         * Calculate codeword 2\n         * d2 = 1 234 831 232 mod 900 = 632\n         *\n         * t = 1 234 831 232 div 900 = 1 372 034\n         * Calculate codeword 3\n         * d3 = 1 372 034 mod 900 = 434\n         *\n         * t = 1 372 034 div 900 = 1 524\n         * Calculate codeword 4\n         * d4 = 1 524 mod 900 = 624\n         *\n         * t = 1 524 div 900 = 1\n         * Calculate codeword 5\n         * d5 = 1 mod 900 = 1\n         * t = 1 div 900 = 0\n         * Codeword sequence is: 1, 624, 434, 632, 282, 200\n         *\n         * Decode the above codewords involves\n         *   1 x 900 power of 5 + 624 x 900 power of 4 + 434 x 900 power of 3 +\n         * 632 x 900 power of 2 + 282 x 900 power of 1 + 200 x 900 power of 0 = 1000213298174000\n         *\n         * Remove leading 1 =>  Result is 000213298174000\n         *\n         * @throws FormatException\n         */\n        static decodeBase900toBase10(codewords, count) {\n            let result = createBigInt(0);\n            for (let i /*int*/ = 0; i < count; i++) {\n                result += DecodedBitStreamParser$2.EXP900[count - i - 1] * createBigInt(codewords[i]);\n            }\n            let resultString = result.toString();\n            if (resultString.charAt(0) !== '1') {\n                throw new FormatException();\n            }\n            return resultString.substring(1);\n        }\n    }\n    DecodedBitStreamParser$2.TEXT_COMPACTION_MODE_LATCH = 900;\n    DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH = 901;\n    DecodedBitStreamParser$2.NUMERIC_COMPACTION_MODE_LATCH = 902;\n    DecodedBitStreamParser$2.BYTE_COMPACTION_MODE_LATCH_6 = 924;\n    DecodedBitStreamParser$2.ECI_USER_DEFINED = 925;\n    DecodedBitStreamParser$2.ECI_GENERAL_PURPOSE = 926;\n    DecodedBitStreamParser$2.ECI_CHARSET = 927;\n    DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928;\n    DecodedBitStreamParser$2.BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923;\n    DecodedBitStreamParser$2.MACRO_PDF417_TERMINATOR = 922;\n    DecodedBitStreamParser$2.MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913;\n    DecodedBitStreamParser$2.MAX_NUMERIC_CODEWORDS = 15;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME = 0;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT = 1;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP = 2;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_SENDER = 3;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE = 4;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE = 5;\n    DecodedBitStreamParser$2.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM = 6;\n    DecodedBitStreamParser$2.PL = 25;\n    DecodedBitStreamParser$2.LL = 27;\n    DecodedBitStreamParser$2.AS = 27;\n    DecodedBitStreamParser$2.ML = 28;\n    DecodedBitStreamParser$2.AL = 28;\n    DecodedBitStreamParser$2.PS = 29;\n    DecodedBitStreamParser$2.PAL = 29;\n    DecodedBitStreamParser$2.PUNCT_CHARS = ';<>@[\\\\]_`~!\\r\\t,:\\n-.$/\"|*()?{}\\'';\n    DecodedBitStreamParser$2.MIXED_CHARS = '0123456789&\\r\\t,:#-.$/+%*=^';\n    /**\n     * Table containing values for the exponent of 900.\n     * This is used in the numeric compaction decode algorithm.\n     */\n    DecodedBitStreamParser$2.EXP900 = getBigIntConstructor() ? getEXP900() : [];\n    DecodedBitStreamParser$2.NUMBER_OF_SEQUENCE_CODEWORDS = 2;\n\n    /*\n    * Copyright 2013 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    // import java.util.ArrayList;\n    // import java.util.Collection;\n    // import java.util.Formatter;\n    // import java.util.List;\n    /**\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417ScanningDecoder {\n        constructor() { }\n        /**\n         * @TODO don't pass in minCodewordWidth and maxCodewordWidth, pass in barcode columns for start and stop pattern\n         *\n         * columns. That way width can be deducted from the pattern column.\n         * This approach also allows to detect more details about the barcode, e.g. if a bar type (white or black) is wider\n         * than it should be. This can happen if the scanner used a bad blackpoint.\n         *\n         * @param BitMatrix\n         * @param image\n         * @param ResultPoint\n         * @param imageTopLeft\n         * @param ResultPoint\n         * @param imageBottomLeft\n         * @param ResultPoint\n         * @param imageTopRight\n         * @param ResultPoint\n         * @param imageBottomRight\n         * @param int\n         * @param minCodewordWidth\n         * @param int\n         * @param maxCodewordWidth\n         *\n         * @throws NotFoundException\n         * @throws FormatException\n         * @throws ChecksumException\n         */\n        static decode(image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, minCodewordWidth, maxCodewordWidth) {\n            let boundingBox = new BoundingBox(image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight);\n            let leftRowIndicatorColumn = null;\n            let rightRowIndicatorColumn = null;\n            let detectionResult;\n            for (let firstPass /*boolean*/ = true;; firstPass = false) {\n                if (imageTopLeft != null) {\n                    leftRowIndicatorColumn = PDF417ScanningDecoder.getRowIndicatorColumn(image, boundingBox, imageTopLeft, true, minCodewordWidth, maxCodewordWidth);\n                }\n                if (imageTopRight != null) {\n                    rightRowIndicatorColumn = PDF417ScanningDecoder.getRowIndicatorColumn(image, boundingBox, imageTopRight, false, minCodewordWidth, maxCodewordWidth);\n                }\n                detectionResult = PDF417ScanningDecoder.merge(leftRowIndicatorColumn, rightRowIndicatorColumn);\n                if (detectionResult == null) {\n                    throw NotFoundException.getNotFoundInstance();\n                }\n                let resultBox = detectionResult.getBoundingBox();\n                if (firstPass && resultBox != null &&\n                    (resultBox.getMinY() < boundingBox.getMinY() || resultBox.getMaxY() > boundingBox.getMaxY())) {\n                    boundingBox = resultBox;\n                }\n                else {\n                    break;\n                }\n            }\n            detectionResult.setBoundingBox(boundingBox);\n            let maxBarcodeColumn = detectionResult.getBarcodeColumnCount() + 1;\n            detectionResult.setDetectionResultColumn(0, leftRowIndicatorColumn);\n            detectionResult.setDetectionResultColumn(maxBarcodeColumn, rightRowIndicatorColumn);\n            let leftToRight = leftRowIndicatorColumn != null;\n            for (let barcodeColumnCount /*int*/ = 1; barcodeColumnCount <= maxBarcodeColumn; barcodeColumnCount++) {\n                let barcodeColumn = leftToRight ? barcodeColumnCount : maxBarcodeColumn - barcodeColumnCount;\n                if (detectionResult.getDetectionResultColumn(barcodeColumn) !== /* null */ undefined) {\n                    // This will be the case for the opposite row indicator column, which doesn't need to be decoded again.\n                    continue;\n                }\n                let detectionResultColumn;\n                if (barcodeColumn === 0 || barcodeColumn === maxBarcodeColumn) {\n                    detectionResultColumn = new DetectionResultRowIndicatorColumn(boundingBox, barcodeColumn === 0);\n                }\n                else {\n                    detectionResultColumn = new DetectionResultColumn(boundingBox);\n                }\n                detectionResult.setDetectionResultColumn(barcodeColumn, detectionResultColumn);\n                let startColumn = -1;\n                let previousStartColumn = startColumn;\n                // TODO start at a row for which we know the start position, then detect upwards and downwards from there.\n                for (let imageRow /*int*/ = boundingBox.getMinY(); imageRow <= boundingBox.getMaxY(); imageRow++) {\n                    startColumn = PDF417ScanningDecoder.getStartColumn(detectionResult, barcodeColumn, imageRow, leftToRight);\n                    if (startColumn < 0 || startColumn > boundingBox.getMaxX()) {\n                        if (previousStartColumn === -1) {\n                            continue;\n                        }\n                        startColumn = previousStartColumn;\n                    }\n                    let codeword = PDF417ScanningDecoder.detectCodeword(image, boundingBox.getMinX(), boundingBox.getMaxX(), leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth);\n                    if (codeword != null) {\n                        detectionResultColumn.setCodeword(imageRow, codeword);\n                        previousStartColumn = startColumn;\n                        minCodewordWidth = Math.min(minCodewordWidth, codeword.getWidth());\n                        maxCodewordWidth = Math.max(maxCodewordWidth, codeword.getWidth());\n                    }\n                }\n            }\n            return PDF417ScanningDecoder.createDecoderResult(detectionResult);\n        }\n        /**\n         *\n         * @param leftRowIndicatorColumn\n         * @param rightRowIndicatorColumn\n         *\n         * @throws NotFoundException\n         */\n        static merge(leftRowIndicatorColumn, rightRowIndicatorColumn) {\n            if (leftRowIndicatorColumn == null && rightRowIndicatorColumn == null) {\n                return null;\n            }\n            let barcodeMetadata = PDF417ScanningDecoder.getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn);\n            if (barcodeMetadata == null) {\n                return null;\n            }\n            let boundingBox = BoundingBox.merge(PDF417ScanningDecoder.adjustBoundingBox(leftRowIndicatorColumn), PDF417ScanningDecoder.adjustBoundingBox(rightRowIndicatorColumn));\n            return new DetectionResult(barcodeMetadata, boundingBox);\n        }\n        /**\n         *\n         * @param rowIndicatorColumn\n         *\n         * @throws NotFoundException\n         */\n        static adjustBoundingBox(rowIndicatorColumn) {\n            if (rowIndicatorColumn == null) {\n                return null;\n            }\n            let rowHeights = rowIndicatorColumn.getRowHeights();\n            if (rowHeights == null) {\n                return null;\n            }\n            let maxRowHeight = PDF417ScanningDecoder.getMax(rowHeights);\n            let missingStartRows = 0;\n            for (let rowHeight /*int*/ of rowHeights) {\n                missingStartRows += maxRowHeight - rowHeight;\n                if (rowHeight > 0) {\n                    break;\n                }\n            }\n            let codewords = rowIndicatorColumn.getCodewords();\n            for (let row /*int*/ = 0; missingStartRows > 0 && codewords[row] == null; row++) {\n                missingStartRows--;\n            }\n            let missingEndRows = 0;\n            for (let row /*int*/ = rowHeights.length - 1; row >= 0; row--) {\n                missingEndRows += maxRowHeight - rowHeights[row];\n                if (rowHeights[row] > 0) {\n                    break;\n                }\n            }\n            for (let row /*int*/ = codewords.length - 1; missingEndRows > 0 && codewords[row] == null; row--) {\n                missingEndRows--;\n            }\n            return rowIndicatorColumn.getBoundingBox().addMissingRows(missingStartRows, missingEndRows, rowIndicatorColumn.isLeft());\n        }\n        static getMax(values) {\n            let maxValue = -1;\n            for (let value /*int*/ of values) {\n                maxValue = Math.max(maxValue, value);\n            }\n            return maxValue;\n        }\n        static getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn) {\n            let leftBarcodeMetadata;\n            if (leftRowIndicatorColumn == null ||\n                (leftBarcodeMetadata = leftRowIndicatorColumn.getBarcodeMetadata()) == null) {\n                return rightRowIndicatorColumn == null ? null : rightRowIndicatorColumn.getBarcodeMetadata();\n            }\n            let rightBarcodeMetadata;\n            if (rightRowIndicatorColumn == null ||\n                (rightBarcodeMetadata = rightRowIndicatorColumn.getBarcodeMetadata()) == null) {\n                return leftBarcodeMetadata;\n            }\n            if (leftBarcodeMetadata.getColumnCount() !== rightBarcodeMetadata.getColumnCount() &&\n                leftBarcodeMetadata.getErrorCorrectionLevel() !== rightBarcodeMetadata.getErrorCorrectionLevel() &&\n                leftBarcodeMetadata.getRowCount() !== rightBarcodeMetadata.getRowCount()) {\n                return null;\n            }\n            return leftBarcodeMetadata;\n        }\n        static getRowIndicatorColumn(image, boundingBox, startPoint, leftToRight, minCodewordWidth, maxCodewordWidth) {\n            let rowIndicatorColumn = new DetectionResultRowIndicatorColumn(boundingBox, leftToRight);\n            for (let i /*int*/ = 0; i < 2; i++) {\n                let increment = i === 0 ? 1 : -1;\n                let startColumn = Math.trunc(Math.trunc(startPoint.getX()));\n                for (let imageRow /*int*/ = Math.trunc(Math.trunc(startPoint.getY())); imageRow <= boundingBox.getMaxY() &&\n                    imageRow >= boundingBox.getMinY(); imageRow += increment) {\n                    let codeword = PDF417ScanningDecoder.detectCodeword(image, 0, image.getWidth(), leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth);\n                    if (codeword != null) {\n                        rowIndicatorColumn.setCodeword(imageRow, codeword);\n                        if (leftToRight) {\n                            startColumn = codeword.getStartX();\n                        }\n                        else {\n                            startColumn = codeword.getEndX();\n                        }\n                    }\n                }\n            }\n            return rowIndicatorColumn;\n        }\n        /**\n         *\n         * @param detectionResult\n         * @param BarcodeValue\n         * @param param2\n         * @param param3\n         * @param barcodeMatrix\n         *\n         * @throws NotFoundException\n         */\n        static adjustCodewordCount(detectionResult, barcodeMatrix) {\n            let barcodeMatrix01 = barcodeMatrix[0][1];\n            let numberOfCodewords = barcodeMatrix01.getValue();\n            let calculatedNumberOfCodewords = detectionResult.getBarcodeColumnCount() *\n                detectionResult.getBarcodeRowCount() -\n                PDF417ScanningDecoder.getNumberOfECCodeWords(detectionResult.getBarcodeECLevel());\n            if (numberOfCodewords.length === 0) {\n                if (calculatedNumberOfCodewords < 1 || calculatedNumberOfCodewords > PDF417Common.MAX_CODEWORDS_IN_BARCODE) {\n                    throw NotFoundException.getNotFoundInstance();\n                }\n                barcodeMatrix01.setValue(calculatedNumberOfCodewords);\n            }\n            else if (numberOfCodewords[0] !== calculatedNumberOfCodewords) {\n                // The calculated one is more reliable as it is derived from the row indicator columns\n                barcodeMatrix01.setValue(calculatedNumberOfCodewords);\n            }\n        }\n        /**\n         *\n         * @param detectionResult\n         *\n         * @throws FormatException\n         * @throws ChecksumException\n         * @throws NotFoundException\n         */\n        static createDecoderResult(detectionResult) {\n            let barcodeMatrix = PDF417ScanningDecoder.createBarcodeMatrix(detectionResult);\n            PDF417ScanningDecoder.adjustCodewordCount(detectionResult, barcodeMatrix);\n            let erasures /*Collection<Integer>*/ = new Array();\n            let codewords = new Int32Array(detectionResult.getBarcodeRowCount() * detectionResult.getBarcodeColumnCount());\n            let ambiguousIndexValuesList = /*List<int[]>*/ [];\n            let ambiguousIndexesList = /*Collection<Integer>*/ new Array();\n            for (let row /*int*/ = 0; row < detectionResult.getBarcodeRowCount(); row++) {\n                for (let column /*int*/ = 0; column < detectionResult.getBarcodeColumnCount(); column++) {\n                    let values = barcodeMatrix[row][column + 1].getValue();\n                    let codewordIndex = row * detectionResult.getBarcodeColumnCount() + column;\n                    if (values.length === 0) {\n                        erasures.push(codewordIndex);\n                    }\n                    else if (values.length === 1) {\n                        codewords[codewordIndex] = values[0];\n                    }\n                    else {\n                        ambiguousIndexesList.push(codewordIndex);\n                        ambiguousIndexValuesList.push(values);\n                    }\n                }\n            }\n            let ambiguousIndexValues = new Array(ambiguousIndexValuesList.length);\n            for (let i /*int*/ = 0; i < ambiguousIndexValues.length; i++) {\n                ambiguousIndexValues[i] = ambiguousIndexValuesList[i];\n            }\n            return PDF417ScanningDecoder.createDecoderResultFromAmbiguousValues(detectionResult.getBarcodeECLevel(), codewords, PDF417Common.toIntArray(erasures), PDF417Common.toIntArray(ambiguousIndexesList), ambiguousIndexValues);\n        }\n        /**\n         * This method deals with the fact, that the decoding process doesn't always yield a single most likely value. The\n         * current error correction implementation doesn't deal with erasures very well, so it's better to provide a value\n         * for these ambiguous codewords instead of treating it as an erasure. The problem is that we don't know which of\n         * the ambiguous values to choose. We try decode using the first value, and if that fails, we use another of the\n         * ambiguous values and try to decode again. This usually only happens on very hard to read and decode barcodes,\n         * so decoding the normal barcodes is not affected by this.\n         *\n         * @param erasureArray contains the indexes of erasures\n         * @param ambiguousIndexes array with the indexes that have more than one most likely value\n         * @param ambiguousIndexValues two dimensional array that contains the ambiguous values. The first dimension must\n         * be the same length as the ambiguousIndexes array\n         *\n         * @throws FormatException\n         * @throws ChecksumException\n         */\n        static createDecoderResultFromAmbiguousValues(ecLevel, codewords, erasureArray, ambiguousIndexes, ambiguousIndexValues) {\n            let ambiguousIndexCount = new Int32Array(ambiguousIndexes.length);\n            let tries = 100;\n            while (tries-- > 0) {\n                for (let i /*int*/ = 0; i < ambiguousIndexCount.length; i++) {\n                    codewords[ambiguousIndexes[i]] = ambiguousIndexValues[i][ambiguousIndexCount[i]];\n                }\n                try {\n                    return PDF417ScanningDecoder.decodeCodewords(codewords, ecLevel, erasureArray);\n                }\n                catch (err) {\n                    let ignored = err instanceof ChecksumException;\n                    if (!ignored) {\n                        throw err;\n                    }\n                }\n                if (ambiguousIndexCount.length === 0) {\n                    throw ChecksumException.getChecksumInstance();\n                }\n                for (let i /*int*/ = 0; i < ambiguousIndexCount.length; i++) {\n                    if (ambiguousIndexCount[i] < ambiguousIndexValues[i].length - 1) {\n                        ambiguousIndexCount[i]++;\n                        break;\n                    }\n                    else {\n                        ambiguousIndexCount[i] = 0;\n                        if (i === ambiguousIndexCount.length - 1) {\n                            throw ChecksumException.getChecksumInstance();\n                        }\n                    }\n                }\n            }\n            throw ChecksumException.getChecksumInstance();\n        }\n        static createBarcodeMatrix(detectionResult) {\n            // let barcodeMatrix: BarcodeValue[][] =\n            // new BarcodeValue[detectionResult.getBarcodeRowCount()][detectionResult.getBarcodeColumnCount() + 2];\n            let barcodeMatrix = Array.from({ length: detectionResult.getBarcodeRowCount() }, () => new Array(detectionResult.getBarcodeColumnCount() + 2));\n            for (let row /*int*/ = 0; row < barcodeMatrix.length; row++) {\n                for (let column /*int*/ = 0; column < barcodeMatrix[row].length; column++) {\n                    barcodeMatrix[row][column] = new BarcodeValue();\n                }\n            }\n            let column = 0;\n            for (let detectionResultColumn /*DetectionResultColumn*/ of detectionResult.getDetectionResultColumns()) {\n                if (detectionResultColumn != null) {\n                    for (let codeword /*Codeword*/ of detectionResultColumn.getCodewords()) {\n                        if (codeword != null) {\n                            let rowNumber = codeword.getRowNumber();\n                            if (rowNumber >= 0) {\n                                if (rowNumber >= barcodeMatrix.length) {\n                                    // We have more rows than the barcode metadata allows for, ignore them.\n                                    continue;\n                                }\n                                barcodeMatrix[rowNumber][column].setValue(codeword.getValue());\n                            }\n                        }\n                    }\n                }\n                column++;\n            }\n            return barcodeMatrix;\n        }\n        static isValidBarcodeColumn(detectionResult, barcodeColumn) {\n            return barcodeColumn >= 0 && barcodeColumn <= detectionResult.getBarcodeColumnCount() + 1;\n        }\n        static getStartColumn(detectionResult, barcodeColumn, imageRow, leftToRight) {\n            let offset = leftToRight ? 1 : -1;\n            let codeword = null;\n            if (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n                codeword = detectionResult.getDetectionResultColumn(barcodeColumn - offset).getCodeword(imageRow);\n            }\n            if (codeword != null) {\n                return leftToRight ? codeword.getEndX() : codeword.getStartX();\n            }\n            codeword = detectionResult.getDetectionResultColumn(barcodeColumn).getCodewordNearby(imageRow);\n            if (codeword != null) {\n                return leftToRight ? codeword.getStartX() : codeword.getEndX();\n            }\n            if (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n                codeword = detectionResult.getDetectionResultColumn(barcodeColumn - offset).getCodewordNearby(imageRow);\n            }\n            if (codeword != null) {\n                return leftToRight ? codeword.getEndX() : codeword.getStartX();\n            }\n            let skippedColumns = 0;\n            while (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n                barcodeColumn -= offset;\n                for (let previousRowCodeword /*Codeword*/ of detectionResult.getDetectionResultColumn(barcodeColumn).getCodewords()) {\n                    if (previousRowCodeword != null) {\n                        return (leftToRight ? previousRowCodeword.getEndX() : previousRowCodeword.getStartX()) +\n                            offset *\n                                skippedColumns *\n                                (previousRowCodeword.getEndX() - previousRowCodeword.getStartX());\n                    }\n                }\n                skippedColumns++;\n            }\n            return leftToRight ? detectionResult.getBoundingBox().getMinX() : detectionResult.getBoundingBox().getMaxX();\n        }\n        static detectCodeword(image, minColumn, maxColumn, leftToRight, startColumn, imageRow, minCodewordWidth, maxCodewordWidth) {\n            startColumn = PDF417ScanningDecoder.adjustCodewordStartColumn(image, minColumn, maxColumn, leftToRight, startColumn, imageRow);\n            // we usually know fairly exact now how long a codeword is. We should provide minimum and maximum expected length\n            // and try to adjust the read pixels, e.g. remove single pixel errors or try to cut off exceeding pixels.\n            // min and maxCodewordWidth should not be used as they are calculated for the whole barcode an can be inaccurate\n            // for the current position\n            let moduleBitCount = PDF417ScanningDecoder.getModuleBitCount(image, minColumn, maxColumn, leftToRight, startColumn, imageRow);\n            if (moduleBitCount == null) {\n                return null;\n            }\n            let endColumn;\n            let codewordBitCount = MathUtils.sum(moduleBitCount);\n            if (leftToRight) {\n                endColumn = startColumn + codewordBitCount;\n            }\n            else {\n                for (let i /*int*/ = 0; i < moduleBitCount.length / 2; i++) {\n                    let tmpCount = moduleBitCount[i];\n                    moduleBitCount[i] = moduleBitCount[moduleBitCount.length - 1 - i];\n                    moduleBitCount[moduleBitCount.length - 1 - i] = tmpCount;\n                }\n                endColumn = startColumn;\n                startColumn = endColumn - codewordBitCount;\n            }\n            // TODO implement check for width and correction of black and white bars\n            // use start (and maybe stop pattern) to determine if black bars are wider than white bars. If so, adjust.\n            // should probably done only for codewords with a lot more than 17 bits.\n            // The following fixes 10-1.png, which has wide black bars and small white bars\n            //    for (let i /*int*/ = 0; i < moduleBitCount.length; i++) {\n            //      if (i % 2 === 0) {\n            //        moduleBitCount[i]--;\n            //      } else {\n            //        moduleBitCount[i]++;\n            //      }\n            //    }\n            // We could also use the width of surrounding codewords for more accurate results, but this seems\n            // sufficient for now\n            if (!PDF417ScanningDecoder.checkCodewordSkew(codewordBitCount, minCodewordWidth, maxCodewordWidth)) {\n                // We could try to use the startX and endX position of the codeword in the same column in the previous row,\n                // create the bit count from it and normalize it to 8. This would help with single pixel errors.\n                return null;\n            }\n            let decodedValue = PDF417CodewordDecoder.getDecodedValue(moduleBitCount);\n            let codeword = PDF417Common.getCodeword(decodedValue);\n            if (codeword === -1) {\n                return null;\n            }\n            return new Codeword(startColumn, endColumn, PDF417ScanningDecoder.getCodewordBucketNumber(decodedValue), codeword);\n        }\n        static getModuleBitCount(image, minColumn, maxColumn, leftToRight, startColumn, imageRow) {\n            let imageColumn = startColumn;\n            let moduleBitCount = new Int32Array(8);\n            let moduleNumber = 0;\n            let increment = leftToRight ? 1 : -1;\n            let previousPixelValue = leftToRight;\n            while ((leftToRight ? imageColumn < maxColumn : imageColumn >= minColumn) &&\n                moduleNumber < moduleBitCount.length) {\n                if (image.get(imageColumn, imageRow) === previousPixelValue) {\n                    moduleBitCount[moduleNumber]++;\n                    imageColumn += increment;\n                }\n                else {\n                    moduleNumber++;\n                    previousPixelValue = !previousPixelValue;\n                }\n            }\n            if (moduleNumber === moduleBitCount.length ||\n                ((imageColumn === (leftToRight ? maxColumn : minColumn)) &&\n                    moduleNumber === moduleBitCount.length - 1)) {\n                return moduleBitCount;\n            }\n            return null;\n        }\n        static getNumberOfECCodeWords(barcodeECLevel) {\n            return 2 << barcodeECLevel;\n        }\n        static adjustCodewordStartColumn(image, minColumn, maxColumn, leftToRight, codewordStartColumn, imageRow) {\n            let correctedStartColumn = codewordStartColumn;\n            let increment = leftToRight ? -1 : 1;\n            // there should be no black pixels before the start column. If there are, then we need to start earlier.\n            for (let i /*int*/ = 0; i < 2; i++) {\n                while ((leftToRight ? correctedStartColumn >= minColumn : correctedStartColumn < maxColumn) &&\n                    leftToRight === image.get(correctedStartColumn, imageRow)) {\n                    if (Math.abs(codewordStartColumn - correctedStartColumn) > PDF417ScanningDecoder.CODEWORD_SKEW_SIZE) {\n                        return codewordStartColumn;\n                    }\n                    correctedStartColumn += increment;\n                }\n                increment = -increment;\n                leftToRight = !leftToRight;\n            }\n            return correctedStartColumn;\n        }\n        static checkCodewordSkew(codewordSize, minCodewordWidth, maxCodewordWidth) {\n            return minCodewordWidth - PDF417ScanningDecoder.CODEWORD_SKEW_SIZE <= codewordSize &&\n                codewordSize <= maxCodewordWidth + PDF417ScanningDecoder.CODEWORD_SKEW_SIZE;\n        }\n        /**\n         * @throws FormatException,\n         * @throws ChecksumException\n         */\n        static decodeCodewords(codewords, ecLevel, erasures) {\n            if (codewords.length === 0) {\n                throw FormatException.getFormatInstance();\n            }\n            let numECCodewords = 1 << (ecLevel + 1);\n            let correctedErrorsCount = PDF417ScanningDecoder.correctErrors(codewords, erasures, numECCodewords);\n            PDF417ScanningDecoder.verifyCodewordCount(codewords, numECCodewords);\n            // Decode the codewords\n            let decoderResult = DecodedBitStreamParser$2.decode(codewords, '' + ecLevel);\n            decoderResult.setErrorsCorrected(correctedErrorsCount);\n            decoderResult.setErasures(erasures.length);\n            return decoderResult;\n        }\n        /**\n         * <p>Given data and error-correction codewords received, possibly corrupted by errors, attempts to\n         * correct the errors in-place.</p>\n         *\n         * @param codewords   data and error correction codewords\n         * @param erasures positions of any known erasures\n         * @param numECCodewords number of error correction codewords that are available in codewords\n         * @throws ChecksumException if error correction fails\n         */\n        static correctErrors(codewords, erasures, numECCodewords) {\n            if (erasures != null &&\n                erasures.length > numECCodewords / 2 + PDF417ScanningDecoder.MAX_ERRORS ||\n                numECCodewords < 0 ||\n                numECCodewords > PDF417ScanningDecoder.MAX_EC_CODEWORDS) {\n                // Too many errors or EC Codewords is corrupted\n                throw ChecksumException.getChecksumInstance();\n            }\n            return PDF417ScanningDecoder.errorCorrection.decode(codewords, numECCodewords, erasures);\n        }\n        /**\n         * Verify that all is OK with the codeword array.\n         * @throws FormatException\n         */\n        static verifyCodewordCount(codewords, numECCodewords) {\n            if (codewords.length < 4) {\n                // Codeword array size should be at least 4 allowing for\n                // Count CW, At least one Data CW, Error Correction CW, Error Correction CW\n                throw FormatException.getFormatInstance();\n            }\n            // The first codeword, the Symbol Length Descriptor, shall always encode the total number of data\n            // codewords in the symbol, including the Symbol Length Descriptor itself, data codewords and pad\n            // codewords, but excluding the number of error correction codewords.\n            let numberOfCodewords = codewords[0];\n            if (numberOfCodewords > codewords.length) {\n                throw FormatException.getFormatInstance();\n            }\n            if (numberOfCodewords === 0) {\n                // Reset to the length of the array - 8 (Allow for at least level 3 Error Correction (8 Error Codewords)\n                if (numECCodewords < codewords.length) {\n                    codewords[0] = codewords.length - numECCodewords;\n                }\n                else {\n                    throw FormatException.getFormatInstance();\n                }\n            }\n        }\n        static getBitCountForCodeword(codeword) {\n            let result = new Int32Array(8);\n            let previousValue = 0;\n            let i = result.length - 1;\n            while (true) {\n                if ((codeword & 0x1) !== previousValue) {\n                    previousValue = codeword & 0x1;\n                    i--;\n                    if (i < 0) {\n                        break;\n                    }\n                }\n                result[i]++;\n                codeword >>= 1;\n            }\n            return result;\n        }\n        static getCodewordBucketNumber(codeword) {\n            if (codeword instanceof Int32Array) {\n                return this.getCodewordBucketNumber_Int32Array(codeword);\n            }\n            return this.getCodewordBucketNumber_number(codeword);\n        }\n        static getCodewordBucketNumber_number(codeword) {\n            return PDF417ScanningDecoder.getCodewordBucketNumber(PDF417ScanningDecoder.getBitCountForCodeword(codeword));\n        }\n        static getCodewordBucketNumber_Int32Array(moduleBitCount) {\n            return (moduleBitCount[0] - moduleBitCount[2] + moduleBitCount[4] - moduleBitCount[6] + 9) % 9;\n        }\n        static toString(barcodeMatrix) {\n            let formatter = new Formatter();\n            // try (let formatter = new Formatter()) {\n            for (let row /*int*/ = 0; row < barcodeMatrix.length; row++) {\n                formatter.format('Row %2d: ', row);\n                for (let column /*int*/ = 0; column < barcodeMatrix[row].length; column++) {\n                    let barcodeValue = barcodeMatrix[row][column];\n                    if (barcodeValue.getValue().length === 0) {\n                        formatter.format('        ', null);\n                    }\n                    else {\n                        formatter.format('%4d(%2d)', barcodeValue.getValue()[0], barcodeValue.getConfidence(barcodeValue.getValue()[0]));\n                    }\n                }\n                formatter.format('%n');\n            }\n            return formatter.toString();\n            // }\n        }\n    }\n    /*final*/ PDF417ScanningDecoder.CODEWORD_SKEW_SIZE = 2;\n    /*final*/ PDF417ScanningDecoder.MAX_ERRORS = 3;\n    /*final*/ PDF417ScanningDecoder.MAX_EC_CODEWORDS = 512;\n    /*final*/ PDF417ScanningDecoder.errorCorrection = new ErrorCorrection();\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // import java.util.ArrayList;\n    // import java.util.List;\n    // import java.util.Map;\n    /**\n     * This implementation can detect and decode PDF417 codes in an image.\n     *\n     * @author Guenther Grau\n     */\n    /*public final*/ class PDF417Reader {\n        // private static /*final Result[]*/ EMPTY_RESULT_ARRAY: Result[] = new Result([0]);\n        /**\n         * Locates and decodes a PDF417 code in an image.\n         *\n         * @return a String representing the content encoded by the PDF417 code\n         * @throws NotFoundException if a PDF417 code cannot be found,\n         * @throws FormatException if a PDF417 cannot be decoded\n         * @throws ChecksumException\n         */\n        // @Override\n        decode(image, hints = null) {\n            let result = PDF417Reader.decode(image, hints, false);\n            if (result == null || result.length === 0 || result[0] == null) {\n                throw NotFoundException.getNotFoundInstance();\n            }\n            return result[0];\n        }\n        /**\n         *\n         * @param BinaryBitmap\n         * @param image\n         * @throws NotFoundException\n         */\n        //   @Override\n        decodeMultiple(image, hints = null) {\n            try {\n                return PDF417Reader.decode(image, hints, true);\n            }\n            catch (ignored) {\n                if (ignored instanceof FormatException || ignored instanceof ChecksumException) {\n                    throw NotFoundException.getNotFoundInstance();\n                }\n                throw ignored;\n            }\n        }\n        /**\n         *\n         * @param image\n         * @param hints\n         * @param multiple\n         *\n         * @throws NotFoundException\n         * @throws FormatException\u00DF\n         * @throws ChecksumException\n         */\n        static decode(image, hints, multiple) {\n            const results = new Array();\n            const detectorResult = Detector$3.detectMultiple(image, hints, multiple);\n            for (const points of detectorResult.getPoints()) {\n                const decoderResult = PDF417ScanningDecoder.decode(detectorResult.getBits(), points[4], points[5], points[6], points[7], PDF417Reader.getMinCodewordWidth(points), PDF417Reader.getMaxCodewordWidth(points));\n                const result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat$1.PDF_417);\n                result.putMetadata(ResultMetadataType$1.ERROR_CORRECTION_LEVEL, decoderResult.getECLevel());\n                const pdf417ResultMetadata = decoderResult.getOther();\n                if (pdf417ResultMetadata != null) {\n                    result.putMetadata(ResultMetadataType$1.PDF417_EXTRA_METADATA, pdf417ResultMetadata);\n                }\n                results.push(result);\n            }\n            return results.map(x => x);\n        }\n        static getMaxWidth(p1, p2) {\n            if (p1 == null || p2 == null) {\n                return 0;\n            }\n            return Math.trunc(Math.abs(p1.getX() - p2.getX()));\n        }\n        static getMinWidth(p1, p2) {\n            if (p1 == null || p2 == null) {\n                return Integer.MAX_VALUE;\n            }\n            return Math.trunc(Math.abs(p1.getX() - p2.getX()));\n        }\n        static getMaxCodewordWidth(p) {\n            return Math.floor(Math.max(Math.max(PDF417Reader.getMaxWidth(p[0], p[4]), PDF417Reader.getMaxWidth(p[6], p[2]) * PDF417Common.MODULES_IN_CODEWORD /\n                PDF417Common.MODULES_IN_STOP_PATTERN), Math.max(PDF417Reader.getMaxWidth(p[1], p[5]), PDF417Reader.getMaxWidth(p[7], p[3]) * PDF417Common.MODULES_IN_CODEWORD /\n                PDF417Common.MODULES_IN_STOP_PATTERN)));\n        }\n        static getMinCodewordWidth(p) {\n            return Math.floor(Math.min(Math.min(PDF417Reader.getMinWidth(p[0], p[4]), PDF417Reader.getMinWidth(p[6], p[2]) * PDF417Common.MODULES_IN_CODEWORD /\n                PDF417Common.MODULES_IN_STOP_PATTERN), Math.min(PDF417Reader.getMinWidth(p[1], p[5]), PDF417Reader.getMinWidth(p[7], p[3]) * PDF417Common.MODULES_IN_CODEWORD /\n                PDF417Common.MODULES_IN_STOP_PATTERN)));\n        }\n        // @Override\n        reset() {\n            // nothing needs to be reset\n        }\n    }\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class ReaderException extends Exception {\n    }\n    ReaderException.kind = 'ReaderException';\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * MultiFormatReader is a convenience class and the main entry point into the library for most uses.\n     * By default it attempts to decode all barcode formats that the library supports. Optionally, you\n     * can provide a hints object to request different behavior, for example only decoding QR codes.\n     *\n     * @author Sean Owen\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class MultiFormatReader {\n        /**\n         * Creates an instance of this class\n         * \n         * @param {Boolean} verbose if 'true' logs will be dumped to console, otherwise hidden.\n         * @param hints The hints to use, clearing the previous state.\n         */\n        constructor(verbose, hints) {\n            this.verbose = (verbose === true);\n            if (hints) {\n                this.setHints(hints);\n            }\n        }\n        /**\n         * This version of decode honors the intent of Reader.decode(BinaryBitmap) in that it\n         * passes null as a hint to the decoders. However, that makes it inefficient to call repeatedly.\n         * Use setHints() followed by decodeWithState() for continuous scan applications.\n         *\n         * @param image The pixel data to decode\n         * @return The contents of the image\n         *\n         * @throws NotFoundException Any errors which occurred\n         */\n        /*@Override*/\n        // public decode(image: BinaryBitmap): Result {\n        //   setHints(null)\n        //   return decodeInternal(image)\n        // }\n        /**\n         * Decode an image using the hints provided. Does not honor existing state.\n         *\n         * @param image The pixel data to decode\n         * @param hints The hints to use, clearing the previous state.\n         * @return The contents of the image\n         *\n         * @throws NotFoundException Any errors which occurred\n         */\n        /*@Override*/\n        decode(image, hints) {\n            if (hints) {\n                this.setHints(hints);\n            }\n            return this.decodeInternal(image);\n        }\n        /**\n         * Decode an image using the state set up by calling setHints() previously. Continuous scan\n         * clients will get a <b>large</b> speed increase by using this instead of decode().\n         *\n         * @param image The pixel data to decode\n         * @return The contents of the image\n         *\n         * @throws NotFoundException Any errors which occurred\n         */\n        decodeWithState(image) {\n            // Make sure to set up the default state so we don't crash\n            if (this.readers === null || this.readers === undefined) {\n                this.setHints(null);\n            }\n            return this.decodeInternal(image);\n        }\n        /**\n         * This method adds state to the MultiFormatReader. By setting the hints once, subsequent calls\n         * to decodeWithState(image) can reuse the same set of readers without reallocating memory. This\n         * is important for performance in continuous scan clients.\n         *\n         * @param hints The set of hints to use for subsequent calls to decode(image)\n         */\n        setHints(hints) {\n            this.hints = hints;\n            const tryHarder = !isNullOrUndefined(hints)\n                && hints.get(DecodeHintType$1.TRY_HARDER) === true;\n            const formats = isNullOrUndefined(hints) ? null : hints.get(DecodeHintType$1.POSSIBLE_FORMATS);\n            const readers = new Array();\n            if (!isNullOrUndefined(formats)) {\n                const addOneDReader = formats.some(f => {\n                    return (\n                        f === BarcodeFormat$1.UPC_A ||\n                        f === BarcodeFormat$1.UPC_E ||\n                        f === BarcodeFormat$1.EAN_13 ||\n                        f === BarcodeFormat$1.EAN_8 ||\n                        f === BarcodeFormat$1.CODABAR ||\n                        f === BarcodeFormat$1.CODE_39 ||\n                        f === BarcodeFormat$1.CODE_93 ||\n                        f === BarcodeFormat$1.CODE_128 ||\n                        f === BarcodeFormat$1.ITF ||\n                        f === BarcodeFormat$1.RSS_14 ||\n                        f === BarcodeFormat$1.RSS_EXPANDED);\n                });\n                // Put 1D readers upfront in \"normal\" mode\n                if (addOneDReader && !tryHarder) {\n                    readers.push(new MultiFormatOneDReader(hints, this.verbose));\n                }\n                if (formats.includes(BarcodeFormat$1.QR_CODE)) {\n                    readers.push(new QRCodeReader());\n                }\n                if (formats.includes(BarcodeFormat$1.DATA_MATRIX)) {\n                    readers.push(new DataMatrixReader());\n                }\n                if (formats.includes(BarcodeFormat$1.AZTEC)) {\n                    readers.push(new AztecReader());\n                }\n                if (formats.includes(BarcodeFormat$1.PDF_417)) {\n                    readers.push(new PDF417Reader());\n                }\n                // if (formats.includes(BarcodeFormat.MAXICODE)) {\n                //    readers.push(new MaxiCodeReader())\n                // }\n                // At end in \"try harder\" mode\n                if (addOneDReader && tryHarder) {\n                    readers.push(new MultiFormatOneDReader(hints, this.verbose));\n                }\n            }\n            if (readers.length === 0) {\n                if (!tryHarder) {\n                    readers.push(new MultiFormatOneDReader(hints, this.verbose));\n                }\n                readers.push(new QRCodeReader());\n                readers.push(new DataMatrixReader());\n                readers.push(new AztecReader());\n                readers.push(new PDF417Reader());\n                // readers.push(new MaxiCodeReader())\n                if (tryHarder) {\n                    readers.push(new MultiFormatOneDReader(hints, this.verbose));\n                }\n            }\n            this.readers = readers; // .toArray(new Reader[readers.size()])\n        }\n        /*@Override*/\n        reset() {\n            if (this.readers !== null) {\n                for (const reader of this.readers) {\n                    reader.reset();\n                }\n            }\n        }\n        /**\n         * @throws NotFoundException\n         */\n        decodeInternal(image) {\n            if (this.readers === null) {\n                throw new ReaderException('No readers where selected, nothing can be read.');\n            }\n            for (const reader of this.readers) {\n                // Trying to decode with ${reader} reader.\n                try {\n                    return reader.decode(image, this.hints);\n                }\n                catch (ex) {\n                    if (ex instanceof ReaderException) {\n                        continue;\n                    }\n                    // Bad Exception.\n                }\n            }\n            throw new NotFoundException('No MultiFormat Readers were able to detect the code.');\n        }\n    }\n\n    class BrowserMultiFormatReader extends BrowserCodeReader {\n        constructor(hints = null, timeBetweenScansMillis = 500) {\n            const reader = new MultiFormatReader();\n            reader.setHints(hints);\n            super(reader, timeBetweenScansMillis);\n        }\n        /**\n         * Overwrite decodeBitmap to call decodeWithState, which will pay\n         * attention to the hints set in the constructor function\n         */\n        decodeBitmap(binaryBitmap) {\n            return this.reader.decodeWithState(binaryBitmap);\n        }\n    }\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * QR Code reader to use from browser.\n     */\n    class BrowserPDF417Reader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserPDF417Reader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         */\n        constructor(timeBetweenScansMillis = 500) {\n            super(new PDF417Reader(), timeBetweenScansMillis);\n        }\n    }\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     *\n     * QR Code reader to use from browser.\n     */\n    class BrowserQRCodeReader extends BrowserCodeReader {\n        /**\n         * Creates an instance of BrowserQRCodeReader.\n         * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n         */\n        constructor(timeBetweenScansMillis = 500) {\n            super(new QRCodeReader(), timeBetweenScansMillis);\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /*namespace com.google.zxing {*/\n    /**\n     * These are a set of hints that you may pass to Writers to specify their behavior.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    var EncodeHintType;\n    (function (EncodeHintType) {\n        /**\n         * Specifies what degree of error correction to use, for example in QR Codes.\n         * Type depends on the encoder. For example for QR codes it's type\n         * {@link com.google.zxing.qrcode.decoder.ErrorCorrectionLevel ErrorCorrectionLevel}.\n         * For Aztec it is of type {@link Integer}, representing the minimal percentage of error correction words.\n         * For PDF417 it is of type {@link Integer}, valid values being 0 to 8.\n         * In all cases, it can also be a {@link String} representation of the desired value as well.\n         * Note: an Aztec symbol should have a minimum of 25% EC words.\n         */\n        EncodeHintType[EncodeHintType[\"ERROR_CORRECTION\"] = 0] = \"ERROR_CORRECTION\";\n        /**\n         * Specifies what character encoding to use where applicable (type {@link String})\n         */\n        EncodeHintType[EncodeHintType[\"CHARACTER_SET\"] = 1] = \"CHARACTER_SET\";\n        /**\n         * Specifies the matrix shape for Data Matrix (type {@link com.google.zxing.datamatrix.encoder.SymbolShapeHint})\n         */\n        EncodeHintType[EncodeHintType[\"DATA_MATRIX_SHAPE\"] = 2] = \"DATA_MATRIX_SHAPE\";\n        /**\n         * Specifies a minimum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.\n         *\n         * @deprecated use width/height params in\n         * {@link com.google.zxing.datamatrix.DataMatrixWriter#encode(String, BarcodeFormat, int, int)}\n         */\n        /*@Deprecated*/\n        EncodeHintType[EncodeHintType[\"MIN_SIZE\"] = 3] = \"MIN_SIZE\";\n        /**\n         * Specifies a maximum barcode size (type {@link Dimension}). Only applicable to Data Matrix now.\n         *\n         * @deprecated without replacement\n         */\n        /*@Deprecated*/\n        EncodeHintType[EncodeHintType[\"MAX_SIZE\"] = 4] = \"MAX_SIZE\";\n        /**\n         * Specifies margin, in pixels, to use when generating the barcode. The meaning can vary\n         * by format; for example it controls margin before and after the barcode horizontally for\n         * most 1D formats. (Type {@link Integer}, or {@link String} representation of the integer value).\n         */\n        EncodeHintType[EncodeHintType[\"MARGIN\"] = 5] = \"MARGIN\";\n        /**\n         * Specifies whether to use compact mode for PDF417 (type {@link Boolean}, or \"true\" or \"false\"\n         * {@link String} value).\n         */\n        EncodeHintType[EncodeHintType[\"PDF417_COMPACT\"] = 6] = \"PDF417_COMPACT\";\n        /**\n         * Specifies what compaction mode to use for PDF417 (type\n         * {@link com.google.zxing.pdf417.encoder.Compaction Compaction} or {@link String} value of one of its\n         * enum values).\n         */\n        EncodeHintType[EncodeHintType[\"PDF417_COMPACTION\"] = 7] = \"PDF417_COMPACTION\";\n        /**\n         * Specifies the minimum and maximum number of rows and columns for PDF417 (type\n         * {@link com.google.zxing.pdf417.encoder.Dimensions Dimensions}).\n         */\n        EncodeHintType[EncodeHintType[\"PDF417_DIMENSIONS\"] = 8] = \"PDF417_DIMENSIONS\";\n        /**\n         * Specifies the required number of layers for an Aztec code.\n         * A negative number (-1, -2, -3, -4) specifies a compact Aztec code.\n         * 0 indicates to use the minimum number of layers (the default).\n         * A positive number (1, 2, .. 32) specifies a normal (non-compact) Aztec code.\n         * (Type {@link Integer}, or {@link String} representation of the integer value).\n         */\n        EncodeHintType[EncodeHintType[\"AZTEC_LAYERS\"] = 9] = \"AZTEC_LAYERS\";\n        /**\n         * Specifies the exact version of QR code to be encoded.\n         * (Type {@link Integer}, or {@link String} representation of the integer value).\n         */\n        EncodeHintType[EncodeHintType[\"QR_VERSION\"] = 10] = \"QR_VERSION\";\n    })(EncodeHintType || (EncodeHintType = {}));\n    var EncodeHintType$1 = EncodeHintType;\n\n    /**\n     * <p>Implements Reed-Solomon encoding, as the name implies.</p>\n     *\n     * @author Sean Owen\n     * @author William Rucklidge\n     */\n    class ReedSolomonEncoder {\n        /**\n         * A reed solomon error-correcting encoding constructor is created by\n         * passing as Galois Field with of size equal to the number of code\n         * words (symbols) in the alphabet (the number of values in each\n         * element of arrays that are encoded/decoded).\n         * @param field A galois field with a number of elements equal to the size\n         * of the alphabet of symbols to encode.\n         */\n        constructor(field) {\n            this.field = field;\n            this.cachedGenerators = [];\n            this.cachedGenerators.push(new GenericGFPoly(field, Int32Array.from([1])));\n        }\n        buildGenerator(degree /*int*/) {\n            const cachedGenerators = this.cachedGenerators;\n            if (degree >= cachedGenerators.length) {\n                let lastGenerator = cachedGenerators[cachedGenerators.length - 1];\n                const field = this.field;\n                for (let d = cachedGenerators.length; d <= degree; d++) {\n                    const nextGenerator = lastGenerator.multiply(new GenericGFPoly(field, Int32Array.from([1, field.exp(d - 1 + field.getGeneratorBase())])));\n                    cachedGenerators.push(nextGenerator);\n                    lastGenerator = nextGenerator;\n                }\n            }\n            return cachedGenerators[degree];\n        }\n        /**\n         * <p>Encode a sequence of code words (symbols) using Reed-Solomon to allow decoders\n         * to detect and correct errors that may have been introduced when the resulting\n         * data is stored or transmitted.</p>\n         *\n         * @param toEncode array used for both and output. Caller initializes the array with\n         * the code words (symbols) to be encoded followed by empty elements allocated to make\n         * space for error-correction code words in the encoded output. The array contains\n         * the encdoded output when encode returns. Code words are encoded as numbers from\n         * 0 to n-1, where n is the number of possible code words (symbols), as determined\n         * by the size of the Galois Field passed in the constructor of this object.\n         * @param ecBytes the number of elements reserved in the array (first parameter)\n         * to store error-correction code words. Thus, the number of code words (symbols)\n         * to encode in the first parameter is thus toEncode.length - ecBytes.\n         * Note, the use of \"bytes\" in the name of this parameter is misleading, as there may\n         * be more or fewer than 256 symbols being encoded, as determined by the number of\n         * elements in the Galois Field passed as a constructor to this object.\n         * @throws IllegalArgumentException thrown in response to validation errros.\n         */\n        encode(toEncode, ecBytes /*int*/) {\n            if (ecBytes === 0) {\n                throw new IllegalArgumentException('No error correction bytes');\n            }\n            const dataBytes = toEncode.length - ecBytes;\n            if (dataBytes <= 0) {\n                throw new IllegalArgumentException('No data bytes provided');\n            }\n            const generator = this.buildGenerator(ecBytes);\n            const infoCoefficients = new Int32Array(dataBytes);\n            System.arraycopy(toEncode, 0, infoCoefficients, 0, dataBytes);\n            let info = new GenericGFPoly(this.field, infoCoefficients);\n            info = info.multiplyByMonomial(ecBytes, 1);\n            const remainder = info.divide(generator)[1];\n            const coefficients = remainder.getCoefficients();\n            const numZeroCoefficients = ecBytes - coefficients.length;\n            for (let i = 0; i < numZeroCoefficients; i++) {\n                toEncode[dataBytes + i] = 0;\n            }\n            System.arraycopy(coefficients, 0, toEncode, dataBytes + numZeroCoefficients, coefficients.length);\n        }\n    }\n\n    /**\n     * @author Satoru Takabayashi\n     * @author Daniel Switkin\n     * @author Sean Owen\n     */\n    class MaskUtil {\n        constructor() {\n            // do nothing\n        }\n        /**\n         * Apply mask penalty rule 1 and return the penalty. Find repetitive cells with the same color and\n         * give penalty to them. Example: 00000 or 11111.\n         */\n        static applyMaskPenaltyRule1(matrix) {\n            return MaskUtil.applyMaskPenaltyRule1Internal(matrix, true) + MaskUtil.applyMaskPenaltyRule1Internal(matrix, false);\n        }\n        /**\n         * Apply mask penalty rule 2 and return the penalty. Find 2x2 blocks with the same color and give\n         * penalty to them. This is actually equivalent to the spec's rule, which is to find MxN blocks and give a\n         * penalty proportional to (M-1)x(N-1), because this is the number of 2x2 blocks inside such a block.\n         */\n        static applyMaskPenaltyRule2(matrix) {\n            let penalty = 0;\n            const array = matrix.getArray();\n            const width = matrix.getWidth();\n            const height = matrix.getHeight();\n            for (let y = 0; y < height - 1; y++) {\n                const arrayY = array[y];\n                for (let x = 0; x < width - 1; x++) {\n                    const value = arrayY[x];\n                    if (value === arrayY[x + 1] && value === array[y + 1][x] && value === array[y + 1][x + 1]) {\n                        penalty++;\n                    }\n                }\n            }\n            return MaskUtil.N2 * penalty;\n        }\n        /**\n         * Apply mask penalty rule 3 and return the penalty. Find consecutive runs of 1:1:3:1:1:4\n         * starting with black, or 4:1:1:3:1:1 starting with white, and give penalty to them.  If we\n         * find patterns like 000010111010000, we give penalty once.\n         */\n        static applyMaskPenaltyRule3(matrix) {\n            let numPenalties = 0;\n            const array = matrix.getArray();\n            const width = matrix.getWidth();\n            const height = matrix.getHeight();\n            for (let y = 0; y < height; y++) {\n                for (let x = 0; x < width; x++) {\n                    const arrayY = array[y]; // We can at least optimize this access\n                    if (x + 6 < width &&\n                        arrayY[x] === 1 &&\n                        arrayY[x + 1] === 0 &&\n                        arrayY[x + 2] === 1 &&\n                        arrayY[x + 3] === 1 &&\n                        arrayY[x + 4] === 1 &&\n                        arrayY[x + 5] === 0 &&\n                        arrayY[x + 6] === 1 &&\n                        (MaskUtil.isWhiteHorizontal(arrayY, x - 4, x) || MaskUtil.isWhiteHorizontal(arrayY, x + 7, x + 11))) {\n                        numPenalties++;\n                    }\n                    if (y + 6 < height &&\n                        array[y][x] === 1 &&\n                        array[y + 1][x] === 0 &&\n                        array[y + 2][x] === 1 &&\n                        array[y + 3][x] === 1 &&\n                        array[y + 4][x] === 1 &&\n                        array[y + 5][x] === 0 &&\n                        array[y + 6][x] === 1 &&\n                        (MaskUtil.isWhiteVertical(array, x, y - 4, y) || MaskUtil.isWhiteVertical(array, x, y + 7, y + 11))) {\n                        numPenalties++;\n                    }\n                }\n            }\n            return numPenalties * MaskUtil.N3;\n        }\n        static isWhiteHorizontal(rowArray, from /*int*/, to /*int*/) {\n            from = Math.max(from, 0);\n            to = Math.min(to, rowArray.length);\n            for (let i = from; i < to; i++) {\n                if (rowArray[i] === 1) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        static isWhiteVertical(array, col /*int*/, from /*int*/, to /*int*/) {\n            from = Math.max(from, 0);\n            to = Math.min(to, array.length);\n            for (let i = from; i < to; i++) {\n                if (array[i][col] === 1) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        /**\n         * Apply mask penalty rule 4 and return the penalty. Calculate the ratio of dark cells and give\n         * penalty if the ratio is far from 50%. It gives 10 penalty for 5% distance.\n         */\n        static applyMaskPenaltyRule4(matrix) {\n            let numDarkCells = 0;\n            const array = matrix.getArray();\n            const width = matrix.getWidth();\n            const height = matrix.getHeight();\n            for (let y = 0; y < height; y++) {\n                const arrayY = array[y];\n                for (let x = 0; x < width; x++) {\n                    if (arrayY[x] === 1) {\n                        numDarkCells++;\n                    }\n                }\n            }\n            const numTotalCells = matrix.getHeight() * matrix.getWidth();\n            const fivePercentVariances = Math.floor(Math.abs(numDarkCells * 2 - numTotalCells) * 10 / numTotalCells);\n            return fivePercentVariances * MaskUtil.N4;\n        }\n        /**\n         * Return the mask bit for \"getMaskPattern\" at \"x\" and \"y\". See 8.8 of JISX0510:2004 for mask\n         * pattern conditions.\n         */\n        static getDataMaskBit(maskPattern /*int*/, x /*int*/, y /*int*/) {\n            let intermediate; /*int*/\n            let temp; /*int*/\n            switch (maskPattern) {\n                case 0:\n                    intermediate = (y + x) & 0x1;\n                    break;\n                case 1:\n                    intermediate = y & 0x1;\n                    break;\n                case 2:\n                    intermediate = x % 3;\n                    break;\n                case 3:\n                    intermediate = (y + x) % 3;\n                    break;\n                case 4:\n                    intermediate = (Math.floor(y / 2) + Math.floor(x / 3)) & 0x1;\n                    break;\n                case 5:\n                    temp = y * x;\n                    intermediate = (temp & 0x1) + (temp % 3);\n                    break;\n                case 6:\n                    temp = y * x;\n                    intermediate = ((temp & 0x1) + (temp % 3)) & 0x1;\n                    break;\n                case 7:\n                    temp = y * x;\n                    intermediate = ((temp % 3) + ((y + x) & 0x1)) & 0x1;\n                    break;\n                default:\n                    throw new IllegalArgumentException('Invalid mask pattern: ' + maskPattern);\n            }\n            return intermediate === 0;\n        }\n        /**\n         * Helper function for applyMaskPenaltyRule1. We need this for doing this calculation in both\n         * vertical and horizontal orders respectively.\n         */\n        static applyMaskPenaltyRule1Internal(matrix, isHorizontal) {\n            let penalty = 0;\n            const iLimit = isHorizontal ? matrix.getHeight() : matrix.getWidth();\n            const jLimit = isHorizontal ? matrix.getWidth() : matrix.getHeight();\n            const array = matrix.getArray();\n            for (let i = 0; i < iLimit; i++) {\n                let numSameBitCells = 0;\n                let prevBit = -1;\n                for (let j = 0; j < jLimit; j++) {\n                    const bit = isHorizontal ? array[i][j] : array[j][i];\n                    if (bit === prevBit) {\n                        numSameBitCells++;\n                    }\n                    else {\n                        if (numSameBitCells >= 5) {\n                            penalty += MaskUtil.N1 + (numSameBitCells - 5);\n                        }\n                        numSameBitCells = 1; // Include the cell itself.\n                        prevBit = bit;\n                    }\n                }\n                if (numSameBitCells >= 5) {\n                    penalty += MaskUtil.N1 + (numSameBitCells - 5);\n                }\n            }\n            return penalty;\n        }\n    }\n    // Penalty weights from section 6.8.2.1\n    MaskUtil.N1 = 3;\n    MaskUtil.N2 = 3;\n    MaskUtil.N3 = 40;\n    MaskUtil.N4 = 10;\n\n    /**\n     * JAVAPORT: The original code was a 2D array of ints, but since it only ever gets assigned\n     * -1, 0, and 1, I'm going to use less memory and go with bytes.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class ByteMatrix {\n        constructor(width /*int*/, height /*int*/) {\n            this.width = width;\n            this.height = height;\n            const bytes = new Array(height); // [height][width]\n            for (let i = 0; i !== height; i++) {\n                bytes[i] = new Uint8Array(width);\n            }\n            this.bytes = bytes;\n        }\n        getHeight() {\n            return this.height;\n        }\n        getWidth() {\n            return this.width;\n        }\n        get(x /*int*/, y /*int*/) {\n            return this.bytes[y][x];\n        }\n        /**\n         * @return an internal representation as bytes, in row-major order. array[y][x] represents point (x,y)\n         */\n        getArray() {\n            return this.bytes;\n        }\n        // TYPESCRIPTPORT: preffer to let two methods instead of override to avoid type comparison inside\n        setNumber(x /*int*/, y /*int*/, value /*byte|int*/) {\n            this.bytes[y][x] = value;\n        }\n        // public set(x: number /*int*/, y: number /*int*/, value: number /*int*/): void {\n        //   bytes[y][x] = (byte) value\n        // }\n        setBoolean(x /*int*/, y /*int*/, value) {\n            this.bytes[y][x] = /*(byte) */ (value ? 1 : 0);\n        }\n        clear(value /*byte*/) {\n            for (const aByte of this.bytes) {\n                Arrays.fill(aByte, value);\n            }\n        }\n        equals(o) {\n            if (!(o instanceof ByteMatrix)) {\n                return false;\n            }\n            const other = o;\n            if (this.width !== other.width) {\n                return false;\n            }\n            if (this.height !== other.height) {\n                return false;\n            }\n            for (let y = 0, height = this.height; y < height; ++y) {\n                const bytesY = this.bytes[y];\n                const otherBytesY = other.bytes[y];\n                for (let x = 0, width = this.width; x < width; ++x) {\n                    if (bytesY[x] !== otherBytesY[x]) {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        }\n        /*@Override*/\n        toString() {\n            const result = new StringBuilder(); // (2 * width * height + 2)\n            for (let y = 0, height = this.height; y < height; ++y) {\n                const bytesY = this.bytes[y];\n                for (let x = 0, width = this.width; x < width; ++x) {\n                    switch (bytesY[x]) {\n                        case 0:\n                            result.append(' 0');\n                            break;\n                        case 1:\n                            result.append(' 1');\n                            break;\n                        default:\n                            result.append('  ');\n                            break;\n                    }\n                }\n                result.append('\\n');\n            }\n            return result.toString();\n        }\n    }\n\n    /**\n     * @author satorux@google.com (Satoru Takabayashi) - creator\n     * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n     */\n    class QRCode {\n        constructor() {\n            this.maskPattern = -1;\n        }\n        getMode() {\n            return this.mode;\n        }\n        getECLevel() {\n            return this.ecLevel;\n        }\n        getVersion() {\n            return this.version;\n        }\n        getMaskPattern() {\n            return this.maskPattern;\n        }\n        getMatrix() {\n            return this.matrix;\n        }\n        /*@Override*/\n        toString() {\n            const result = new StringBuilder(); // (200)\n            result.append('<<\\n');\n            result.append(' mode: ');\n            result.append(this.mode ? this.mode.toString() : 'null');\n            result.append('\\n ecLevel: ');\n            result.append(this.ecLevel ? this.ecLevel.toString() : 'null');\n            result.append('\\n version: ');\n            result.append(this.version ? this.version.toString() : 'null');\n            result.append('\\n maskPattern: ');\n            result.append(this.maskPattern.toString());\n            if (this.matrix) {\n                result.append('\\n matrix:\\n');\n                result.append(this.matrix.toString());\n            }\n            else {\n                result.append('\\n matrix: null\\n');\n            }\n            result.append('>>\\n');\n            return result.toString();\n        }\n        setMode(value) {\n            this.mode = value;\n        }\n        setECLevel(value) {\n            this.ecLevel = value;\n        }\n        setVersion(version) {\n            this.version = version;\n        }\n        setMaskPattern(value /*int*/) {\n            this.maskPattern = value;\n        }\n        setMatrix(value) {\n            this.matrix = value;\n        }\n        // Check if \"mask_pattern\" is valid.\n        static isValidMaskPattern(maskPattern /*int*/) {\n            return maskPattern >= 0 && maskPattern < QRCode.NUM_MASK_PATTERNS;\n        }\n    }\n    QRCode.NUM_MASK_PATTERNS = 8;\n\n    /**\n     * Custom Error class of type Exception.\n     */\n    class WriterException extends Exception {\n    }\n    WriterException.kind = 'WriterException';\n\n    /**\n     * @author satorux@google.com (Satoru Takabayashi) - creator\n     * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n     */\n    class MatrixUtil {\n        constructor() {\n            // do nothing\n        }\n        // Set all cells to -1 (TYPESCRIPTPORT: 255).  -1 (TYPESCRIPTPORT: 255) means that the cell is empty (not set yet).\n        //\n        // JAVAPORT: We shouldn't need to do this at all. The code should be rewritten to begin encoding\n        // with the ByteMatrix initialized all to zero.\n        static clearMatrix(matrix) {\n            // TYPESCRIPTPORT: we use UintArray se changed here from -1 to 255\n            matrix.clear(/*(byte) */ /*-1*/ 255);\n        }\n        // Build 2D matrix of QR Code from \"dataBits\" with \"ecLevel\", \"version\" and \"getMaskPattern\". On\n        // success, store the result in \"matrix\" and return true.\n        static buildMatrix(dataBits, ecLevel, version, maskPattern /*int*/, matrix) {\n            MatrixUtil.clearMatrix(matrix);\n            MatrixUtil.embedBasicPatterns(version, matrix);\n            // Type information appear with any version.\n            MatrixUtil.embedTypeInfo(ecLevel, maskPattern, matrix);\n            // Version info appear if version >= 7.\n            MatrixUtil.maybeEmbedVersionInfo(version, matrix);\n            // Data should be embedded at end.\n            MatrixUtil.embedDataBits(dataBits, maskPattern, matrix);\n        }\n        // Embed basic patterns. On success, modify the matrix and return true.\n        // The basic patterns are:\n        // - Position detection patterns\n        // - Timing patterns\n        // - Dark dot at the left bottom corner\n        // - Position adjustment patterns, if need be\n        static embedBasicPatterns(version, matrix) {\n            // Let's get started with embedding big squares at corners.\n            MatrixUtil.embedPositionDetectionPatternsAndSeparators(matrix);\n            // Then, embed the dark dot at the left bottom corner.\n            MatrixUtil.embedDarkDotAtLeftBottomCorner(matrix);\n            // Position adjustment patterns appear if version >= 2.\n            MatrixUtil.maybeEmbedPositionAdjustmentPatterns(version, matrix);\n            // Timing patterns should be embedded after position adj. patterns.\n            MatrixUtil.embedTimingPatterns(matrix);\n        }\n        // Embed type information. On success, modify the matrix.\n        static embedTypeInfo(ecLevel, maskPattern /*int*/, matrix) {\n            const typeInfoBits = new BitArray();\n            MatrixUtil.makeTypeInfoBits(ecLevel, maskPattern, typeInfoBits);\n            for (let i = 0, size = typeInfoBits.getSize(); i < size; ++i) {\n                // Place bits in LSB to MSB order.  LSB (least significant bit) is the last value in\n                // \"typeInfoBits\".\n                const bit = typeInfoBits.get(typeInfoBits.getSize() - 1 - i);\n                // Type info bits at the left top corner. See 8.9 of JISX0510:2004 (p.46).\n                const coordinates = MatrixUtil.TYPE_INFO_COORDINATES[i];\n                const x1 = coordinates[0];\n                const y1 = coordinates[1];\n                matrix.setBoolean(x1, y1, bit);\n                if (i < 8) {\n                    // Right top corner.\n                    const x2 = matrix.getWidth() - i - 1;\n                    const y2 = 8;\n                    matrix.setBoolean(x2, y2, bit);\n                }\n                else {\n                    // Left bottom corner.\n                    const x2 = 8;\n                    const y2 = matrix.getHeight() - 7 + (i - 8);\n                    matrix.setBoolean(x2, y2, bit);\n                }\n            }\n        }\n        // Embed version information if need be. On success, modify the matrix and return true.\n        // See 8.10 of JISX0510:2004 (p.47) for how to embed version information.\n        static maybeEmbedVersionInfo(version, matrix) {\n            if (version.getVersionNumber() < 7) { // Version info is necessary if version >= 7.\n                return; // Don't need version info.\n            }\n            const versionInfoBits = new BitArray();\n            MatrixUtil.makeVersionInfoBits(version, versionInfoBits);\n            let bitIndex = 6 * 3 - 1; // It will decrease from 17 to 0.\n            for (let i = 0; i < 6; ++i) {\n                for (let j = 0; j < 3; ++j) {\n                    // Place bits in LSB (least significant bit) to MSB order.\n                    const bit = versionInfoBits.get(bitIndex);\n                    bitIndex--;\n                    // Left bottom corner.\n                    matrix.setBoolean(i, matrix.getHeight() - 11 + j, bit);\n                    // Right bottom corner.\n                    matrix.setBoolean(matrix.getHeight() - 11 + j, i, bit);\n                }\n            }\n        }\n        // Embed \"dataBits\" using \"getMaskPattern\". On success, modify the matrix and return true.\n        // For debugging purposes, it skips masking process if \"getMaskPattern\" is -1(TYPESCRIPTPORT: 255).\n        // See 8.7 of JISX0510:2004 (p.38) for how to embed data bits.\n        static embedDataBits(dataBits, maskPattern /*int*/, matrix) {\n            let bitIndex = 0;\n            let direction = -1;\n            // Start from the right bottom cell.\n            let x = matrix.getWidth() - 1;\n            let y = matrix.getHeight() - 1;\n            while (x > 0) {\n                // Skip the vertical timing pattern.\n                if (x === 6) {\n                    x -= 1;\n                }\n                while (y >= 0 && y < matrix.getHeight()) {\n                    for (let i = 0; i < 2; ++i) {\n                        const xx = x - i;\n                        // Skip the cell if it's not empty.\n                        if (!MatrixUtil.isEmpty(matrix.get(xx, y))) {\n                            continue;\n                        }\n                        let bit;\n                        if (bitIndex < dataBits.getSize()) {\n                            bit = dataBits.get(bitIndex);\n                            ++bitIndex;\n                        }\n                        else {\n                            // Padding bit. If there is no bit left, we'll fill the left cells with 0, as described\n                            // in 8.4.9 of JISX0510:2004 (p. 24).\n                            bit = false;\n                        }\n                        // Skip masking if mask_pattern is -1 (TYPESCRIPTPORT: 255).\n                        if (maskPattern !== 255 && MaskUtil.getDataMaskBit(maskPattern, xx, y)) {\n                            bit = !bit;\n                        }\n                        matrix.setBoolean(xx, y, bit);\n                    }\n                    y += direction;\n                }\n                direction = -direction; // Reverse the direction.\n                y += direction;\n                x -= 2; // Move to the left.\n            }\n            // All bits should be consumed.\n            if (bitIndex !== dataBits.getSize()) {\n                throw new WriterException('Not all bits consumed: ' + bitIndex + '/' + dataBits.getSize());\n            }\n        }\n        // Return the position of the most significant bit set (one: to) in the \"value\". The most\n        // significant bit is position 32. If there is no bit set, return 0. Examples:\n        // - findMSBSet(0) => 0\n        // - findMSBSet(1) => 1\n        // - findMSBSet(255) => 8\n        static findMSBSet(value /*int*/) {\n            return 32 - Integer.numberOfLeadingZeros(value);\n        }\n        // Calculate BCH (Bose-Chaudhuri-Hocquenghem) code for \"value\" using polynomial \"poly\". The BCH\n        // code is used for encoding type information and version information.\n        // Example: Calculation of version information of 7.\n        // f(x) is created from 7.\n        //   - 7 = 000111 in 6 bits\n        //   - f(x) = x^2 + x^1 + x^0\n        // g(x) is given by the standard (p. 67)\n        //   - g(x) = x^12 + x^11 + x^10 + x^9 + x^8 + x^5 + x^2 + 1\n        // Multiply f(x) by x^(18 - 6)\n        //   - f'(x) = f(x) * x^(18 - 6)\n        //   - f'(x) = x^14 + x^13 + x^12\n        // Calculate the remainder of f'(x) / g(x)\n        //         x^2\n        //         __________________________________________________\n        //   g(x) )x^14 + x^13 + x^12\n        //         x^14 + x^13 + x^12 + x^11 + x^10 + x^7 + x^4 + x^2\n        //         --------------------------------------------------\n        //                              x^11 + x^10 + x^7 + x^4 + x^2\n        //\n        // The remainder is x^11 + x^10 + x^7 + x^4 + x^2\n        // Encode it in binary: 110010010100\n        // The return value is 0xc94 (1100 1001 0100)\n        //\n        // Since all coefficients in the polynomials are 1 or 0, we can do the calculation by bit\n        // operations. We don't care if coefficients are positive or negative.\n        static calculateBCHCode(value /*int*/, poly /*int*/) {\n            if (poly === 0) {\n                throw new IllegalArgumentException('0 polynomial');\n            }\n            // If poly is \"1 1111 0010 0101\" (version info poly), msbSetInPoly is 13. We'll subtract 1\n            // from 13 to make it 12.\n            const msbSetInPoly = MatrixUtil.findMSBSet(poly);\n            value <<= msbSetInPoly - 1;\n            // Do the division business using exclusive-or operations.\n            while (MatrixUtil.findMSBSet(value) >= msbSetInPoly) {\n                value ^= poly << (MatrixUtil.findMSBSet(value) - msbSetInPoly);\n            }\n            // Now the \"value\" is the remainder (i.e. the BCH code)\n            return value;\n        }\n        // Make bit vector of type information. On success, store the result in \"bits\" and return true.\n        // Encode error correction level and mask pattern. See 8.9 of\n        // JISX0510:2004 (p.45) for details.\n        static makeTypeInfoBits(ecLevel, maskPattern /*int*/, bits) {\n            if (!QRCode.isValidMaskPattern(maskPattern)) {\n                throw new WriterException('Invalid mask pattern');\n            }\n            const typeInfo = (ecLevel.getBits() << 3) | maskPattern;\n            bits.appendBits(typeInfo, 5);\n            const bchCode = MatrixUtil.calculateBCHCode(typeInfo, MatrixUtil.TYPE_INFO_POLY);\n            bits.appendBits(bchCode, 10);\n            const maskBits = new BitArray();\n            maskBits.appendBits(MatrixUtil.TYPE_INFO_MASK_PATTERN, 15);\n            bits.xor(maskBits);\n            if (bits.getSize() !== 15) { // Just in case.\n                throw new WriterException('should not happen but we got: ' + bits.getSize());\n            }\n        }\n        // Make bit vector of version information. On success, store the result in \"bits\" and return true.\n        // See 8.10 of JISX0510:2004 (p.45) for details.\n        static makeVersionInfoBits(version, bits) {\n            bits.appendBits(version.getVersionNumber(), 6);\n            const bchCode = MatrixUtil.calculateBCHCode(version.getVersionNumber(), MatrixUtil.VERSION_INFO_POLY);\n            bits.appendBits(bchCode, 12);\n            if (bits.getSize() !== 18) { // Just in case.\n                throw new WriterException('should not happen but we got: ' + bits.getSize());\n            }\n        }\n        // Check if \"value\" is empty.\n        static isEmpty(value /*int*/) {\n            return value === 255; // -1\n        }\n        static embedTimingPatterns(matrix) {\n            // -8 is for skipping position detection patterns (7: size), and two horizontal/vertical\n            // separation patterns (1: size). Thus, 8 = 7 + 1.\n            for (let i = 8; i < matrix.getWidth() - 8; ++i) {\n                const bit = (i + 1) % 2;\n                // Horizontal line.\n                if (MatrixUtil.isEmpty(matrix.get(i, 6))) {\n                    matrix.setNumber(i, 6, bit);\n                }\n                // Vertical line.\n                if (MatrixUtil.isEmpty(matrix.get(6, i))) {\n                    matrix.setNumber(6, i, bit);\n                }\n            }\n        }\n        // Embed the lonely dark dot at left bottom corner. JISX0510:2004 (p.46)\n        static embedDarkDotAtLeftBottomCorner(matrix) {\n            if (matrix.get(8, matrix.getHeight() - 8) === 0) {\n                throw new WriterException();\n            }\n            matrix.setNumber(8, matrix.getHeight() - 8, 1);\n        }\n        static embedHorizontalSeparationPattern(xStart /*int*/, yStart /*int*/, matrix) {\n            for (let x = 0; x < 8; ++x) {\n                if (!MatrixUtil.isEmpty(matrix.get(xStart + x, yStart))) {\n                    throw new WriterException();\n                }\n                matrix.setNumber(xStart + x, yStart, 0);\n            }\n        }\n        static embedVerticalSeparationPattern(xStart /*int*/, yStart /*int*/, matrix) {\n            for (let y = 0; y < 7; ++y) {\n                if (!MatrixUtil.isEmpty(matrix.get(xStart, yStart + y))) {\n                    throw new WriterException();\n                }\n                matrix.setNumber(xStart, yStart + y, 0);\n            }\n        }\n        static embedPositionAdjustmentPattern(xStart /*int*/, yStart /*int*/, matrix) {\n            for (let y = 0; y < 5; ++y) {\n                const patternY = MatrixUtil.POSITION_ADJUSTMENT_PATTERN[y];\n                for (let x = 0; x < 5; ++x) {\n                    matrix.setNumber(xStart + x, yStart + y, patternY[x]);\n                }\n            }\n        }\n        static embedPositionDetectionPattern(xStart /*int*/, yStart /*int*/, matrix) {\n            for (let y = 0; y < 7; ++y) {\n                const patternY = MatrixUtil.POSITION_DETECTION_PATTERN[y];\n                for (let x = 0; x < 7; ++x) {\n                    matrix.setNumber(xStart + x, yStart + y, patternY[x]);\n                }\n            }\n        }\n        // Embed position detection patterns and surrounding vertical/horizontal separators.\n        static embedPositionDetectionPatternsAndSeparators(matrix) {\n            // Embed three big squares at corners.\n            const pdpWidth = MatrixUtil.POSITION_DETECTION_PATTERN[0].length;\n            // Left top corner.\n            MatrixUtil.embedPositionDetectionPattern(0, 0, matrix);\n            // Right top corner.\n            MatrixUtil.embedPositionDetectionPattern(matrix.getWidth() - pdpWidth, 0, matrix);\n            // Left bottom corner.\n            MatrixUtil.embedPositionDetectionPattern(0, matrix.getWidth() - pdpWidth, matrix);\n            // Embed horizontal separation patterns around the squares.\n            const hspWidth = 8;\n            // Left top corner.\n            MatrixUtil.embedHorizontalSeparationPattern(0, hspWidth - 1, matrix);\n            // Right top corner.\n            MatrixUtil.embedHorizontalSeparationPattern(matrix.getWidth() - hspWidth, hspWidth - 1, matrix);\n            // Left bottom corner.\n            MatrixUtil.embedHorizontalSeparationPattern(0, matrix.getWidth() - hspWidth, matrix);\n            // Embed vertical separation patterns around the squares.\n            const vspSize = 7;\n            // Left top corner.\n            MatrixUtil.embedVerticalSeparationPattern(vspSize, 0, matrix);\n            // Right top corner.\n            MatrixUtil.embedVerticalSeparationPattern(matrix.getHeight() - vspSize - 1, 0, matrix);\n            // Left bottom corner.\n            MatrixUtil.embedVerticalSeparationPattern(vspSize, matrix.getHeight() - vspSize, matrix);\n        }\n        // Embed position adjustment patterns if need be.\n        static maybeEmbedPositionAdjustmentPatterns(version, matrix) {\n            if (version.getVersionNumber() < 2) { // The patterns appear if version >= 2\n                return;\n            }\n            const index = version.getVersionNumber() - 1;\n            const coordinates = MatrixUtil.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];\n            for (let i = 0, length = coordinates.length; i !== length; i++) {\n                const y = coordinates[i];\n                if (y >= 0) {\n                    for (let j = 0; j !== length; j++) {\n                        const x = coordinates[j];\n                        if (x >= 0 && MatrixUtil.isEmpty(matrix.get(x, y))) {\n                            // If the cell is unset, we embed the position adjustment pattern here.\n                            // -2 is necessary since the x/y coordinates point to the center of the pattern, not the\n                            // left top corner.\n                            MatrixUtil.embedPositionAdjustmentPattern(x - 2, y - 2, matrix);\n                        }\n                    }\n                }\n            }\n        }\n    }\n    MatrixUtil.POSITION_DETECTION_PATTERN = Array.from([\n        Int32Array.from([1, 1, 1, 1, 1, 1, 1]),\n        Int32Array.from([1, 0, 0, 0, 0, 0, 1]),\n        Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n        Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n        Int32Array.from([1, 0, 1, 1, 1, 0, 1]),\n        Int32Array.from([1, 0, 0, 0, 0, 0, 1]),\n        Int32Array.from([1, 1, 1, 1, 1, 1, 1]),\n    ]);\n    MatrixUtil.POSITION_ADJUSTMENT_PATTERN = Array.from([\n        Int32Array.from([1, 1, 1, 1, 1]),\n        Int32Array.from([1, 0, 0, 0, 1]),\n        Int32Array.from([1, 0, 1, 0, 1]),\n        Int32Array.from([1, 0, 0, 0, 1]),\n        Int32Array.from([1, 1, 1, 1, 1]),\n    ]);\n    // From Appendix E. Table 1, JIS0510X:2004 (71: p). The table was double-checked by komatsu.\n    MatrixUtil.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE = Array.from([\n        Int32Array.from([-1, -1, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 18, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 22, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 26, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 30, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 34, -1, -1, -1, -1, -1]),\n        Int32Array.from([6, 22, 38, -1, -1, -1, -1]),\n        Int32Array.from([6, 24, 42, -1, -1, -1, -1]),\n        Int32Array.from([6, 26, 46, -1, -1, -1, -1]),\n        Int32Array.from([6, 28, 50, -1, -1, -1, -1]),\n        Int32Array.from([6, 30, 54, -1, -1, -1, -1]),\n        Int32Array.from([6, 32, 58, -1, -1, -1, -1]),\n        Int32Array.from([6, 34, 62, -1, -1, -1, -1]),\n        Int32Array.from([6, 26, 46, 66, -1, -1, -1]),\n        Int32Array.from([6, 26, 48, 70, -1, -1, -1]),\n        Int32Array.from([6, 26, 50, 74, -1, -1, -1]),\n        Int32Array.from([6, 30, 54, 78, -1, -1, -1]),\n        Int32Array.from([6, 30, 56, 82, -1, -1, -1]),\n        Int32Array.from([6, 30, 58, 86, -1, -1, -1]),\n        Int32Array.from([6, 34, 62, 90, -1, -1, -1]),\n        Int32Array.from([6, 28, 50, 72, 94, -1, -1]),\n        Int32Array.from([6, 26, 50, 74, 98, -1, -1]),\n        Int32Array.from([6, 30, 54, 78, 102, -1, -1]),\n        Int32Array.from([6, 28, 54, 80, 106, -1, -1]),\n        Int32Array.from([6, 32, 58, 84, 110, -1, -1]),\n        Int32Array.from([6, 30, 58, 86, 114, -1, -1]),\n        Int32Array.from([6, 34, 62, 90, 118, -1, -1]),\n        Int32Array.from([6, 26, 50, 74, 98, 122, -1]),\n        Int32Array.from([6, 30, 54, 78, 102, 126, -1]),\n        Int32Array.from([6, 26, 52, 78, 104, 130, -1]),\n        Int32Array.from([6, 30, 56, 82, 108, 134, -1]),\n        Int32Array.from([6, 34, 60, 86, 112, 138, -1]),\n        Int32Array.from([6, 30, 58, 86, 114, 142, -1]),\n        Int32Array.from([6, 34, 62, 90, 118, 146, -1]),\n        Int32Array.from([6, 30, 54, 78, 102, 126, 150]),\n        Int32Array.from([6, 24, 50, 76, 102, 128, 154]),\n        Int32Array.from([6, 28, 54, 80, 106, 132, 158]),\n        Int32Array.from([6, 32, 58, 84, 110, 136, 162]),\n        Int32Array.from([6, 26, 54, 82, 110, 138, 166]),\n        Int32Array.from([6, 30, 58, 86, 114, 142, 170]),\n    ]);\n    // Type info cells at the left top corner.\n    MatrixUtil.TYPE_INFO_COORDINATES = Array.from([\n        Int32Array.from([8, 0]),\n        Int32Array.from([8, 1]),\n        Int32Array.from([8, 2]),\n        Int32Array.from([8, 3]),\n        Int32Array.from([8, 4]),\n        Int32Array.from([8, 5]),\n        Int32Array.from([8, 7]),\n        Int32Array.from([8, 8]),\n        Int32Array.from([7, 8]),\n        Int32Array.from([5, 8]),\n        Int32Array.from([4, 8]),\n        Int32Array.from([3, 8]),\n        Int32Array.from([2, 8]),\n        Int32Array.from([1, 8]),\n        Int32Array.from([0, 8]),\n    ]);\n    // From Appendix D in JISX0510:2004 (p. 67)\n    MatrixUtil.VERSION_INFO_POLY = 0x1f25; // 1 1111 0010 0101\n    // From Appendix C in JISX0510:2004 (p.65).\n    MatrixUtil.TYPE_INFO_POLY = 0x537;\n    MatrixUtil.TYPE_INFO_MASK_PATTERN = 0x5412;\n\n    /*namespace com.google.zxing.qrcode.encoder {*/\n    class BlockPair {\n        constructor(dataBytes, errorCorrectionBytes) {\n            this.dataBytes = dataBytes;\n            this.errorCorrectionBytes = errorCorrectionBytes;\n        }\n        getDataBytes() {\n            return this.dataBytes;\n        }\n        getErrorCorrectionBytes() {\n            return this.errorCorrectionBytes;\n        }\n    }\n\n    /*import java.io.UnsupportedEncodingException;*/\n    /*import java.util.ArrayList;*/\n    /*import java.util.Collection;*/\n    /*import java.util.Map;*/\n    /**\n     * @author satorux@google.com (Satoru Takabayashi) - creator\n     * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n     */\n    class Encoder {\n        // TYPESCRIPTPORT: changed to UTF8, the default for js\n        constructor() { }\n        // The mask penalty calculation is complicated.  See Table 21 of JISX0510:2004 (p.45) for details.\n        // Basically it applies four rules and summate all penalties.\n        static calculateMaskPenalty(matrix) {\n            return MaskUtil.applyMaskPenaltyRule1(matrix)\n                + MaskUtil.applyMaskPenaltyRule2(matrix)\n                + MaskUtil.applyMaskPenaltyRule3(matrix)\n                + MaskUtil.applyMaskPenaltyRule4(matrix);\n        }\n        /**\n         * @param content text to encode\n         * @param ecLevel error correction level to use\n         * @return {@link QRCode} representing the encoded QR code\n         * @throws WriterException if encoding can't succeed, because of for example invalid content\n         *   or configuration\n         */\n        // public static encode(content: string, ecLevel: ErrorCorrectionLevel): QRCode /*throws WriterException*/ {\n        //   return encode(content, ecLevel, null)\n        // }\n        static encode(content, ecLevel, hints = null) {\n            // Determine what character encoding has been specified by the caller, if any\n            let encoding = Encoder.DEFAULT_BYTE_MODE_ENCODING;\n            const hasEncodingHint = hints !== null && undefined !== hints.get(EncodeHintType$1.CHARACTER_SET);\n            if (hasEncodingHint) {\n                encoding = hints.get(EncodeHintType$1.CHARACTER_SET).toString();\n            }\n            // Pick an encoding mode appropriate for the content. Note that this will not attempt to use\n            // multiple modes / segments even if that were more efficient. Twould be nice.\n            const mode = this.chooseMode(content, encoding);\n            // This will store the header information, like mode and\n            // length, as well as \"header\" segments like an ECI segment.\n            const headerBits = new BitArray();\n            // Append ECI segment if applicable\n            if (mode === Mode$1.BYTE && (hasEncodingHint || Encoder.DEFAULT_BYTE_MODE_ENCODING !== encoding)) {\n                const eci = CharacterSetECI.getCharacterSetECIByName(encoding);\n                if (eci !== undefined) {\n                    this.appendECI(eci, headerBits);\n                }\n            }\n            // (With ECI in place,) Write the mode marker\n            this.appendModeInfo(mode, headerBits);\n            // Collect data within the main segment, separately, to count its size if needed. Don't add it to\n            // main payload yet.\n            const dataBits = new BitArray();\n            this.appendBytes(content, mode, dataBits, encoding);\n            let version;\n            if (hints !== null && undefined !== hints.get(EncodeHintType$1.QR_VERSION)) {\n                const versionNumber = Number.parseInt(hints.get(EncodeHintType$1.QR_VERSION).toString(), 10);\n                version = Version$1.getVersionForNumber(versionNumber);\n                const bitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, version);\n                if (!this.willFit(bitsNeeded, version, ecLevel)) {\n                    throw new WriterException('Data too big for requested version');\n                }\n            }\n            else {\n                version = this.recommendVersion(ecLevel, mode, headerBits, dataBits);\n            }\n            const headerAndDataBits = new BitArray();\n            headerAndDataBits.appendBitArray(headerBits);\n            // Find \"length\" of main segment and write it\n            const numLetters = mode === Mode$1.BYTE ? dataBits.getSizeInBytes() : content.length;\n            this.appendLengthInfo(numLetters, version, mode, headerAndDataBits);\n            // Put data together into the overall payload\n            headerAndDataBits.appendBitArray(dataBits);\n            const ecBlocks = version.getECBlocksForLevel(ecLevel);\n            const numDataBytes = version.getTotalCodewords() - ecBlocks.getTotalECCodewords();\n            // Terminate the bits properly.\n            this.terminateBits(numDataBytes, headerAndDataBits);\n            // Interleave data bits with error correction code.\n            const finalBits = this.interleaveWithECBytes(headerAndDataBits, version.getTotalCodewords(), numDataBytes, ecBlocks.getNumBlocks());\n            const qrCode = new QRCode();\n            qrCode.setECLevel(ecLevel);\n            qrCode.setMode(mode);\n            qrCode.setVersion(version);\n            //  Choose the mask pattern and set to \"qrCode\".\n            const dimension = version.getDimensionForVersion();\n            const matrix = new ByteMatrix(dimension, dimension);\n            const maskPattern = this.chooseMaskPattern(finalBits, ecLevel, version, matrix);\n            qrCode.setMaskPattern(maskPattern);\n            // Build the matrix and set it to \"qrCode\".\n            MatrixUtil.buildMatrix(finalBits, ecLevel, version, maskPattern, matrix);\n            qrCode.setMatrix(matrix);\n            return qrCode;\n        }\n        /**\n         * Decides the smallest version of QR code that will contain all of the provided data.\n         *\n         * @throws WriterException if the data cannot fit in any version\n         */\n        static recommendVersion(ecLevel, mode, headerBits, dataBits) {\n            // Hard part: need to know version to know how many bits length takes. But need to know how many\n            // bits it takes to know version. First we take a guess at version by assuming version will be\n            // the minimum, 1:\n            const provisionalBitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, Version$1.getVersionForNumber(1));\n            const provisionalVersion = this.chooseVersion(provisionalBitsNeeded, ecLevel);\n            // Use that guess to calculate the right version. I am still not sure this works in 100% of cases.\n            const bitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, provisionalVersion);\n            return this.chooseVersion(bitsNeeded, ecLevel);\n        }\n        static calculateBitsNeeded(mode, headerBits, dataBits, version) {\n            return headerBits.getSize() + mode.getCharacterCountBits(version) + dataBits.getSize();\n        }\n        /**\n         * @return the code point of the table used in alphanumeric mode or\n         *  -1 if there is no corresponding code in the table.\n         */\n        static getAlphanumericCode(code /*int*/) {\n            if (code < Encoder.ALPHANUMERIC_TABLE.length) {\n                return Encoder.ALPHANUMERIC_TABLE[code];\n            }\n            return -1;\n        }\n        // public static chooseMode(content: string): Mode {\n        //   return chooseMode(content, null);\n        // }\n        /**\n         * Choose the best mode by examining the content. Note that 'encoding' is used as a hint;\n         * if it is Shift_JIS, and the input is only double-byte Kanji, then we return {@link Mode#KANJI}.\n         */\n        static chooseMode(content, encoding = null) {\n            if (CharacterSetECI.SJIS.getName() === encoding && this.isOnlyDoubleByteKanji(content)) {\n                // Choose Kanji mode if all input are double-byte characters\n                return Mode$1.KANJI;\n            }\n            let hasNumeric = false;\n            let hasAlphanumeric = false;\n            for (let i = 0, length = content.length; i < length; ++i) {\n                const c = content.charAt(i);\n                if (Encoder.isDigit(c)) {\n                    hasNumeric = true;\n                }\n                else if (this.getAlphanumericCode(c.charCodeAt(0)) !== -1) {\n                    hasAlphanumeric = true;\n                }\n                else {\n                    return Mode$1.BYTE;\n                }\n            }\n            if (hasAlphanumeric) {\n                return Mode$1.ALPHANUMERIC;\n            }\n            if (hasNumeric) {\n                return Mode$1.NUMERIC;\n            }\n            return Mode$1.BYTE;\n        }\n        static isOnlyDoubleByteKanji(content) {\n            let bytes;\n            try {\n                bytes = StringEncoding.encode(content, CharacterSetECI.SJIS); // content.getBytes(\"Shift_JIS\"))\n            }\n            catch (ignored /*: UnsupportedEncodingException*/) {\n                return false;\n            }\n            const length = bytes.length;\n            if (length % 2 !== 0) {\n                return false;\n            }\n            for (let i = 0; i < length; i += 2) {\n                const byte1 = bytes[i] & 0xFF;\n                if ((byte1 < 0x81 || byte1 > 0x9F) && (byte1 < 0xE0 || byte1 > 0xEB)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        static chooseMaskPattern(bits, ecLevel, version, matrix) {\n            let minPenalty = Number.MAX_SAFE_INTEGER; // Lower penalty is better.\n            let bestMaskPattern = -1;\n            // We try all mask patterns to choose the best one.\n            for (let maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {\n                MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);\n                let penalty = this.calculateMaskPenalty(matrix);\n                if (penalty < minPenalty) {\n                    minPenalty = penalty;\n                    bestMaskPattern = maskPattern;\n                }\n            }\n            return bestMaskPattern;\n        }\n        static chooseVersion(numInputBits /*int*/, ecLevel) {\n            for (let versionNum = 1; versionNum <= 40; versionNum++) {\n                const version = Version$1.getVersionForNumber(versionNum);\n                if (Encoder.willFit(numInputBits, version, ecLevel)) {\n                    return version;\n                }\n            }\n            throw new WriterException('Data too big');\n        }\n        /**\n         * @return true if the number of input bits will fit in a code with the specified version and\n         * error correction level.\n         */\n        static willFit(numInputBits /*int*/, version, ecLevel) {\n            // In the following comments, we use numbers of Version 7-H.\n            // numBytes = 196\n            const numBytes = version.getTotalCodewords();\n            // getNumECBytes = 130\n            const ecBlocks = version.getECBlocksForLevel(ecLevel);\n            const numEcBytes = ecBlocks.getTotalECCodewords();\n            // getNumDataBytes = 196 - 130 = 66\n            const numDataBytes = numBytes - numEcBytes;\n            const totalInputBytes = (numInputBits + 7) / 8;\n            return numDataBytes >= totalInputBytes;\n        }\n        /**\n         * Terminate bits as described in 8.4.8 and 8.4.9 of JISX0510:2004 (p.24).\n         */\n        static terminateBits(numDataBytes /*int*/, bits) {\n            const capacity = numDataBytes * 8;\n            if (bits.getSize() > capacity) {\n                throw new WriterException('data bits cannot fit in the QR Code' + bits.getSize() + ' > ' +\n                    capacity);\n            }\n            for (let i = 0; i < 4 && bits.getSize() < capacity; ++i) {\n                bits.appendBit(false);\n            }\n            // Append termination bits. See 8.4.8 of JISX0510:2004 (p.24) for details.\n            // If the last byte isn't 8-bit aligned, we'll add padding bits.\n            const numBitsInLastByte = bits.getSize() & 0x07;\n            if (numBitsInLastByte > 0) {\n                for (let i = numBitsInLastByte; i < 8; i++) {\n                    bits.appendBit(false);\n                }\n            }\n            // If we have more space, we'll fill the space with padding patterns defined in 8.4.9 (p.24).\n            const numPaddingBytes = numDataBytes - bits.getSizeInBytes();\n            for (let i = 0; i < numPaddingBytes; ++i) {\n                bits.appendBits((i & 0x01) === 0 ? 0xEC : 0x11, 8);\n            }\n            if (bits.getSize() !== capacity) {\n                throw new WriterException('Bits size does not equal capacity');\n            }\n        }\n        /**\n         * Get number of data bytes and number of error correction bytes for block id \"blockID\". Store\n         * the result in \"numDataBytesInBlock\", and \"numECBytesInBlock\". See table 12 in 8.5.1 of\n         * JISX0510:2004 (p.30)\n         */\n        static getNumDataBytesAndNumECBytesForBlockID(numTotalBytes /*int*/, numDataBytes /*int*/, numRSBlocks /*int*/, blockID /*int*/, numDataBytesInBlock, numECBytesInBlock) {\n            if (blockID >= numRSBlocks) {\n                throw new WriterException('Block ID too large');\n            }\n            // numRsBlocksInGroup2 = 196 % 5 = 1\n            const numRsBlocksInGroup2 = numTotalBytes % numRSBlocks;\n            // numRsBlocksInGroup1 = 5 - 1 = 4\n            const numRsBlocksInGroup1 = numRSBlocks - numRsBlocksInGroup2;\n            // numTotalBytesInGroup1 = 196 / 5 = 39\n            const numTotalBytesInGroup1 = Math.floor(numTotalBytes / numRSBlocks);\n            // numTotalBytesInGroup2 = 39 + 1 = 40\n            const numTotalBytesInGroup2 = numTotalBytesInGroup1 + 1;\n            // numDataBytesInGroup1 = 66 / 5 = 13\n            const numDataBytesInGroup1 = Math.floor(numDataBytes / numRSBlocks);\n            // numDataBytesInGroup2 = 13 + 1 = 14\n            const numDataBytesInGroup2 = numDataBytesInGroup1 + 1;\n            // numEcBytesInGroup1 = 39 - 13 = 26\n            const numEcBytesInGroup1 = numTotalBytesInGroup1 - numDataBytesInGroup1;\n            // numEcBytesInGroup2 = 40 - 14 = 26\n            const numEcBytesInGroup2 = numTotalBytesInGroup2 - numDataBytesInGroup2;\n            // Sanity checks.\n            // 26 = 26\n            if (numEcBytesInGroup1 !== numEcBytesInGroup2) {\n                throw new WriterException('EC bytes mismatch');\n            }\n            // 5 = 4 + 1.\n            if (numRSBlocks !== numRsBlocksInGroup1 + numRsBlocksInGroup2) {\n                throw new WriterException('RS blocks mismatch');\n            }\n            // 196 = (13 + 26) * 4 + (14 + 26) * 1\n            if (numTotalBytes !==\n                ((numDataBytesInGroup1 + numEcBytesInGroup1) *\n                    numRsBlocksInGroup1) +\n                    ((numDataBytesInGroup2 + numEcBytesInGroup2) *\n                        numRsBlocksInGroup2)) {\n                throw new WriterException('Total bytes mismatch');\n            }\n            if (blockID < numRsBlocksInGroup1) {\n                numDataBytesInBlock[0] = numDataBytesInGroup1;\n                numECBytesInBlock[0] = numEcBytesInGroup1;\n            }\n            else {\n                numDataBytesInBlock[0] = numDataBytesInGroup2;\n                numECBytesInBlock[0] = numEcBytesInGroup2;\n            }\n        }\n        /**\n         * Interleave \"bits\" with corresponding error correction bytes. On success, store the result in\n         * \"result\". The interleave rule is complicated. See 8.6 of JISX0510:2004 (p.37) for details.\n         */\n        static interleaveWithECBytes(bits, numTotalBytes /*int*/, numDataBytes /*int*/, numRSBlocks /*int*/) {\n            // \"bits\" must have \"getNumDataBytes\" bytes of data.\n            if (bits.getSizeInBytes() !== numDataBytes) {\n                throw new WriterException('Number of bits and data bytes does not match');\n            }\n            // Step 1.  Divide data bytes into blocks and generate error correction bytes for them. We'll\n            // store the divided data bytes blocks and error correction bytes blocks into \"blocks\".\n            let dataBytesOffset = 0;\n            let maxNumDataBytes = 0;\n            let maxNumEcBytes = 0;\n            // Since, we know the number of reedsolmon blocks, we can initialize the vector with the number.\n            const blocks = new Array(); // new Array<BlockPair>(numRSBlocks)\n            for (let i = 0; i < numRSBlocks; ++i) {\n                const numDataBytesInBlock = new Int32Array(1);\n                const numEcBytesInBlock = new Int32Array(1);\n                Encoder.getNumDataBytesAndNumECBytesForBlockID(numTotalBytes, numDataBytes, numRSBlocks, i, numDataBytesInBlock, numEcBytesInBlock);\n                const size = numDataBytesInBlock[0];\n                const dataBytes = new Uint8Array(size);\n                bits.toBytes(8 * dataBytesOffset, dataBytes, 0, size);\n                const ecBytes = Encoder.generateECBytes(dataBytes, numEcBytesInBlock[0]);\n                blocks.push(new BlockPair(dataBytes, ecBytes));\n                maxNumDataBytes = Math.max(maxNumDataBytes, size);\n                maxNumEcBytes = Math.max(maxNumEcBytes, ecBytes.length);\n                dataBytesOffset += numDataBytesInBlock[0];\n            }\n            if (numDataBytes !== dataBytesOffset) {\n                throw new WriterException('Data bytes does not match offset');\n            }\n            const result = new BitArray();\n            // First, place data blocks.\n            for (let i = 0; i < maxNumDataBytes; ++i) {\n                for (const block of blocks) {\n                    const dataBytes = block.getDataBytes();\n                    if (i < dataBytes.length) {\n                        result.appendBits(dataBytes[i], 8);\n                    }\n                }\n            }\n            // Then, place error correction blocks.\n            for (let i = 0; i < maxNumEcBytes; ++i) {\n                for (const block of blocks) {\n                    const ecBytes = block.getErrorCorrectionBytes();\n                    if (i < ecBytes.length) {\n                        result.appendBits(ecBytes[i], 8);\n                    }\n                }\n            }\n            if (numTotalBytes !== result.getSizeInBytes()) { // Should be same.\n                throw new WriterException('Interleaving error: ' + numTotalBytes + ' and ' +\n                    result.getSizeInBytes() + ' differ.');\n            }\n            return result;\n        }\n        static generateECBytes(dataBytes, numEcBytesInBlock /*int*/) {\n            const numDataBytes = dataBytes.length;\n            const toEncode = new Int32Array(numDataBytes + numEcBytesInBlock); // int[numDataBytes + numEcBytesInBlock]\n            for (let i = 0; i < numDataBytes; i++) {\n                toEncode[i] = dataBytes[i] & 0xFF;\n            }\n            new ReedSolomonEncoder(GenericGF.QR_CODE_FIELD_256).encode(toEncode, numEcBytesInBlock);\n            const ecBytes = new Uint8Array(numEcBytesInBlock);\n            for (let i = 0; i < numEcBytesInBlock; i++) {\n                ecBytes[i] = /*(byte) */ toEncode[numDataBytes + i];\n            }\n            return ecBytes;\n        }\n        /**\n         * Append mode info. On success, store the result in \"bits\".\n         */\n        static appendModeInfo(mode, bits) {\n            bits.appendBits(mode.getBits(), 4);\n        }\n        /**\n         * Append length info. On success, store the result in \"bits\".\n         */\n        static appendLengthInfo(numLetters /*int*/, version, mode, bits) {\n            const numBits = mode.getCharacterCountBits(version);\n            if (numLetters >= (1 << numBits)) {\n                throw new WriterException(numLetters + ' is bigger than ' + ((1 << numBits) - 1));\n            }\n            bits.appendBits(numLetters, numBits);\n        }\n        /**\n         * Append \"bytes\" in \"mode\" mode (encoding) into \"bits\". On success, store the result in \"bits\".\n         */\n        static appendBytes(content, mode, bits, encoding) {\n            switch (mode) {\n                case Mode$1.NUMERIC:\n                    Encoder.appendNumericBytes(content, bits);\n                    break;\n                case Mode$1.ALPHANUMERIC:\n                    Encoder.appendAlphanumericBytes(content, bits);\n                    break;\n                case Mode$1.BYTE:\n                    Encoder.append8BitBytes(content, bits, encoding);\n                    break;\n                case Mode$1.KANJI:\n                    Encoder.appendKanjiBytes(content, bits);\n                    break;\n                default:\n                    throw new WriterException('Invalid mode: ' + mode);\n            }\n        }\n        static getDigit(singleCharacter) {\n            return singleCharacter.charCodeAt(0) - 48;\n        }\n        static isDigit(singleCharacter) {\n            const cn = Encoder.getDigit(singleCharacter);\n            return cn >= 0 && cn <= 9;\n        }\n        static appendNumericBytes(content, bits) {\n            const length = content.length;\n            let i = 0;\n            while (i < length) {\n                const num1 = Encoder.getDigit(content.charAt(i));\n                if (i + 2 < length) {\n                    // Encode three numeric letters in ten bits.\n                    const num2 = Encoder.getDigit(content.charAt(i + 1));\n                    const num3 = Encoder.getDigit(content.charAt(i + 2));\n                    bits.appendBits(num1 * 100 + num2 * 10 + num3, 10);\n                    i += 3;\n                }\n                else if (i + 1 < length) {\n                    // Encode two numeric letters in seven bits.\n                    const num2 = Encoder.getDigit(content.charAt(i + 1));\n                    bits.appendBits(num1 * 10 + num2, 7);\n                    i += 2;\n                }\n                else {\n                    // Encode one numeric letter in four bits.\n                    bits.appendBits(num1, 4);\n                    i++;\n                }\n            }\n        }\n        static appendAlphanumericBytes(content, bits) {\n            const length = content.length;\n            let i = 0;\n            while (i < length) {\n                const code1 = Encoder.getAlphanumericCode(content.charCodeAt(i));\n                if (code1 === -1) {\n                    throw new WriterException();\n                }\n                if (i + 1 < length) {\n                    const code2 = Encoder.getAlphanumericCode(content.charCodeAt(i + 1));\n                    if (code2 === -1) {\n                        throw new WriterException();\n                    }\n                    // Encode two alphanumeric letters in 11 bits.\n                    bits.appendBits(code1 * 45 + code2, 11);\n                    i += 2;\n                }\n                else {\n                    // Encode one alphanumeric letter in six bits.\n                    bits.appendBits(code1, 6);\n                    i++;\n                }\n            }\n        }\n        static append8BitBytes(content, bits, encoding) {\n            let bytes;\n            try {\n                bytes = StringEncoding.encode(content, encoding);\n            }\n            catch (uee /*: UnsupportedEncodingException*/) {\n                throw new WriterException(uee);\n            }\n            for (let i = 0, length = bytes.length; i !== length; i++) {\n                const b = bytes[i];\n                bits.appendBits(b, 8);\n            }\n        }\n        /**\n         * @throws WriterException\n         */\n        static appendKanjiBytes(content, bits) {\n            let bytes;\n            try {\n                bytes = StringEncoding.encode(content, CharacterSetECI.SJIS);\n            }\n            catch (uee /*: UnsupportedEncodingException*/) {\n                throw new WriterException(uee);\n            }\n            const length = bytes.length;\n            for (let i = 0; i < length; i += 2) {\n                const byte1 = bytes[i] & 0xFF;\n                const byte2 = bytes[i + 1] & 0xFF;\n                const code = ((byte1 << 8) & 0xFFFFFFFF) | byte2;\n                let subtracted = -1;\n                if (code >= 0x8140 && code <= 0x9ffc) {\n                    subtracted = code - 0x8140;\n                }\n                else if (code >= 0xe040 && code <= 0xebbf) {\n                    subtracted = code - 0xc140;\n                }\n                if (subtracted === -1) {\n                    throw new WriterException('Invalid byte sequence');\n                }\n                const encoded = ((subtracted >> 8) * 0xc0) + (subtracted & 0xff);\n                bits.appendBits(encoded, 13);\n            }\n        }\n        static appendECI(eci, bits) {\n            bits.appendBits(Mode$1.ECI.getBits(), 4);\n            // This is correct for values up to 127, which is all we need now.\n            bits.appendBits(eci.getValue(), 8);\n        }\n    }\n    // The original table is defined in the table 5 of JISX0510:2004 (p.19).\n    Encoder.ALPHANUMERIC_TABLE = Int32Array.from([\n        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n        36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,\n        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1,\n        -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,\n        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,\n    ]);\n    Encoder.DEFAULT_BYTE_MODE_ENCODING = CharacterSetECI.UTF8.getName(); // \"ISO-8859-1\"\n\n    /**\n     * @deprecated Moving to @zxing/browser\n     */\n    class BrowserQRCodeSvgWriter {\n        /**\n         * Writes and renders a QRCode SVG element.\n         *\n         * @param contents\n         * @param width\n         * @param height\n         * @param hints\n         */\n        write(contents, width, height, hints = null) {\n            if (contents.length === 0) {\n                throw new IllegalArgumentException('Found empty contents');\n            }\n            // if (format != BarcodeFormat.QR_CODE) {\n            //   throw new IllegalArgumentException(\"Can only encode QR_CODE, but got \" + format)\n            // }\n            if (width < 0 || height < 0) {\n                throw new IllegalArgumentException('Requested dimensions are too small: ' + width + 'x' + height);\n            }\n            let errorCorrectionLevel = ErrorCorrectionLevel.L;\n            let quietZone = BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE;\n            if (hints !== null) {\n                if (undefined !== hints.get(EncodeHintType$1.ERROR_CORRECTION)) {\n                    errorCorrectionLevel = ErrorCorrectionLevel.fromString(hints.get(EncodeHintType$1.ERROR_CORRECTION).toString());\n                }\n                if (undefined !== hints.get(EncodeHintType$1.MARGIN)) {\n                    quietZone = Number.parseInt(hints.get(EncodeHintType$1.MARGIN).toString(), 10);\n                }\n            }\n            const code = Encoder.encode(contents, errorCorrectionLevel, hints);\n            return this.renderResult(code, width, height, quietZone);\n        }\n        /**\n         * Renders the result and then appends it to the DOM.\n         */\n        writeToDom(containerElement, contents, width, height, hints = null) {\n            if (typeof containerElement === 'string') {\n                containerElement = document.querySelector(containerElement);\n            }\n            const svgElement = this.write(contents, width, height, hints);\n            if (containerElement)\n                containerElement.appendChild(svgElement);\n        }\n        /**\n         * Note that the input matrix uses 0 == white, 1 == black.\n         * The output matrix uses 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).\n         */\n        renderResult(code, width /*int*/, height /*int*/, quietZone /*int*/) {\n            const input = code.getMatrix();\n            if (input === null) {\n                throw new IllegalStateException();\n            }\n            const inputWidth = input.getWidth();\n            const inputHeight = input.getHeight();\n            const qrWidth = inputWidth + (quietZone * 2);\n            const qrHeight = inputHeight + (quietZone * 2);\n            const outputWidth = Math.max(width, qrWidth);\n            const outputHeight = Math.max(height, qrHeight);\n            const multiple = Math.min(Math.floor(outputWidth / qrWidth), Math.floor(outputHeight / qrHeight));\n            // Padding includes both the quiet zone and the extra white pixels to accommodate the requested\n            // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.\n            // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will\n            // handle all the padding from 100x100 (the actual QR) up to 200x160.\n            const leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n            const topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n            const svgElement = this.createSVGElement(outputWidth, outputHeight);\n            for (let inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n                // Write the contents of this row of the barcode\n                for (let inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n                    if (input.get(inputX, inputY) === 1) {\n                        const svgRectElement = this.createSvgRectElement(outputX, outputY, multiple, multiple);\n                        svgElement.appendChild(svgRectElement);\n                    }\n                }\n            }\n            return svgElement;\n        }\n        /**\n         * Creates a SVG element.\n         *\n         * @param w SVG's width attribute\n         * @param h SVG's height attribute\n         */\n        createSVGElement(w, h) {\n            const svgElement = document.createElementNS(BrowserQRCodeSvgWriter.SVG_NS, 'svg');\n            svgElement.setAttributeNS(null, 'height', w.toString());\n            svgElement.setAttributeNS(null, 'width', h.toString());\n            return svgElement;\n        }\n        /**\n         * Creates a SVG rect element.\n         *\n         * @param x Element's x coordinate\n         * @param y Element's y coordinate\n         * @param w Element's width attribute\n         * @param h Element's height attribute\n         */\n        createSvgRectElement(x, y, w, h) {\n            const rect = document.createElementNS(BrowserQRCodeSvgWriter.SVG_NS, 'rect');\n            rect.setAttributeNS(null, 'x', x.toString());\n            rect.setAttributeNS(null, 'y', y.toString());\n            rect.setAttributeNS(null, 'height', w.toString());\n            rect.setAttributeNS(null, 'width', h.toString());\n            rect.setAttributeNS(null, 'fill', '#000000');\n            return rect;\n        }\n    }\n    BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE = 4;\n    /**\n     * SVG markup NameSpace\n     */\n    BrowserQRCodeSvgWriter.SVG_NS = 'http://www.w3.org/2000/svg';\n\n    /*import java.util.Map;*/\n    /**\n     * This object renders a QR Code as a BitMatrix 2D array of greyscale values.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class QRCodeWriter {\n        /*@Override*/\n        // public encode(contents: string, format: BarcodeFormat, width: number /*int*/, height: number /*int*/): BitMatrix\n        //     /*throws WriterException */ {\n        //   return encode(contents, format, width, height, null)\n        // }\n        /*@Override*/\n        encode(contents, format, width /*int*/, height /*int*/, hints) {\n            if (contents.length === 0) {\n                throw new IllegalArgumentException('Found empty contents');\n            }\n            if (format !== BarcodeFormat$1.QR_CODE) {\n                throw new IllegalArgumentException('Can only encode QR_CODE, but got ' + format);\n            }\n            if (width < 0 || height < 0) {\n                throw new IllegalArgumentException(`Requested dimensions are too small: ${width}x${height}`);\n            }\n            let errorCorrectionLevel = ErrorCorrectionLevel.L;\n            let quietZone = QRCodeWriter.QUIET_ZONE_SIZE;\n            if (hints !== null) {\n                if (undefined !== hints.get(EncodeHintType$1.ERROR_CORRECTION)) {\n                    errorCorrectionLevel = ErrorCorrectionLevel.fromString(hints.get(EncodeHintType$1.ERROR_CORRECTION).toString());\n                }\n                if (undefined !== hints.get(EncodeHintType$1.MARGIN)) {\n                    quietZone = Number.parseInt(hints.get(EncodeHintType$1.MARGIN).toString(), 10);\n                }\n            }\n            const code = Encoder.encode(contents, errorCorrectionLevel, hints);\n            return QRCodeWriter.renderResult(code, width, height, quietZone);\n        }\n        // Note that the input matrix uses 0 == white, 1 == black, while the output matrix uses\n        // 0 == black, 255 == white (i.e. an 8 bit greyscale bitmap).\n        static renderResult(code, width /*int*/, height /*int*/, quietZone /*int*/) {\n            const input = code.getMatrix();\n            if (input === null) {\n                throw new IllegalStateException();\n            }\n            const inputWidth = input.getWidth();\n            const inputHeight = input.getHeight();\n            const qrWidth = inputWidth + (quietZone * 2);\n            const qrHeight = inputHeight + (quietZone * 2);\n            const outputWidth = Math.max(width, qrWidth);\n            const outputHeight = Math.max(height, qrHeight);\n            const multiple = Math.min(Math.floor(outputWidth / qrWidth), Math.floor(outputHeight / qrHeight));\n            // Padding includes both the quiet zone and the extra white pixels to accommodate the requested\n            // dimensions. For example, if input is 25x25 the QR will be 33x33 including the quiet zone.\n            // If the requested size is 200x160, the multiple will be 4, for a QR of 132x132. These will\n            // handle all the padding from 100x100 (the actual QR) up to 200x160.\n            const leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n            const topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n            const output = new BitMatrix(outputWidth, outputHeight);\n            for (let inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n                // Write the contents of this row of the barcode\n                for (let inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n                    if (input.get(inputX, inputY) === 1) {\n                        output.setRegion(outputX, outputY, multiple, multiple);\n                    }\n                }\n            }\n            return output;\n        }\n    }\n    QRCodeWriter.QUIET_ZONE_SIZE = 4;\n\n    /*import java.util.Map;*/\n    /**\n     * This is a factory class which finds the appropriate Writer subclass for the BarcodeFormat\n     * requested and encodes the barcode with the supplied contents.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class MultiFormatWriter {\n        /*@Override*/\n        // public encode(contents: string,\n        //                         format: BarcodeFormat,\n        //                         width: number /*int*/,\n        //                         height: number /*int*/): BitMatrix /*throws WriterException */ {\n        //   return encode(contents, format, width, height, null)\n        // }\n        /*@Override*/\n        encode(contents, format, width /*int*/, height /*int*/, hints) {\n            let writer;\n            switch (format) {\n                // case BarcodeFormat.EAN_8:\n                //   writer = new EAN8Writer()\n                //   break\n                // case BarcodeFormat.UPC_E:\n                //   writer = new UPCEWriter()\n                //   break\n                // case BarcodeFormat.EAN_13:\n                //   writer = new EAN13Writer()\n                //   break\n                // case BarcodeFormat.UPC_A:\n                //   writer = new UPCAWriter()\n                //   break\n                case BarcodeFormat$1.QR_CODE:\n                    writer = new QRCodeWriter();\n                    break;\n                // case BarcodeFormat.CODE_39:\n                //   writer = new Code39Writer()\n                //   break\n                // case BarcodeFormat.CODE_93:\n                //   writer = new Code93Writer()\n                //   break\n                // case BarcodeFormat.CODE_128:\n                //   writer = new Code128Writer()\n                //   break\n                // case BarcodeFormat.ITF:\n                //   writer = new ITFWriter()\n                //   break\n                // case BarcodeFormat.PDF_417:\n                //   writer = new PDF417Writer()\n                //   break\n                // case BarcodeFormat.CODABAR:\n                //   writer = new CodaBarWriter()\n                //   break\n                // case BarcodeFormat.DATA_MATRIX:\n                //   writer = new DataMatrixWriter()\n                //   break\n                // case BarcodeFormat.AZTEC:\n                //   writer = new AztecWriter()\n                //   break\n                default:\n                    throw new IllegalArgumentException('No encoder available for format ' + format);\n            }\n            return writer.encode(contents, format, width, height, hints);\n        }\n    }\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This object extends LuminanceSource around an array of YUV data returned from the camera driver,\n     * with the option to crop to a rectangle within the full data. This can be used to exclude\n     * superfluous pixels around the perimeter and speed up decoding.\n     *\n     * It works for any pixel format where the Y channel is planar and appears first, including\n     * YCbCr_420_SP and YCbCr_422_SP.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     */\n    class PlanarYUVLuminanceSource extends LuminanceSource {\n        constructor(yuvData, dataWidth /*int*/, dataHeight /*int*/, left /*int*/, top /*int*/, width /*int*/, height /*int*/, reverseHorizontal) {\n            super(width, height);\n            this.yuvData = yuvData;\n            this.dataWidth = dataWidth;\n            this.dataHeight = dataHeight;\n            this.left = left;\n            this.top = top;\n            if (left + width > dataWidth || top + height > dataHeight) {\n                throw new IllegalArgumentException('Crop rectangle does not fit within image data.');\n            }\n            if (reverseHorizontal) {\n                this.reverseHorizontal(width, height);\n            }\n        }\n        /*@Override*/\n        getRow(y /*int*/, row) {\n            if (y < 0 || y >= this.getHeight()) {\n                throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n            }\n            const width = this.getWidth();\n            if (row === null || row === undefined || row.length < width) {\n                row = new Uint8ClampedArray(width);\n            }\n            const offset = (y + this.top) * this.dataWidth + this.left;\n            System.arraycopy(this.yuvData, offset, row, 0, width);\n            return row;\n        }\n        /*@Override*/\n        getMatrix() {\n            const width = this.getWidth();\n            const height = this.getHeight();\n            // If the caller asks for the entire underlying image, save the copy and give them the\n            // original data. The docs specifically warn that result.length must be ignored.\n            if (width === this.dataWidth && height === this.dataHeight) {\n                return this.yuvData;\n            }\n            const area = width * height;\n            const matrix = new Uint8ClampedArray(area);\n            let inputOffset = this.top * this.dataWidth + this.left;\n            // If the width matches the full width of the underlying data, perform a single copy.\n            if (width === this.dataWidth) {\n                System.arraycopy(this.yuvData, inputOffset, matrix, 0, area);\n                return matrix;\n            }\n            // Otherwise copy one cropped row at a time.\n            for (let y = 0; y < height; y++) {\n                const outputOffset = y * width;\n                System.arraycopy(this.yuvData, inputOffset, matrix, outputOffset, width);\n                inputOffset += this.dataWidth;\n            }\n            return matrix;\n        }\n        /*@Override*/\n        isCropSupported() {\n            return true;\n        }\n        /*@Override*/\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            return new PlanarYUVLuminanceSource(this.yuvData, this.dataWidth, this.dataHeight, this.left + left, this.top + top, width, height, false);\n        }\n        renderThumbnail() {\n            const width = this.getWidth() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n            const height = this.getHeight() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n            const pixels = new Int32Array(width * height);\n            const yuv = this.yuvData;\n            let inputOffset = this.top * this.dataWidth + this.left;\n            for (let y = 0; y < height; y++) {\n                const outputOffset = y * width;\n                for (let x = 0; x < width; x++) {\n                    const grey = yuv[inputOffset + x * PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR] & 0xff;\n                    pixels[outputOffset + x] = 0xFF000000 | (grey * 0x00010101);\n                }\n                inputOffset += this.dataWidth * PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n            }\n            return pixels;\n        }\n        /**\n         * @return width of image from {@link #renderThumbnail()}\n         */\n        getThumbnailWidth() {\n            return this.getWidth() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n        }\n        /**\n         * @return height of image from {@link #renderThumbnail()}\n         */\n        getThumbnailHeight() {\n            return this.getHeight() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n        }\n        reverseHorizontal(width /*int*/, height /*int*/) {\n            const yuvData = this.yuvData;\n            for (let y = 0, rowStart = this.top * this.dataWidth + this.left; y < height; y++, rowStart += this.dataWidth) {\n                const middle = rowStart + width / 2;\n                for (let x1 = rowStart, x2 = rowStart + width - 1; x1 < middle; x1++, x2--) {\n                    const temp = yuvData[x1];\n                    yuvData[x1] = yuvData[x2];\n                    yuvData[x2] = temp;\n                }\n            }\n        }\n        invert() {\n            return new InvertedLuminanceSource(this);\n        }\n    }\n    PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR = 2;\n\n    /*\n     * Copyright 2009 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This class is used to help decode images from files which arrive as RGB data from\n     * an ARGB pixel array. It does not support rotation.\n     *\n     * @author dswitkin@google.com (Daniel Switkin)\n     * @author Betaminos\n     */\n    class RGBLuminanceSource extends LuminanceSource {\n        constructor(luminances, width /*int*/, height /*int*/, dataWidth /*int*/, dataHeight /*int*/, left /*int*/, top /*int*/) {\n            super(width, height);\n            this.dataWidth = dataWidth;\n            this.dataHeight = dataHeight;\n            this.left = left;\n            this.top = top;\n            if (luminances.BYTES_PER_ELEMENT === 4) { // Int32Array\n                const size = width * height;\n                const luminancesUint8Array = new Uint8ClampedArray(size);\n                for (let offset = 0; offset < size; offset++) {\n                    const pixel = luminances[offset];\n                    const r = (pixel >> 16) & 0xff; // red\n                    const g2 = (pixel >> 7) & 0x1fe; // 2 * green\n                    const b = pixel & 0xff; // blue\n                    // Calculate green-favouring average cheaply\n                    luminancesUint8Array[offset] = /*(byte) */ ((r + g2 + b) / 4) & 0xFF;\n                }\n                this.luminances = luminancesUint8Array;\n            }\n            else {\n                this.luminances = luminances;\n            }\n            if (undefined === dataWidth) {\n                this.dataWidth = width;\n            }\n            if (undefined === dataHeight) {\n                this.dataHeight = height;\n            }\n            if (undefined === left) {\n                this.left = 0;\n            }\n            if (undefined === top) {\n                this.top = 0;\n            }\n            if (this.left + width > this.dataWidth || this.top + height > this.dataHeight) {\n                throw new IllegalArgumentException('Crop rectangle does not fit within image data.');\n            }\n        }\n        /*@Override*/\n        getRow(y /*int*/, row) {\n            if (y < 0 || y >= this.getHeight()) {\n                throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n            }\n            const width = this.getWidth();\n            if (row === null || row === undefined || row.length < width) {\n                row = new Uint8ClampedArray(width);\n            }\n            const offset = (y + this.top) * this.dataWidth + this.left;\n            System.arraycopy(this.luminances, offset, row, 0, width);\n            return row;\n        }\n        /*@Override*/\n        getMatrix() {\n            const width = this.getWidth();\n            const height = this.getHeight();\n            // If the caller asks for the entire underlying image, save the copy and give them the\n            // original data. The docs specifically warn that result.length must be ignored.\n            if (width === this.dataWidth && height === this.dataHeight) {\n                return this.luminances;\n            }\n            const area = width * height;\n            const matrix = new Uint8ClampedArray(area);\n            let inputOffset = this.top * this.dataWidth + this.left;\n            // If the width matches the full width of the underlying data, perform a single copy.\n            if (width === this.dataWidth) {\n                System.arraycopy(this.luminances, inputOffset, matrix, 0, area);\n                return matrix;\n            }\n            // Otherwise copy one cropped row at a time.\n            for (let y = 0; y < height; y++) {\n                const outputOffset = y * width;\n                System.arraycopy(this.luminances, inputOffset, matrix, outputOffset, width);\n                inputOffset += this.dataWidth;\n            }\n            return matrix;\n        }\n        /*@Override*/\n        isCropSupported() {\n            return true;\n        }\n        /*@Override*/\n        crop(left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n            return new RGBLuminanceSource(this.luminances, width, height, this.dataWidth, this.dataHeight, this.left + left, this.top + top);\n        }\n        invert() {\n            return new InvertedLuminanceSource(this);\n        }\n    }\n\n    /**\n     * Just to make a shortcut between Java code and TS code.\n     */\n    class Charset extends CharacterSetECI {\n        static forName(name) {\n            return this.getCharacterSetECIByName(name);\n        }\n    }\n\n    /**\n     * Just to make a shortcut between Java code and TS code.\n     */\n    class StandardCharsets {\n    }\n    StandardCharsets.ISO_8859_1 = CharacterSetECI.ISO8859_1;\n\n    /*\n    * Copyright 2013 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * Aztec 2D code representation\n     *\n     * @author Rustam Abdullaev\n     */\n    /*public final*/ class AztecCode {\n        /**\n         * @return {@code true} if compact instead of full mode\n         */\n        isCompact() {\n            return this.compact;\n        }\n        setCompact(compact) {\n            this.compact = compact;\n        }\n        /**\n         * @return size in pixels (width and height)\n         */\n        getSize() {\n            return this.size;\n        }\n        setSize(size) {\n            this.size = size;\n        }\n        /**\n         * @return number of levels\n         */\n        getLayers() {\n            return this.layers;\n        }\n        setLayers(layers) {\n            this.layers = layers;\n        }\n        /**\n         * @return number of data codewords\n         */\n        getCodeWords() {\n            return this.codeWords;\n        }\n        setCodeWords(codeWords) {\n            this.codeWords = codeWords;\n        }\n        /**\n         * @return the symbol image\n         */\n        getMatrix() {\n            return this.matrix;\n        }\n        setMatrix(matrix) {\n            this.matrix = matrix;\n        }\n    }\n\n    class Collections {\n        /**\n         * The singletonList(T) method is used to return an immutable list containing only the specified object.\n         */\n        static singletonList(item) {\n            return [item];\n        }\n        /**\n         * The min(Collection<? extends T>, Comparator<? super T>) method is used to return the minimum element of the given collection, according to the order induced by the specified comparator.\n         */\n        static min(collection, comparator) {\n            return collection.sort(comparator)[0];\n        }\n    }\n\n    /*\n    * Copyright 2013 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    class Token {\n        constructor(previous) {\n            this.previous = previous;\n        }\n        getPrevious() {\n            return this.previous;\n        }\n    }\n\n    /*\n    * Copyright 2013 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /*final*/ class SimpleToken extends Token {\n        constructor(previous, value, bitCount) {\n            super(previous);\n            this.value = value;\n            this.bitCount = bitCount;\n        }\n        /**\n         * @Override\n         */\n        appendTo(bitArray, text) {\n            bitArray.appendBits(this.value, this.bitCount);\n        }\n        add(value, bitCount) {\n            return new SimpleToken(this, value, bitCount);\n        }\n        addBinaryShift(start, byteCount) {\n            // no-op can't binary shift a simple token\n            console.warn('addBinaryShift on SimpleToken, this simply returns a copy of this token');\n            return new SimpleToken(this, start, byteCount);\n        }\n        /**\n         * @Override\n         */\n        toString() {\n            let value = this.value & ((1 << this.bitCount) - 1);\n            value |= 1 << this.bitCount;\n            return '<' + Integer.toBinaryString(value | (1 << this.bitCount)).substring(1) + '>';\n        }\n    }\n\n    /*\n    * Copyright 2013 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /*final*/ class BinaryShiftToken extends SimpleToken {\n        constructor(previous, binaryShiftStart, binaryShiftByteCount) {\n            super(previous, 0, 0);\n            this.binaryShiftStart = binaryShiftStart;\n            this.binaryShiftByteCount = binaryShiftByteCount;\n        }\n        /**\n         * @Override\n         */\n        appendTo(bitArray, text) {\n            for (let i = 0; i < this.binaryShiftByteCount; i++) {\n                if (i === 0 || (i === 31 && this.binaryShiftByteCount <= 62)) {\n                    // We need a header before the first character, and before\n                    // character 31 when the total byte code is <= 62\n                    bitArray.appendBits(31, 5); // BINARY_SHIFT\n                    if (this.binaryShiftByteCount > 62) {\n                        bitArray.appendBits(this.binaryShiftByteCount - 31, 16);\n                    }\n                    else if (i === 0) {\n                        // 1 <= binaryShiftByteCode <= 62\n                        bitArray.appendBits(Math.min(this.binaryShiftByteCount, 31), 5);\n                    }\n                    else {\n                        // 32 <= binaryShiftCount <= 62 and i == 31\n                        bitArray.appendBits(this.binaryShiftByteCount - 31, 5);\n                    }\n                }\n                bitArray.appendBits(text[this.binaryShiftStart + i], 8);\n            }\n        }\n        addBinaryShift(start, byteCount) {\n            // int bitCount = (byteCount * 8) + (byteCount <= 31 ? 10 : byteCount <= 62 ? 20 : 21);\n            return new BinaryShiftToken(this, start, byteCount);\n        }\n        /**\n         * @Override\n         */\n        toString() {\n            return '<' + this.binaryShiftStart + '::' + (this.binaryShiftStart + this.binaryShiftByteCount - 1) + '>';\n        }\n    }\n\n    function addBinaryShift(token, start, byteCount) {\n        // int bitCount = (byteCount * 8) + (byteCount <= 31 ? 10 : byteCount <= 62 ? 20 : 21);\n        return new BinaryShiftToken(token, start, byteCount);\n    }\n    function add(token, value, bitCount) {\n        return new SimpleToken(token, value, bitCount);\n    }\n\n    const /*final*/ MODE_NAMES = [\n        'UPPER',\n        'LOWER',\n        'DIGIT',\n        'MIXED',\n        'PUNCT'\n    ];\n    const /*final*/ MODE_UPPER = 0; // 5 bits\n    const /*final*/ MODE_LOWER = 1; // 5 bits\n    const /*final*/ MODE_DIGIT = 2; // 4 bits\n    const /*final*/ MODE_MIXED = 3; // 5 bits\n    const /*final*/ MODE_PUNCT = 4; // 5 bits\n    const EMPTY_TOKEN = new SimpleToken(null, 0, 0);\n\n    // The Latch Table shows, for each pair of Modes, the optimal method for\n    // getting from one mode to another.  In the worst possible case, this can\n    // be up to 14 bits.  In the best possible case, we are already there!\n    // The high half-word of each entry gives the number of bits.\n    // The low half-word of each entry are the actual bits necessary to change\n    const LATCH_TABLE = [\n        Int32Array.from([\n            0,\n            (5 << 16) + 28,\n            (5 << 16) + 30,\n            (5 << 16) + 29,\n            (10 << 16) + (29 << 5) + 30 // UPPER -> MIXED -> PUNCT\n        ]),\n        Int32Array.from([\n            (9 << 16) + (30 << 4) + 14,\n            0,\n            (5 << 16) + 30,\n            (5 << 16) + 29,\n            (10 << 16) + (29 << 5) + 30 // LOWER -> MIXED -> PUNCT\n        ]),\n        Int32Array.from([\n            (4 << 16) + 14,\n            (9 << 16) + (14 << 5) + 28,\n            0,\n            (9 << 16) + (14 << 5) + 29,\n            (14 << 16) + (14 << 10) + (29 << 5) + 30\n            // DIGIT -> UPPER -> MIXED -> PUNCT\n        ]),\n        Int32Array.from([\n            (5 << 16) + 29,\n            (5 << 16) + 28,\n            (10 << 16) + (29 << 5) + 30,\n            0,\n            (5 << 16) + 30 // MIXED -> PUNCT\n        ]),\n        Int32Array.from([\n            (5 << 16) + 31,\n            (10 << 16) + (31 << 5) + 28,\n            (10 << 16) + (31 << 5) + 30,\n            (10 << 16) + (31 << 5) + 29,\n            0\n        ])\n    ];\n\n    function static_SHIFT_TABLE(SHIFT_TABLE) {\n        for (let table /*Int32Array*/ of SHIFT_TABLE) {\n            Arrays.fill(table, -1);\n        }\n        SHIFT_TABLE[MODE_UPPER][MODE_PUNCT] = 0;\n        SHIFT_TABLE[MODE_LOWER][MODE_PUNCT] = 0;\n        SHIFT_TABLE[MODE_LOWER][MODE_UPPER] = 28;\n        SHIFT_TABLE[MODE_MIXED][MODE_PUNCT] = 0;\n        SHIFT_TABLE[MODE_DIGIT][MODE_PUNCT] = 0;\n        SHIFT_TABLE[MODE_DIGIT][MODE_UPPER] = 15;\n        return SHIFT_TABLE;\n    }\n    const /*final*/ SHIFT_TABLE = static_SHIFT_TABLE(Arrays.createInt32Array(6, 6)); // mode shift codes, per table\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * State represents all information about a sequence necessary to generate the current output.\n     * Note that a state is immutable.\n     */\n    /*final*/ class State {\n        constructor(token, mode, binaryBytes, bitCount) {\n            this.token = token;\n            this.mode = mode;\n            this.binaryShiftByteCount = binaryBytes;\n            this.bitCount = bitCount;\n            // Make sure we match the token\n            // int binaryShiftBitCount = (binaryShiftByteCount * 8) +\n            //    (binaryShiftByteCount === 0 ? 0 :\n            //     binaryShiftByteCount <= 31 ? 10 :\n            //     binaryShiftByteCount <= 62 ? 20 : 21);\n            // assert this.bitCount === token.getTotalBitCount() + binaryShiftBitCount;\n        }\n        getMode() {\n            return this.mode;\n        }\n        getToken() {\n            return this.token;\n        }\n        getBinaryShiftByteCount() {\n            return this.binaryShiftByteCount;\n        }\n        getBitCount() {\n            return this.bitCount;\n        }\n        // Create a new state representing this state with a latch to a (not\n        // necessary different) mode, and then a code.\n        latchAndAppend(mode, value) {\n            // assert binaryShiftByteCount === 0;\n            let bitCount = this.bitCount;\n            let token = this.token;\n            if (mode !== this.mode) {\n                let latch = LATCH_TABLE[this.mode][mode];\n                token = add(token, latch & 0xffff, latch >> 16);\n                bitCount += latch >> 16;\n            }\n            let latchModeBitCount = mode === MODE_DIGIT ? 4 : 5;\n            token = add(token, value, latchModeBitCount);\n            return new State(token, mode, 0, bitCount + latchModeBitCount);\n        }\n        // Create a new state representing this state, with a temporary shift\n        // to a different mode to output a single value.\n        shiftAndAppend(mode, value) {\n            // assert binaryShiftByteCount === 0 && this.mode !== mode;\n            let token = this.token;\n            let thisModeBitCount = this.mode === MODE_DIGIT ? 4 : 5;\n            // Shifts exist only to UPPER and PUNCT, both with tokens size 5.\n            token = add(token, SHIFT_TABLE[this.mode][mode], thisModeBitCount);\n            token = add(token, value, 5);\n            return new State(token, this.mode, 0, this.bitCount + thisModeBitCount + 5);\n        }\n        // Create a new state representing this state, but an additional character\n        // output in Binary Shift mode.\n        addBinaryShiftChar(index) {\n            let token = this.token;\n            let mode = this.mode;\n            let bitCount = this.bitCount;\n            if (this.mode === MODE_PUNCT || this.mode === MODE_DIGIT) {\n                // assert binaryShiftByteCount === 0;\n                let latch = LATCH_TABLE[mode][MODE_UPPER];\n                token = add(token, latch & 0xffff, latch >> 16);\n                bitCount += latch >> 16;\n                mode = MODE_UPPER;\n            }\n            let deltaBitCount = this.binaryShiftByteCount === 0 || this.binaryShiftByteCount === 31\n                ? 18\n                : this.binaryShiftByteCount === 62\n                    ? 9\n                    : 8;\n            let result = new State(token, mode, this.binaryShiftByteCount + 1, bitCount + deltaBitCount);\n            if (result.binaryShiftByteCount === 2047 + 31) {\n                // The string is as long as it's allowed to be.  We should end it.\n                result = result.endBinaryShift(index + 1);\n            }\n            return result;\n        }\n        // Create the state identical to this one, but we are no longer in\n        // Binary Shift mode.\n        endBinaryShift(index) {\n            if (this.binaryShiftByteCount === 0) {\n                return this;\n            }\n            let token = this.token;\n            token = addBinaryShift(token, index - this.binaryShiftByteCount, this.binaryShiftByteCount);\n            // assert token.getTotalBitCount() === this.bitCount;\n            return new State(token, this.mode, 0, this.bitCount);\n        }\n        // Returns true if \"this\" state is better (equal: or) to be in than \"that\"\n        // state under all possible circumstances.\n        isBetterThanOrEqualTo(other) {\n            let newModeBitCount = this.bitCount + (LATCH_TABLE[this.mode][other.mode] >> 16);\n            if (this.binaryShiftByteCount < other.binaryShiftByteCount) {\n                // add additional B/S encoding cost of other, if any\n                newModeBitCount +=\n                    State.calculateBinaryShiftCost(other) -\n                        State.calculateBinaryShiftCost(this);\n            }\n            else if (this.binaryShiftByteCount > other.binaryShiftByteCount &&\n                other.binaryShiftByteCount > 0) {\n                // maximum possible additional cost (it: h)\n                newModeBitCount += 10;\n            }\n            return newModeBitCount <= other.bitCount;\n        }\n        toBitArray(text) {\n            // Reverse the tokens, so that they are in the order that they should\n            // be output\n            let symbols = [];\n            for (let token = this.endBinaryShift(text.length).token; token !== null; token = token.getPrevious()) {\n                symbols.unshift(token);\n            }\n            let bitArray = new BitArray();\n            // Add each token to the result.\n            for (const symbol of symbols) {\n                symbol.appendTo(bitArray, text);\n            }\n            // assert bitArray.getSize() === this.bitCount;\n            return bitArray;\n        }\n        /**\n         * @Override\n         */\n        toString() {\n            return StringUtils.format('%s bits=%d bytes=%d', MODE_NAMES[this.mode], this.bitCount, this.binaryShiftByteCount);\n        }\n        static calculateBinaryShiftCost(state) {\n            if (state.binaryShiftByteCount > 62) {\n                return 21; // B/S with extended length\n            }\n            if (state.binaryShiftByteCount > 31) {\n                return 20; // two B/S\n            }\n            if (state.binaryShiftByteCount > 0) {\n                return 10; // one B/S\n            }\n            return 0;\n        }\n    }\n    State.INITIAL_STATE = new State(EMPTY_TOKEN, MODE_UPPER, 0, 0);\n\n    function static_CHAR_MAP(CHAR_MAP) {\n        const spaceCharCode = StringUtils.getCharCode(' ');\n        const pointCharCode = StringUtils.getCharCode('.');\n        const commaCharCode = StringUtils.getCharCode(',');\n        CHAR_MAP[MODE_UPPER][spaceCharCode] = 1;\n        const zUpperCharCode = StringUtils.getCharCode('Z');\n        const aUpperCharCode = StringUtils.getCharCode('A');\n        for (let c = aUpperCharCode; c <= zUpperCharCode; c++) {\n            CHAR_MAP[MODE_UPPER][c] = c - aUpperCharCode + 2;\n        }\n        CHAR_MAP[MODE_LOWER][spaceCharCode] = 1;\n        const zLowerCharCode = StringUtils.getCharCode('z');\n        const aLowerCharCode = StringUtils.getCharCode('a');\n        for (let c = aLowerCharCode; c <= zLowerCharCode; c++) {\n            CHAR_MAP[MODE_LOWER][c] = c - aLowerCharCode + 2;\n        }\n        CHAR_MAP[MODE_DIGIT][spaceCharCode] = 1;\n        const nineCharCode = StringUtils.getCharCode('9');\n        const zeroCharCode = StringUtils.getCharCode('0');\n        for (let c = zeroCharCode; c <= nineCharCode; c++) {\n            CHAR_MAP[MODE_DIGIT][c] = c - zeroCharCode + 2;\n        }\n        CHAR_MAP[MODE_DIGIT][commaCharCode] = 12;\n        CHAR_MAP[MODE_DIGIT][pointCharCode] = 13;\n        const mixedTable = [\n            '\\x00',\n            ' ',\n            '\\x01',\n            '\\x02',\n            '\\x03',\n            '\\x04',\n            '\\x05',\n            '\\x06',\n            '\\x07',\n            '\\b',\n            '\\t',\n            '\\n',\n            '\\x0b',\n            '\\f',\n            '\\r',\n            '\\x1b',\n            '\\x1c',\n            '\\x1d',\n            '\\x1e',\n            '\\x1f',\n            '@',\n            '\\\\',\n            '^',\n            '_',\n            '`',\n            '|',\n            '~',\n            '\\x7f'\n        ];\n        for (let i = 0; i < mixedTable.length; i++) {\n            CHAR_MAP[MODE_MIXED][StringUtils.getCharCode(mixedTable[i])] = i;\n        }\n        const punctTable = [\n            '\\x00',\n            '\\r',\n            '\\x00',\n            '\\x00',\n            '\\x00',\n            '\\x00',\n            '!',\n            '\\'',\n            '#',\n            '$',\n            '%',\n            '&',\n            '\\'',\n            '(',\n            ')',\n            '*',\n            '+',\n            ',',\n            '-',\n            '.',\n            '/',\n            ':',\n            ';',\n            '<',\n            '=',\n            '>',\n            '?',\n            '[',\n            ']',\n            '{',\n            '}'\n        ];\n        for (let i = 0; i < punctTable.length; i++) {\n            if (StringUtils.getCharCode(punctTable[i]) > 0) {\n                CHAR_MAP[MODE_PUNCT][StringUtils.getCharCode(punctTable[i])] = i;\n            }\n        }\n        return CHAR_MAP;\n    }\n    const CHAR_MAP = static_CHAR_MAP(Arrays.createInt32Array(5, 256));\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    /**\n     * This produces nearly optimal encodings of text into the first-level of\n     * encoding used by Aztec code.\n     *\n     * It uses a dynamic algorithm.  For each prefix of the string, it determines\n     * a set of encodings that could lead to this prefix.  We repeatedly add a\n     * character and generate a new set of optimal encodings until we have read\n     * through the entire input.\n     *\n     * @author Frank Yellin\n     * @author Rustam Abdullaev\n     */\n    /*public final*/ class HighLevelEncoder {\n        constructor(text) {\n            this.text = text;\n        }\n        /**\n         * @return text represented by this encoder encoded as a {@link BitArray}\n         */\n        encode() {\n            const spaceCharCode = StringUtils.getCharCode(' ');\n            const lineBreakCharCode = StringUtils.getCharCode('\\n');\n            let states = Collections.singletonList(State.INITIAL_STATE);\n            for (let index = 0; index < this.text.length; index++) {\n                let pairCode;\n                let nextChar = index + 1 < this.text.length ? this.text[index + 1] : 0;\n                switch (this.text[index]) {\n                    case StringUtils.getCharCode('\\r'):\n                        pairCode = nextChar === lineBreakCharCode ? 2 : 0;\n                        break;\n                    case StringUtils.getCharCode('.'):\n                        pairCode = nextChar === spaceCharCode ? 3 : 0;\n                        break;\n                    case StringUtils.getCharCode(','):\n                        pairCode = nextChar === spaceCharCode ? 4 : 0;\n                        break;\n                    case StringUtils.getCharCode(':'):\n                        pairCode = nextChar === spaceCharCode ? 5 : 0;\n                        break;\n                    default:\n                        pairCode = 0;\n                }\n                if (pairCode > 0) {\n                    // We have one of the four special PUNCT pairs.  Treat them specially.\n                    // Get a new set of states for the two new characters.\n                    states = HighLevelEncoder.updateStateListForPair(states, index, pairCode);\n                    index++;\n                }\n                else {\n                    // Get a new set of states for the new character.\n                    states = this.updateStateListForChar(states, index);\n                }\n            }\n            // We are left with a set of states.  Find the shortest one.\n            const minState = Collections.min(states, (a, b) => {\n                return a.getBitCount() - b.getBitCount();\n            });\n            // Convert it to a bit array, and return.\n            return minState.toBitArray(this.text);\n        }\n        // We update a set of states for a new character by updating each state\n        // for the new character, merging the results, and then removing the\n        // non-optimal states.\n        updateStateListForChar(states, index) {\n            const result = [];\n            for (let state /*State*/ of states) {\n                this.updateStateForChar(state, index, result);\n            }\n            return HighLevelEncoder.simplifyStates(result);\n        }\n        // Return a set of states that represent the possible ways of updating this\n        // state for the next character.  The resulting set of states are added to\n        // the \"result\" list.\n        updateStateForChar(state, index, result) {\n            let ch = (this.text[index] & 0xff);\n            let charInCurrentTable = CHAR_MAP[state.getMode()][ch] > 0;\n            let stateNoBinary = null;\n            for (let mode /*int*/ = 0; mode <= MODE_PUNCT; mode++) {\n                let charInMode = CHAR_MAP[mode][ch];\n                if (charInMode > 0) {\n                    if (stateNoBinary == null) {\n                        // Only create stateNoBinary the first time it's required.\n                        stateNoBinary = state.endBinaryShift(index);\n                    }\n                    // Try generating the character by latching to its mode\n                    if (!charInCurrentTable ||\n                        mode === state.getMode() ||\n                        mode === MODE_DIGIT) {\n                        // If the character is in the current table, we don't want to latch to\n                        // any other mode except possibly digit (which uses only 4 bits).  Any\n                        // other latch would be equally successful *after* this character, and\n                        // so wouldn't save any bits.\n                        const latchState = stateNoBinary.latchAndAppend(mode, charInMode);\n                        result.push(latchState);\n                    }\n                    // Try generating the character by switching to its mode.\n                    if (!charInCurrentTable &&\n                        SHIFT_TABLE[state.getMode()][mode] >= 0) {\n                        // It never makes sense to temporarily shift to another mode if the\n                        // character exists in the current mode.  That can never save bits.\n                        const shiftState = stateNoBinary.shiftAndAppend(mode, charInMode);\n                        result.push(shiftState);\n                    }\n                }\n            }\n            if (state.getBinaryShiftByteCount() > 0 ||\n                CHAR_MAP[state.getMode()][ch] === 0) {\n                // It's never worthwhile to go into binary shift mode if you're not already\n                // in binary shift mode, and the character exists in your current mode.\n                // That can never save bits over just outputting the char in the current mode.\n                let binaryState = state.addBinaryShiftChar(index);\n                result.push(binaryState);\n            }\n        }\n        static updateStateListForPair(states, index, pairCode) {\n            const result = [];\n            for (let state /*State*/ of states) {\n                this.updateStateForPair(state, index, pairCode, result);\n            }\n            return this.simplifyStates(result);\n        }\n        static updateStateForPair(state, index, pairCode, result) {\n            let stateNoBinary = state.endBinaryShift(index);\n            // Possibility 1.  Latch to C.MODE_PUNCT, and then append this code\n            result.push(stateNoBinary.latchAndAppend(MODE_PUNCT, pairCode));\n            if (state.getMode() !== MODE_PUNCT) {\n                // Possibility 2.  Shift to C.MODE_PUNCT, and then append this code.\n                // Every state except C.MODE_PUNCT (handled above) can shift\n                result.push(stateNoBinary.shiftAndAppend(MODE_PUNCT, pairCode));\n            }\n            if (pairCode === 3 || pairCode === 4) {\n                // both characters are in DIGITS.  Sometimes better to just add two digits\n                let digitState = stateNoBinary\n                    .latchAndAppend(MODE_DIGIT, 16 - pairCode) // period or comma in DIGIT\n                    .latchAndAppend(MODE_DIGIT, 1); // space in DIGIT\n                result.push(digitState);\n            }\n            if (state.getBinaryShiftByteCount() > 0) {\n                // It only makes sense to do the characters as binary if we're already\n                // in binary mode.\n                let binaryState = state\n                    .addBinaryShiftChar(index)\n                    .addBinaryShiftChar(index + 1);\n                result.push(binaryState);\n            }\n        }\n        static simplifyStates(states) {\n            let result = [];\n            for (const newState of states) {\n                let add = true;\n                for (const oldState of result) {\n                    if (oldState.isBetterThanOrEqualTo(newState)) {\n                        add = false;\n                        break;\n                    }\n                    if (newState.isBetterThanOrEqualTo(oldState)) {\n                        // iterator.remove();\n                        result = result.filter(x => x !== oldState); // remove old state\n                    }\n                }\n                if (add) {\n                    result.push(newState);\n                }\n            }\n            return result;\n        }\n    }\n\n    /*\n     * Copyright 2013 ZXing authors\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     *\n     *      http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     */\n    // package com.google.zxing.aztec.encoder;\n    // import com.google.zxing.common.BitArray;\n    // import com.google.zxing.common.BitMatrix;\n    // import com.google.zxing.common.reedsolomon.GenericGF;\n    // import com.google.zxing.common.reedsolomon.ReedSolomonEncoder;\n    /**\n     * Generates Aztec 2D barcodes.\n     *\n     * @author Rustam Abdullaev\n     */\n    /*public final*/ class Encoder$1 {\n        constructor() {\n        }\n        /**\n         * Encodes the given binary content as an Aztec symbol\n         *\n         * @param data input data string\n         * @return Aztec symbol matrix with metadata\n         */\n        static encodeBytes(data) {\n            return Encoder$1.encode(data, Encoder$1.DEFAULT_EC_PERCENT, Encoder$1.DEFAULT_AZTEC_LAYERS);\n        }\n        /**\n         * Encodes the given binary content as an Aztec symbol\n         *\n         * @param data input data string\n         * @param minECCPercent minimal percentage of error check words (According to ISO/IEC 24778:2008,\n         *                      a minimum of 23% + 3 words is recommended)\n         * @param userSpecifiedLayers if non-zero, a user-specified value for the number of layers\n         * @return Aztec symbol matrix with metadata\n         */\n        static encode(data, minECCPercent, userSpecifiedLayers) {\n            // High-level encode\n            let bits = new HighLevelEncoder(data).encode();\n            // stuff bits and choose symbol size\n            let eccBits = Integer.truncDivision((bits.getSize() * minECCPercent), 100) + 11;\n            let totalSizeBits = bits.getSize() + eccBits;\n            let compact;\n            let layers;\n            let totalBitsInLayer;\n            let wordSize;\n            let stuffedBits;\n            if (userSpecifiedLayers !== Encoder$1.DEFAULT_AZTEC_LAYERS) {\n                compact = userSpecifiedLayers < 0;\n                layers = Math.abs(userSpecifiedLayers);\n                if (layers > (compact ? Encoder$1.MAX_NB_BITS_COMPACT : Encoder$1.MAX_NB_BITS)) {\n                    throw new IllegalArgumentException(StringUtils.format('Illegal value %s for layers', userSpecifiedLayers));\n                }\n                totalBitsInLayer = Encoder$1.totalBitsInLayer(layers, compact);\n                wordSize = Encoder$1.WORD_SIZE[layers];\n                let usableBitsInLayers = totalBitsInLayer - (totalBitsInLayer % wordSize);\n                stuffedBits = Encoder$1.stuffBits(bits, wordSize);\n                if (stuffedBits.getSize() + eccBits > usableBitsInLayers) {\n                    throw new IllegalArgumentException('Data to large for user specified layer');\n                }\n                if (compact && stuffedBits.getSize() > wordSize * 64) {\n                    // Compact format only allows 64 data words, though C4 can hold more words than that\n                    throw new IllegalArgumentException('Data to large for user specified layer');\n                }\n            }\n            else {\n                wordSize = 0;\n                stuffedBits = null;\n                // We look at the possible table sizes in the order Compact1, Compact2, Compact3,\n                // Compact4, Normal4,...  Normal(i) for i < 4 isn't typically used since Compact(i+1)\n                // is the same size, but has more data.\n                for (let i /*int*/ = 0;; i++) {\n                    if (i > Encoder$1.MAX_NB_BITS) {\n                        throw new IllegalArgumentException('Data too large for an Aztec code');\n                    }\n                    compact = i <= 3;\n                    layers = compact ? i + 1 : i;\n                    totalBitsInLayer = Encoder$1.totalBitsInLayer(layers, compact);\n                    if (totalSizeBits > totalBitsInLayer) {\n                        continue;\n                    }\n                    // [Re]stuff the bits if this is the first opportunity, or if the\n                    // wordSize has changed\n                    if (stuffedBits == null || wordSize !== Encoder$1.WORD_SIZE[layers]) {\n                        wordSize = Encoder$1.WORD_SIZE[layers];\n                        stuffedBits = Encoder$1.stuffBits(bits, wordSize);\n                    }\n                    let usableBitsInLayers = totalBitsInLayer - (totalBitsInLayer % wordSize);\n                    if (compact && stuffedBits.getSize() > wordSize * 64) {\n                        // Compact format only allows 64 data words, though C4 can hold more words than that\n                        continue;\n                    }\n                    if (stuffedBits.getSize() + eccBits <= usableBitsInLayers) {\n                        break;\n                    }\n                }\n            }\n            let messageBits = Encoder$1.generateCheckWords(stuffedBits, totalBitsInLayer, wordSize);\n            // generate mode message\n            let messageSizeInWords = stuffedBits.getSize() / wordSize;\n            let modeMessage = Encoder$1.generateModeMessage(compact, layers, messageSizeInWords);\n            // allocate symbol\n            let baseMatrixSize = (compact ? 11 : 14) + layers * 4; // not including alignment lines\n            let alignmentMap = new Int32Array(baseMatrixSize);\n            let matrixSize;\n            if (compact) {\n                // no alignment marks in compact mode, alignmentMap is a no-op\n                matrixSize = baseMatrixSize;\n                for (let i /*int*/ = 0; i < alignmentMap.length; i++) {\n                    alignmentMap[i] = i;\n                }\n            }\n            else {\n                matrixSize = baseMatrixSize + 1 + 2 * Integer.truncDivision((Integer.truncDivision(baseMatrixSize, 2) - 1), 15);\n                let origCenter = Integer.truncDivision(baseMatrixSize, 2);\n                let center = Integer.truncDivision(matrixSize, 2);\n                for (let i /*int*/ = 0; i < origCenter; i++) {\n                    let newOffset = i + Integer.truncDivision(i, 15);\n                    alignmentMap[origCenter - i - 1] = center - newOffset - 1;\n                    alignmentMap[origCenter + i] = center + newOffset + 1;\n                }\n            }\n            let matrix = new BitMatrix(matrixSize);\n            // draw data bits\n            for (let i /*int*/ = 0, rowOffset = 0; i < layers; i++) {\n                let rowSize = (layers - i) * 4 + (compact ? 9 : 12);\n                for (let j /*int*/ = 0; j < rowSize; j++) {\n                    let columnOffset = j * 2;\n                    for (let k /*int*/ = 0; k < 2; k++) {\n                        if (messageBits.get(rowOffset + columnOffset + k)) {\n                            matrix.set(alignmentMap[i * 2 + k], alignmentMap[i * 2 + j]);\n                        }\n                        if (messageBits.get(rowOffset + rowSize * 2 + columnOffset + k)) {\n                            matrix.set(alignmentMap[i * 2 + j], alignmentMap[baseMatrixSize - 1 - i * 2 - k]);\n                        }\n                        if (messageBits.get(rowOffset + rowSize * 4 + columnOffset + k)) {\n                            matrix.set(alignmentMap[baseMatrixSize - 1 - i * 2 - k], alignmentMap[baseMatrixSize - 1 - i * 2 - j]);\n                        }\n                        if (messageBits.get(rowOffset + rowSize * 6 + columnOffset + k)) {\n                            matrix.set(alignmentMap[baseMatrixSize - 1 - i * 2 - j], alignmentMap[i * 2 + k]);\n                        }\n                    }\n                }\n                rowOffset += rowSize * 8;\n            }\n            // draw mode message\n            Encoder$1.drawModeMessage(matrix, compact, matrixSize, modeMessage);\n            // draw alignment marks\n            if (compact) {\n                Encoder$1.drawBullsEye(matrix, Integer.truncDivision(matrixSize, 2), 5);\n            }\n            else {\n                Encoder$1.drawBullsEye(matrix, Integer.truncDivision(matrixSize, 2), 7);\n                for (let i /*int*/ = 0, j = 0; i < Integer.truncDivision(baseMatrixSize, 2) - 1; i += 15, j += 16) {\n                    for (let k /*int*/ = Integer.truncDivision(matrixSize, 2) & 1; k < matrixSize; k += 2) {\n                        matrix.set(Integer.truncDivision(matrixSize, 2) - j, k);\n                        matrix.set(Integer.truncDivision(matrixSize, 2) + j, k);\n                        matrix.set(k, Integer.truncDivision(matrixSize, 2) - j);\n                        matrix.set(k, Integer.truncDivision(matrixSize, 2) + j);\n                    }\n                }\n            }\n            let aztec = new AztecCode();\n            aztec.setCompact(compact);\n            aztec.setSize(matrixSize);\n            aztec.setLayers(layers);\n            aztec.setCodeWords(messageSizeInWords);\n            aztec.setMatrix(matrix);\n            return aztec;\n        }\n        static drawBullsEye(matrix, center, size) {\n            for (let i /*int*/ = 0; i < size; i += 2) {\n                for (let j /*int*/ = center - i; j <= center + i; j++) {\n                    matrix.set(j, center - i);\n                    matrix.set(j, center + i);\n                    matrix.set(center - i, j);\n                    matrix.set(center + i, j);\n                }\n            }\n            matrix.set(center - size, center - size);\n            matrix.set(center - size + 1, center - size);\n            matrix.set(center - size, center - size + 1);\n            matrix.set(center + size, center - size);\n            matrix.set(center + size, center - size + 1);\n            matrix.set(center + size, center + size - 1);\n        }\n        static generateModeMessage(compact, layers, messageSizeInWords) {\n            let modeMessage = new BitArray();\n            if (compact) {\n                modeMessage.appendBits(layers - 1, 2);\n                modeMessage.appendBits(messageSizeInWords - 1, 6);\n                modeMessage = Encoder$1.generateCheckWords(modeMessage, 28, 4);\n            }\n            else {\n                modeMessage.appendBits(layers - 1, 5);\n                modeMessage.appendBits(messageSizeInWords - 1, 11);\n                modeMessage = Encoder$1.generateCheckWords(modeMessage, 40, 4);\n            }\n            return modeMessage;\n        }\n        static drawModeMessage(matrix, compact, matrixSize, modeMessage) {\n            let center = Integer.truncDivision(matrixSize, 2);\n            if (compact) {\n                for (let i /*int*/ = 0; i < 7; i++) {\n                    let offset = center - 3 + i;\n                    if (modeMessage.get(i)) {\n                        matrix.set(offset, center - 5);\n                    }\n                    if (modeMessage.get(i + 7)) {\n                        matrix.set(center + 5, offset);\n                    }\n                    if (modeMessage.get(20 - i)) {\n                        matrix.set(offset, center + 5);\n                    }\n                    if (modeMessage.get(27 - i)) {\n                        matrix.set(center - 5, offset);\n                    }\n                }\n            }\n            else {\n                for (let i /*int*/ = 0; i < 10; i++) {\n                    let offset = center - 5 + i + Integer.truncDivision(i, 5);\n                    if (modeMessage.get(i)) {\n                        matrix.set(offset, center - 7);\n                    }\n                    if (modeMessage.get(i + 10)) {\n                        matrix.set(center + 7, offset);\n                    }\n                    if (modeMessage.get(29 - i)) {\n                        matrix.set(offset, center + 7);\n                    }\n                    if (modeMessage.get(39 - i)) {\n                        matrix.set(center - 7, offset);\n                    }\n                }\n            }\n        }\n        static generateCheckWords(bitArray, totalBits, wordSize) {\n            // bitArray is guaranteed to be a multiple of the wordSize, so no padding needed\n            let messageSizeInWords = bitArray.getSize() / wordSize;\n            let rs = new ReedSolomonEncoder(Encoder$1.getGF(wordSize));\n            let totalWords = Integer.truncDivision(totalBits, wordSize);\n            let messageWords = Encoder$1.bitsToWords(bitArray, wordSize, totalWords);\n            rs.encode(messageWords, totalWords - messageSizeInWords);\n            let startPad = totalBits % wordSize;\n            let messageBits = new BitArray();\n            messageBits.appendBits(0, startPad);\n            for (const messageWord /*: int*/ of Array.from(messageWords)) {\n                messageBits.appendBits(messageWord, wordSize);\n            }\n            return messageBits;\n        }\n        static bitsToWords(stuffedBits, wordSize, totalWords) {\n            let message = new Int32Array(totalWords);\n            let i;\n            let n;\n            for (i = 0, n = stuffedBits.getSize() / wordSize; i < n; i++) {\n                let value = 0;\n                for (let j /*int*/ = 0; j < wordSize; j++) {\n                    value |= stuffedBits.get(i * wordSize + j) ? (1 << wordSize - j - 1) : 0;\n                }\n                message[i] = value;\n            }\n            return message;\n        }\n        static getGF(wordSize) {\n            switch (wordSize) {\n                case 4:\n                    return GenericGF.AZTEC_PARAM;\n                case 6:\n                    return GenericGF.AZTEC_DATA_6;\n                case 8:\n                    return GenericGF.AZTEC_DATA_8;\n                case 10:\n                    return GenericGF.AZTEC_DATA_10;\n                case 12:\n                    return GenericGF.AZTEC_DATA_12;\n                default:\n                    throw new IllegalArgumentException('Unsupported word size ' + wordSize);\n            }\n        }\n        static stuffBits(bits, wordSize) {\n            let out = new BitArray();\n            let n = bits.getSize();\n            let mask = (1 << wordSize) - 2;\n            for (let i /*int*/ = 0; i < n; i += wordSize) {\n                let word = 0;\n                for (let j /*int*/ = 0; j < wordSize; j++) {\n                    if (i + j >= n || bits.get(i + j)) {\n                        word |= 1 << (wordSize - 1 - j);\n                    }\n                }\n                if ((word & mask) === mask) {\n                    out.appendBits(word & mask, wordSize);\n                    i--;\n                }\n                else if ((word & mask) === 0) {\n                    out.appendBits(word | 1, wordSize);\n                    i--;\n                }\n                else {\n                    out.appendBits(word, wordSize);\n                }\n            }\n            return out;\n        }\n        static totalBitsInLayer(layers, compact) {\n            return ((compact ? 88 : 112) + 16 * layers) * layers;\n        }\n    }\n    Encoder$1.DEFAULT_EC_PERCENT = 33; // default minimal percentage of error check words\n    Encoder$1.DEFAULT_AZTEC_LAYERS = 0;\n    Encoder$1.MAX_NB_BITS = 32;\n    Encoder$1.MAX_NB_BITS_COMPACT = 4;\n    Encoder$1.WORD_SIZE = Int32Array.from([\n        4, 6, 6, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,\n        12, 12, 12, 12, 12, 12, 12, 12, 12, 12\n    ]);\n\n    /*\n    * Copyright 2013 ZXing authors\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    *\n    *      http://www.apache.org/licenses/LICENSE-2.0\n    *\n    * Unless required by applicable law or agreed to in writing, software\n    * distributed under the License is distributed on an \"AS IS\" BASIS,\n    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    * See the License for the specific language governing permissions and\n    * limitations under the License.\n    */\n    /**\n     * Renders an Aztec code as a {@link BitMatrix}.\n     */\n    /*public final*/ class AztecWriter {\n        // @Override\n        encode(contents, format, width, height) {\n            return this.encodeWithHints(contents, format, width, height, null);\n        }\n        // @Override\n        encodeWithHints(contents, format, width, height, hints) {\n            let charset = StandardCharsets.ISO_8859_1;\n            let eccPercent = Encoder$1.DEFAULT_EC_PERCENT;\n            let layers = Encoder$1.DEFAULT_AZTEC_LAYERS;\n            if (hints != null) {\n                if (hints.has(EncodeHintType$1.CHARACTER_SET)) {\n                    charset = Charset.forName(hints.get(EncodeHintType$1.CHARACTER_SET).toString());\n                }\n                if (hints.has(EncodeHintType$1.ERROR_CORRECTION)) {\n                    eccPercent = Integer.parseInt(hints.get(EncodeHintType$1.ERROR_CORRECTION).toString());\n                }\n                if (hints.has(EncodeHintType$1.AZTEC_LAYERS)) {\n                    layers = Integer.parseInt(hints.get(EncodeHintType$1.AZTEC_LAYERS).toString());\n                }\n            }\n            return AztecWriter.encodeLayers(contents, format, width, height, charset, eccPercent, layers);\n        }\n        static encodeLayers(contents, format, width, height, charset, eccPercent, layers) {\n            if (format !== BarcodeFormat$1.AZTEC) {\n                throw new IllegalArgumentException('Can only encode AZTEC, but got ' + format);\n            }\n            let aztec = Encoder$1.encode(StringUtils.getBytes(contents, charset), eccPercent, layers);\n            return AztecWriter.renderResult(aztec, width, height);\n        }\n        static renderResult(code, width, height) {\n            let input = code.getMatrix();\n            if (input == null) {\n                throw new IllegalStateException();\n            }\n            let inputWidth = input.getWidth();\n            let inputHeight = input.getHeight();\n            let outputWidth = Math.max(width, inputWidth);\n            let outputHeight = Math.max(height, inputHeight);\n            let multiple = Math.min(outputWidth / inputWidth, outputHeight / inputHeight);\n            let leftPadding = (outputWidth - (inputWidth * multiple)) / 2;\n            let topPadding = (outputHeight - (inputHeight * multiple)) / 2;\n            let output = new BitMatrix(outputWidth, outputHeight);\n            for (let inputY /*int*/ = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n                // Write the contents of this row of the barcode\n                for (let inputX /*int*/ = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n                    if (input.get(inputX, inputY)) {\n                        output.setRegion(outputX, outputY, multiple, multiple);\n                    }\n                }\n            }\n            return output;\n        }\n    }\n\n    exports.AbstractExpandedDecoder = AbstractExpandedDecoder;\n    exports.ArgumentException = ArgumentException;\n    exports.ArithmeticException = ArithmeticException;\n    exports.AztecCode = AztecCode;\n    exports.AztecCodeReader = AztecReader;\n    exports.AztecCodeWriter = AztecWriter;\n    exports.AztecDecoder = Decoder;\n    exports.AztecDetector = Detector;\n    exports.AztecDetectorResult = AztecDetectorResult;\n    exports.AztecEncoder = Encoder$1;\n    exports.AztecHighLevelEncoder = HighLevelEncoder;\n    exports.AztecPoint = Point;\n    exports.BarcodeFormat = BarcodeFormat$1;\n    exports.Binarizer = Binarizer;\n    exports.BinaryBitmap = BinaryBitmap;\n    exports.BitArray = BitArray;\n    exports.BitMatrix = BitMatrix;\n    exports.BitSource = BitSource;\n    exports.BrowserAztecCodeReader = BrowserAztecCodeReader;\n    exports.BrowserBarcodeReader = BrowserBarcodeReader;\n    exports.BrowserCodeReader = BrowserCodeReader;\n    exports.BrowserDatamatrixCodeReader = BrowserDatamatrixCodeReader;\n    exports.BrowserMultiFormatReader = BrowserMultiFormatReader;\n    exports.BrowserPDF417Reader = BrowserPDF417Reader;\n    exports.BrowserQRCodeReader = BrowserQRCodeReader;\n    exports.BrowserQRCodeSvgWriter = BrowserQRCodeSvgWriter;\n    exports.CharacterSetECI = CharacterSetECI;\n    exports.ChecksumException = ChecksumException;\n    exports.Code128Reader = Code128Reader;\n    exports.Code39Reader = Code39Reader;\n    exports.DataMatrixDecodedBitStreamParser = DecodedBitStreamParser;\n    exports.DataMatrixReader = DataMatrixReader;\n    exports.DecodeHintType = DecodeHintType$1;\n    exports.DecoderResult = DecoderResult;\n    exports.DefaultGridSampler = DefaultGridSampler;\n    exports.DetectorResult = DetectorResult;\n    exports.EAN13Reader = EAN13Reader;\n    exports.EncodeHintType = EncodeHintType$1;\n    exports.Exception = Exception;\n    exports.FormatException = FormatException;\n    exports.GenericGF = GenericGF;\n    exports.GenericGFPoly = GenericGFPoly;\n    exports.GlobalHistogramBinarizer = GlobalHistogramBinarizer;\n    exports.GridSampler = GridSampler;\n    exports.GridSamplerInstance = GridSamplerInstance;\n    exports.HTMLCanvasElementLuminanceSource = HTMLCanvasElementLuminanceSource;\n    exports.HybridBinarizer = HybridBinarizer;\n    exports.ITFReader = ITFReader;\n    exports.IllegalArgumentException = IllegalArgumentException;\n    exports.IllegalStateException = IllegalStateException;\n    exports.InvertedLuminanceSource = InvertedLuminanceSource;\n    exports.LuminanceSource = LuminanceSource;\n    exports.MathUtils = MathUtils;\n    exports.MultiFormatOneDReader = MultiFormatOneDReader;\n    exports.MultiFormatReader = MultiFormatReader;\n    exports.MultiFormatWriter = MultiFormatWriter;\n    exports.NotFoundException = NotFoundException;\n    exports.OneDReader = OneDReader;\n    exports.PDF417DecodedBitStreamParser = DecodedBitStreamParser$2;\n    exports.PDF417DecoderErrorCorrection = ErrorCorrection;\n    exports.PDF417Reader = PDF417Reader;\n    exports.PDF417ResultMetadata = PDF417ResultMetadata;\n    exports.PerspectiveTransform = PerspectiveTransform;\n    exports.PlanarYUVLuminanceSource = PlanarYUVLuminanceSource;\n    exports.QRCodeByteMatrix = ByteMatrix;\n    exports.QRCodeDataMask = DataMask;\n    exports.QRCodeDecodedBitStreamParser = DecodedBitStreamParser$1;\n    exports.QRCodeDecoderErrorCorrectionLevel = ErrorCorrectionLevel;\n    exports.QRCodeDecoderFormatInformation = FormatInformation;\n    exports.QRCodeEncoder = Encoder;\n    exports.QRCodeEncoderQRCode = QRCode;\n    exports.QRCodeMaskUtil = MaskUtil;\n    exports.QRCodeMatrixUtil = MatrixUtil;\n    exports.QRCodeMode = Mode$1;\n    exports.QRCodeReader = QRCodeReader;\n    exports.QRCodeVersion = Version$1;\n    exports.QRCodeWriter = QRCodeWriter;\n    exports.RGBLuminanceSource = RGBLuminanceSource;\n    exports.RSS14Reader = RSS14Reader;\n    exports.RSSExpandedReader = RSSExpandedReader;\n    exports.ReaderException = ReaderException;\n    exports.ReedSolomonDecoder = ReedSolomonDecoder;\n    exports.ReedSolomonEncoder = ReedSolomonEncoder;\n    exports.ReedSolomonException = ReedSolomonException;\n    exports.Result = Result;\n    exports.ResultMetadataType = ResultMetadataType$1;\n    exports.ResultPoint = ResultPoint;\n    exports.StringUtils = StringUtils;\n    exports.UnsupportedOperationException = UnsupportedOperationException;\n    exports.VideoInputDevice = VideoInputDevice;\n    exports.WhiteRectangleDetector = WhiteRectangleDetector;\n    exports.WriterException = WriterException;\n    exports.ZXingArrays = Arrays;\n    exports.ZXingCharset = Charset;\n    exports.ZXingInteger = Integer;\n    exports.ZXingStandardCharsets = StandardCharsets;\n    exports.ZXingStringBuilder = StringBuilder;\n    exports.ZXingStringEncoding = StringEncoding;\n    exports.ZXingSystem = System;\n    exports.createAbstractExpandedDecoder = createDecoder;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - dont rely on the browser doms\n * - super simple - you get it immediatly, no mistery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n\ntype TCallback = (...args:any) => any;\n\n/**\n * Execute callback for each event in space separated list of event names\n *\n */\nfunction forEvents(events:string,callback:(event:string)=>any){\n\tevents.split(/\\s+/).forEach((event) =>{\n\t\tcallback(event);\n\t});\n}\n\nexport default class MicroEvent{\n\n\tpublic _events: {[key:string]:TCallback[]};\n\n\tconstructor(){\n\t\tthis._events = {};\n\t}\n\n\ton(events:string, fct:TCallback){\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = this._events[event] || [];\n\t\t\tevent_array.push(fct);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\toff(events:string, fct:TCallback){\n\t\tvar n = arguments.length;\n\t\tif( n === 0 ){\n\t\t\tthis._events = {};\n\t\t\treturn;\n\t\t}\n\n\t\tforEvents(events,(event) => {\n\n\t\t\tif (n === 1){\n\t\t\t\tdelete this._events[event];\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst event_array = this._events[event];\n\t\t\tif( event_array === undefined ) return;\n\n\t\t\tevent_array.splice(event_array.indexOf(fct), 1);\n\t\t\tthis._events[event] = event_array;\n\t\t});\n\t}\n\n\ttrigger(events:string, ...args:any){\n\t\tvar self = this;\n\n\t\tforEvents(events,(event) => {\n\t\t\tconst event_array = self._events[event];\n\t\t\tif( event_array === undefined ) return;\n\t\t\tevent_array.forEach(fct => {\n\t\t\t\tfct.apply(self, args );\n\t\t\t});\n\n\t\t});\n\t}\n};\n", "/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\ntype TSettings = {\n\t[key:string]:any\n}\n\ntype TPlugins = {\n\tnames: string[],\n\tsettings: TSettings,\n\trequested: {[key:string]:boolean},\n\tloaded: {[key:string]:any}\n};\n\nexport type TPluginItem = {name:string,options:{}};\nexport type TPluginHash = {[key:string]:{}};\n\n\n\n\nexport default function MicroPlugin(Interface: any ){\n\n\tInterface.plugins = {};\n\n\treturn class extends Interface{\n\n\t\tpublic plugins:TPlugins = {\n\t\t\tnames     : [],\n\t\t\tsettings  : {},\n\t\t\trequested : {},\n\t\t\tloaded    : {}\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tstatic define(name:string, fn:(this:any,settings:TSettings)=>any){\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn'   : fn\n\t\t\t};\n\t\t}\n\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t *   ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t *   [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t *   {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {array|object} plugins\n\t\t */\n\t\tinitializePlugins(plugins:string[]|TPluginItem[]|TPluginHash) {\n\t\t\tvar key, name;\n\t\t\tconst self  = this;\n\t\t\tconst queue:string[] = [];\n\n\t\t\tif (Array.isArray(plugins)) {\n\t\t\t\tplugins.forEach((plugin:string|TPluginItem)=>{\n\t\t\t\t\tif (typeof plugin === 'string') {\n\t\t\t\t\t\tqueue.push(plugin);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugin.name] = plugin.options;\n\t\t\t\t\t\tqueue.push(plugin.name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile( name = queue.shift() ){\n\t\t\t\tself.require(name);\n\t\t\t}\n\t\t}\n\n\t\tloadPlugin(name:string) {\n\t\t\tvar self    = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin  = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' +  name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t}\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t */\n\t\trequire(name:string) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t}\n\n\t};\n\n}\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n * @param {string[]} chars\n * @return {string}\n */\nconst arrayToPattern = chars => {\n  chars = chars.filter(Boolean);\n\n  if (chars.length < 2) {\n    return chars[0] || '';\n  }\n\n  return maxValueLength(chars) == 1 ? '[' + chars.join('') + ']' : '(?:' + chars.join('|') + ')';\n};\n/**\n * @param {string[]} array\n * @return {string}\n */\n\nconst sequencePattern = array => {\n  if (!hasDuplicates(array)) {\n    return array.join('');\n  }\n\n  let pattern = '';\n  let prev_char_count = 0;\n\n  const prev_pattern = () => {\n    if (prev_char_count > 1) {\n      pattern += '{' + prev_char_count + '}';\n    }\n  };\n\n  array.forEach((char, i) => {\n    if (char === array[i - 1]) {\n      prev_char_count++;\n      return;\n    }\n\n    prev_pattern();\n    pattern += char;\n    prev_char_count = 1;\n  });\n  prev_pattern();\n  return pattern;\n};\n/**\n * Convert array of strings to a regular expression\n *\tex ['ab','a'] => (?:ab|a)\n * \tex ['a','b'] => [ab]\n * @param {Set<string>} chars\n * @return {string}\n */\n\nconst setToPattern = chars => {\n  let array = toArray(chars);\n  return arrayToPattern(array);\n};\n/**\n *\n * https://stackoverflow.com/questions/7376598/in-javascript-how-do-i-check-if-an-array-has-duplicate-values\n * @param {any[]} array\n */\n\nconst hasDuplicates = array => {\n  return new Set(array).size !== array.length;\n};\n/**\n * https://stackoverflow.com/questions/63006601/why-does-u-throw-an-invalid-escape-error\n * @param {string} str\n * @return {string}\n */\n\nconst escape_regex = str => {\n  return (str + '').replace(/([\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\|\\}\\\\])/gu, '\\\\$1');\n};\n/**\n * Return the max length of array values\n * @param {string[]} array\n *\n */\n\nconst maxValueLength = array => {\n  return array.reduce((longest, value) => Math.max(longest, unicodeLength(value)), 0);\n};\n/**\n * @param {string} str\n */\n\nconst unicodeLength = str => {\n  return toArray(str).length;\n};\n/**\n * @param {any} p\n * @return {any[]}\n */\n\nconst toArray = p => Array.from(p);\n\nexport { arrayToPattern, escape_regex, hasDuplicates, maxValueLength, sequencePattern, setToPattern, toArray, unicodeLength };\n//# sourceMappingURL=regex.js.map\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\n/**\n * Get all possible combinations of substrings that add up to the given string\n * https://stackoverflow.com/questions/30169587/find-all-the-combination-of-substrings-that-add-up-to-the-given-string\n * @param {string} input\n * @return {string[][]}\n */\nconst allSubstrings = input => {\n  if (input.length === 1) return [[input]];\n  /** @type {string[][]} */\n\n  let result = [];\n  const start = input.substring(1);\n  const suba = allSubstrings(start);\n  suba.forEach(function (subresult) {\n    let tmp = subresult.slice(0);\n    tmp[0] = input.charAt(0) + tmp[0];\n    result.push(tmp);\n    tmp = subresult.slice(0);\n    tmp.unshift(input.charAt(0));\n    result.push(tmp);\n  });\n  return result;\n};\n\nexport { allSubstrings };\n//# sourceMappingURL=strings.js.map\n", "/*! @orchidjs/unicode-variants | https://github.com/orchidjs/unicode-variants | Apache License (v2) */\nimport { toArray, setToPattern, escape_regex, arrayToPattern, sequencePattern } from './regex.js';\nexport { escape_regex } from './regex.js';\nimport { allSubstrings } from './strings.js';\n\n/**\n * @typedef {{[key:string]:string}} TUnicodeMap\n * @typedef {{[key:string]:Set<string>}} TUnicodeSets\n * @typedef {[[number,number]]} TCodePoints\n * @typedef {{folded:string,composed:string,code_point:number}} TCodePointObj\n * @typedef {{start:number,end:number,length:number,substr:string}} TSequencePart\n */\n/** @type {TCodePoints} */\n\nconst code_points = [[0, 65535]];\nconst accent_pat = '[\\u0300-\\u036F\\u{b7}\\u{2be}\\u{2bc}]';\n/** @type {TUnicodeMap} */\n\nlet unicode_map;\n/** @type {RegExp} */\n\nlet multi_char_reg;\nconst max_char_length = 3;\n/** @type {TUnicodeMap} */\n\nconst latin_convert = {};\n/** @type {TUnicodeMap} */\n\nconst latin_condensed = {\n  '/': '\u2044\u2215',\n  '0': '\u07C0',\n  \"a\": \"\u2C65\u0250\u0251\",\n  \"aa\": \"\uA733\",\n  \"ae\": \"\u00E6\u01FD\u01E3\",\n  \"ao\": \"\uA735\",\n  \"au\": \"\uA737\",\n  \"av\": \"\uA739\uA73B\",\n  \"ay\": \"\uA73D\",\n  \"b\": \"\u0180\u0253\u0183\",\n  \"c\": \"\uA73F\u0188\u023C\u2184\",\n  \"d\": \"\u0111\u0257\u0256\u1D05\u018C\uABB7\u0501\u0266\",\n  \"e\": \"\u025B\u01DD\u1D07\u0247\",\n  \"f\": \"\uA77C\u0192\",\n  \"g\": \"\u01E5\u0260\uA7A1\u1D79\uA77F\u0262\",\n  \"h\": \"\u0127\u2C68\u2C76\u0265\",\n  \"i\": \"\u0268\u0131\",\n  \"j\": \"\u0249\u0237\",\n  \"k\": \"\u0199\u2C6A\uA741\uA743\uA745\uA7A3\",\n  \"l\": \"\u0142\u019A\u026B\u2C61\uA749\uA747\uA781\u026D\",\n  \"m\": \"\u0271\u026F\u03FB\",\n  \"n\": \"\uA7A5\u019E\u0272\uA791\u1D0E\u043B\u0509\",\n  \"o\": \"\u00F8\u01FF\u0254\u0275\uA74B\uA74D\u1D11\",\n  \"oe\": \"\u0153\",\n  \"oi\": \"\u01A3\",\n  \"oo\": \"\uA74F\",\n  \"ou\": \"\u0223\",\n  \"p\": \"\u01A5\u1D7D\uA751\uA753\uA755\u03C1\",\n  \"q\": \"\uA757\uA759\u024B\",\n  \"r\": \"\u024D\u027D\uA75B\uA7A7\uA783\",\n  \"s\": \"\u00DF\u023F\uA7A9\uA785\u0282\",\n  \"t\": \"\u0167\u01AD\u0288\u2C66\uA787\",\n  \"th\": \"\u00FE\",\n  \"tz\": \"\uA729\",\n  \"u\": \"\u0289\",\n  \"v\": \"\u028B\uA75F\u028C\",\n  \"vy\": \"\uA761\",\n  \"w\": \"\u2C73\",\n  \"y\": \"\u01B4\u024F\u1EFF\",\n  \"z\": \"\u01B6\u0225\u0240\u2C6C\uA763\",\n  \"hv\": \"\u0195\"\n};\n\nfor (let latin in latin_condensed) {\n  let unicode = latin_condensed[latin] || '';\n\n  for (let i = 0; i < unicode.length; i++) {\n    let char = unicode.substring(i, i + 1);\n    latin_convert[char] = latin;\n  }\n}\n\nconst convert_pat = new RegExp(Object.keys(latin_convert).join('|') + '|' + accent_pat, 'gu');\n/**\n * Initialize the unicode_map from the give code point ranges\n *\n * @param {TCodePoints=} _code_points\n */\n\nconst initialize = _code_points => {\n  if (unicode_map !== undefined) return;\n  unicode_map = generateMap(_code_points || code_points);\n};\n/**\n * Helper method for normalize a string\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize\n * @param {string} str\n * @param {string} form\n */\n\nconst normalize = (str, form = 'NFKD') => str.normalize(form);\n/**\n * Remove accents without reordering string\n * calling str.normalize('NFKD') on \\u{594}\\u{595}\\u{596} becomes \\u{596}\\u{594}\\u{595}\n * via https://github.com/krisk/Fuse/issues/133#issuecomment-318692703\n * @param {string} str\n * @return {string}\n */\n\nconst asciifold = str => {\n  return toArray(str).reduce(\n  /**\n   * @param {string} result\n   * @param {string} char\n   */\n  (result, char) => {\n    return result + _asciifold(char);\n  }, '');\n};\n/**\n * @param {string} str\n * @return {string}\n */\n\nconst _asciifold = str => {\n  str = normalize(str).toLowerCase().replace(convert_pat, (\n  /** @type {string} */\n  char) => {\n    return latin_convert[char] || '';\n  }); //return str;\n\n  return normalize(str, 'NFC');\n};\n/**\n * Generate a list of unicode variants from the list of code points\n * @param {TCodePoints} code_points\n * @yield {TCodePointObj}\n */\n\nfunction* generator(code_points) {\n  for (const [code_point_min, code_point_max] of code_points) {\n    for (let i = code_point_min; i <= code_point_max; i++) {\n      let composed = String.fromCharCode(i);\n      let folded = asciifold(composed);\n\n      if (folded == composed.toLowerCase()) {\n        continue;\n      } // skip when folded is a string longer than 3 characters long\n      // bc the resulting regex patterns will be long\n      // eg:\n      // folded \u0635\u0644\u0649 \u0627\u0644\u0644\u0647 \u0639\u0644\u064A\u0647 \u0648\u0633\u0644\u0645 length 18 code point 65018\n      // folded \u062C\u0644 \u062C\u0644\u0627\u0644\u0647 length 8 code point 65019\n\n\n      if (folded.length > max_char_length) {\n        continue;\n      }\n\n      if (folded.length == 0) {\n        continue;\n      }\n\n      yield {\n        folded: folded,\n        composed: composed,\n        code_point: i\n      };\n    }\n  }\n}\n/**\n * Generate a unicode map from the list of code points\n * @param {TCodePoints} code_points\n * @return {TUnicodeSets}\n */\n\nconst generateSets = code_points => {\n  /** @type {{[key:string]:Set<string>}} */\n  const unicode_sets = {};\n  /**\n   * @param {string} folded\n   * @param {string} to_add\n   */\n\n  const addMatching = (folded, to_add) => {\n    /** @type {Set<string>} */\n    const folded_set = unicode_sets[folded] || new Set();\n    const patt = new RegExp('^' + setToPattern(folded_set) + '$', 'iu');\n\n    if (to_add.match(patt)) {\n      return;\n    }\n\n    folded_set.add(escape_regex(to_add));\n    unicode_sets[folded] = folded_set;\n  };\n\n  for (let value of generator(code_points)) {\n    addMatching(value.folded, value.folded);\n    addMatching(value.folded, value.composed);\n  }\n\n  return unicode_sets;\n};\n/**\n * Generate a unicode map from the list of code points\n * ae => (?:(?:ae|\u00C6|\u01FC|\u01E2)|(?:A|\u24B6|\uFF21...)(?:E|\u025B|\u24BA...))\n *\n * @param {TCodePoints} code_points\n * @return {TUnicodeMap}\n */\n\nconst generateMap = code_points => {\n  /** @type {TUnicodeSets} */\n  const unicode_sets = generateSets(code_points);\n  /** @type {TUnicodeMap} */\n\n  const unicode_map = {};\n  /** @type {string[]} */\n\n  let multi_char = [];\n\n  for (let folded in unicode_sets) {\n    let set = unicode_sets[folded];\n\n    if (set) {\n      unicode_map[folded] = setToPattern(set);\n    }\n\n    if (folded.length > 1) {\n      multi_char.push(escape_regex(folded));\n    }\n  }\n\n  multi_char.sort((a, b) => b.length - a.length);\n  const multi_char_patt = arrayToPattern(multi_char);\n  multi_char_reg = new RegExp('^' + multi_char_patt, 'u');\n  return unicode_map;\n};\n/**\n * Map each element of an array from it's folded value to all possible unicode matches\n * @param {string[]} strings\n * @param {number} min_replacement\n * @return {string}\n */\n\nconst mapSequence = (strings, min_replacement = 1) => {\n  let chars_replaced = 0;\n  strings = strings.map(str => {\n    if (unicode_map[str]) {\n      chars_replaced += str.length;\n    }\n\n    return unicode_map[str] || str;\n  });\n\n  if (chars_replaced >= min_replacement) {\n    return sequencePattern(strings);\n  }\n\n  return '';\n};\n/**\n * Convert a short string and split it into all possible patterns\n * Keep a pattern only if min_replacement is met\n *\n * 'abc'\n * \t\t=> [['abc'],['ab','c'],['a','bc'],['a','b','c']]\n *\t\t=> ['abc-pattern','ab-c-pattern'...]\n *\n *\n * @param {string} str\n * @param {number} min_replacement\n * @return {string}\n */\n\nconst substringsToPattern = (str, min_replacement = 1) => {\n  min_replacement = Math.max(min_replacement, str.length - 1);\n  return arrayToPattern(allSubstrings(str).map(sub_pat => {\n    return mapSequence(sub_pat, min_replacement);\n  }));\n};\n/**\n * Convert an array of sequences into a pattern\n * [{start:0,end:3,length:3,substr:'iii'}...] => (?:iii...)\n *\n * @param {Sequence[]} sequences\n * @param {boolean} all\n */\n\nconst sequencesToPattern = (sequences, all = true) => {\n  let min_replacement = sequences.length > 1 ? 1 : 0;\n  return arrayToPattern(sequences.map(sequence => {\n    let seq = [];\n    const len = all ? sequence.length() : sequence.length() - 1;\n\n    for (let j = 0; j < len; j++) {\n      seq.push(substringsToPattern(sequence.substrs[j] || '', min_replacement));\n    }\n\n    return sequencePattern(seq);\n  }));\n};\n/**\n * Return true if the sequence is already in the sequences\n * @param {Sequence} needle_seq\n * @param {Sequence[]} sequences\n */\n\n\nconst inSequences = (needle_seq, sequences) => {\n  for (const seq of sequences) {\n    if (seq.start != needle_seq.start || seq.end != needle_seq.end) {\n      continue;\n    }\n\n    if (seq.substrs.join('') !== needle_seq.substrs.join('')) {\n      continue;\n    }\n\n    let needle_parts = needle_seq.parts;\n    /**\n     * @param {TSequencePart} part\n     */\n\n    const filter = part => {\n      for (const needle_part of needle_parts) {\n        if (needle_part.start === part.start && needle_part.substr === part.substr) {\n          return false;\n        }\n\n        if (part.length == 1 || needle_part.length == 1) {\n          continue;\n        } // check for overlapping parts\n        // a = ['::=','==']\n        // b = ['::','===']\n        // a = ['r','sm']\n        // b = ['rs','m']\n\n\n        if (part.start < needle_part.start && part.end > needle_part.start) {\n          return true;\n        }\n\n        if (needle_part.start < part.start && needle_part.end > part.start) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    let filtered = seq.parts.filter(filter);\n\n    if (filtered.length > 0) {\n      continue;\n    }\n\n    return true;\n  }\n\n  return false;\n};\n\nclass Sequence {\n  constructor() {\n    /** @type {TSequencePart[]} */\n    this.parts = [];\n    /** @type {string[]} */\n\n    this.substrs = [];\n    this.start = 0;\n    this.end = 0;\n  }\n  /**\n   * @param {TSequencePart|undefined} part\n   */\n\n\n  add(part) {\n    if (part) {\n      this.parts.push(part);\n      this.substrs.push(part.substr);\n      this.start = Math.min(part.start, this.start);\n      this.end = Math.max(part.end, this.end);\n    }\n  }\n\n  last() {\n    return this.parts[this.parts.length - 1];\n  }\n\n  length() {\n    return this.parts.length;\n  }\n  /**\n   * @param {number} position\n   * @param {TSequencePart} last_piece\n   */\n\n\n  clone(position, last_piece) {\n    let clone = new Sequence();\n    let parts = JSON.parse(JSON.stringify(this.parts));\n    let last_part = parts.pop();\n\n    for (const part of parts) {\n      clone.add(part);\n    }\n\n    let last_substr = last_piece.substr.substring(0, position - last_part.start);\n    let clone_last_len = last_substr.length;\n    clone.add({\n      start: last_part.start,\n      end: last_part.start + clone_last_len,\n      length: clone_last_len,\n      substr: last_substr\n    });\n    return clone;\n  }\n\n}\n/**\n * Expand a regular expression pattern to include unicode variants\n * \teg /a/ becomes /a\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251A\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F/\n *\n * Issue:\n *  \uFE8A\uFE8B [ '\uFE8A = \\\\u{fe8a}', '\uFE8B = \\\\u{fe8b}' ]\n *\tbecomes:\t\u064A\u0654\u064A\u0654 [ '\u064A = \\\\u{64a}', '\u0654 = \\\\u{654}', '\u064A = \\\\u{64a}', '\u0654 = \\\\u{654}' ]\n *\n *\t\u0130\u0132 = IIJ = \u2161J\n *\n * \t1/2/4\n *\n * @param {string} str\n * @return {string|undefined}\n */\n\n\nconst getPattern = str => {\n  initialize();\n  str = asciifold(str);\n  let pattern = '';\n  let sequences = [new Sequence()];\n\n  for (let i = 0; i < str.length; i++) {\n    let substr = str.substring(i);\n    let match = substr.match(multi_char_reg);\n    const char = str.substring(i, i + 1);\n    const match_str = match ? match[0] : null; // loop through sequences\n    // add either the char or multi_match\n\n    let overlapping = [];\n    let added_types = new Set();\n\n    for (const sequence of sequences) {\n      const last_piece = sequence.last();\n\n      if (!last_piece || last_piece.length == 1 || last_piece.end <= i) {\n        // if we have a multi match\n        if (match_str) {\n          const len = match_str.length;\n          sequence.add({\n            start: i,\n            end: i + len,\n            length: len,\n            substr: match_str\n          });\n          added_types.add('1');\n        } else {\n          sequence.add({\n            start: i,\n            end: i + 1,\n            length: 1,\n            substr: char\n          });\n          added_types.add('2');\n        }\n      } else if (match_str) {\n        let clone = sequence.clone(i, last_piece);\n        const len = match_str.length;\n        clone.add({\n          start: i,\n          end: i + len,\n          length: len,\n          substr: match_str\n        });\n        overlapping.push(clone);\n      } else {\n        // don't add char\n        // adding would create invalid patterns: 234 => [2,34,4]\n        added_types.add('3');\n      }\n    } // if we have overlapping\n\n\n    if (overlapping.length > 0) {\n      // ['ii','iii'] before ['i','i','iii']\n      overlapping = overlapping.sort((a, b) => {\n        return a.length() - b.length();\n      });\n\n      for (let clone of overlapping) {\n        // don't add if we already have an equivalent sequence\n        if (inSequences(clone, sequences)) {\n          continue;\n        }\n\n        sequences.push(clone);\n      }\n\n      continue;\n    } // if we haven't done anything unique\n    // clean up the patterns\n    // helps keep patterns smaller\n    // if str = 'r\u20A8\u33A7aarss', pattern will be 446 instead of 655\n\n\n    if (i > 0 && added_types.size == 1 && !added_types.has('3')) {\n      pattern += sequencesToPattern(sequences, false);\n      let new_seq = new Sequence();\n      const old_seq = sequences[0];\n\n      if (old_seq) {\n        new_seq.add(old_seq.last());\n      }\n\n      sequences = [new_seq];\n    }\n  }\n\n  pattern += sequencesToPattern(sequences, true);\n  return pattern;\n};\n\nexport { _asciifold, asciifold, code_points, generateMap, generateSets, generator, getPattern, initialize, mapSequence, normalize, substringsToPattern, unicode_map };\n//# sourceMappingURL=index.js.map\n", "/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\nimport { asciifold } from '@orchidjs/unicode-variants';\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nconst getAttr = (obj, name) => {\n  if (!obj) return;\n  return obj[name];\n};\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\n\nconst getAttrNesting = (obj, name) => {\n  if (!obj) return;\n  var part,\n      names = name.split(\".\");\n\n  while ((part = names.shift()) && (obj = obj[part]));\n\n  return obj;\n};\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\n\nconst scoreValue = (value, token, weight) => {\n  var score, pos;\n  if (!value) return 0;\n  value = value + '';\n  if (token.regex == null) return 0;\n  pos = value.search(token.regex);\n  if (pos === -1) return 0;\n  score = token.string.length / value.length;\n  if (pos === 0) score += 0.5;\n  return score * weight;\n};\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\n\nconst propToArray = (obj, key) => {\n  var value = obj[key];\n  if (typeof value == 'function') return value;\n\n  if (value && !Array.isArray(value)) {\n    obj[key] = [value];\n  }\n};\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n */\n\nconst iterate = (object, callback) => {\n  if (Array.isArray(object)) {\n    object.forEach(callback);\n  } else {\n    for (var key in object) {\n      if (object.hasOwnProperty(key)) {\n        callback(object[key], key);\n      }\n    }\n  }\n};\nconst cmp = (a, b) => {\n  if (typeof a === 'number' && typeof b === 'number') {\n    return a > b ? 1 : a < b ? -1 : 0;\n  }\n\n  a = asciifold(a + '').toLowerCase();\n  b = asciifold(b + '').toLowerCase();\n  if (a > b) return 1;\n  if (b > a) return -1;\n  return 0;\n};\n\nexport { cmp, getAttr, getAttrNesting, iterate, propToArray, scoreValue };\n//# sourceMappingURL=utils.js.map\n", "/*! sifter.js | https://github.com/orchidjs/sifter.js | Apache License (v2) */\nimport { iterate, cmp, propToArray, getAttrNesting, getAttr, scoreValue } from './utils.js';\nexport { cmp, getAttr, getAttrNesting, iterate, propToArray, scoreValue } from './utils.js';\nimport { escape_regex, getPattern } from '@orchidjs/unicode-variants';\nexport { getPattern } from '@orchidjs/unicode-variants';\n\n/**\n * sifter.js\n * Copyright (c) 2013\u20132020 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\nclass Sifter {\n  // []|{};\n\n  /**\n   * Textually searches arrays and hashes of objects\n   * by property (or multiple properties). Designed\n   * specifically for autocomplete.\n   *\n   */\n  constructor(items, settings) {\n    this.items = void 0;\n    this.settings = void 0;\n    this.items = items;\n    this.settings = settings || {\n      diacritics: true\n    };\n  }\n\n  /**\n   * Splits a search string into an array of individual\n   * regexps to be used to match results.\n   *\n   */\n  tokenize(query, respect_word_boundaries, weights) {\n    if (!query || !query.length) return [];\n    const tokens = [];\n    const words = query.split(/\\s+/);\n    var field_regex;\n\n    if (weights) {\n      field_regex = new RegExp('^(' + Object.keys(weights).map(escape_regex).join('|') + ')\\:(.*)$');\n    }\n\n    words.forEach(word => {\n      let field_match;\n      let field = null;\n      let regex = null; // look for \"field:query\" tokens\n\n      if (field_regex && (field_match = word.match(field_regex))) {\n        field = field_match[1];\n        word = field_match[2];\n      }\n\n      if (word.length > 0) {\n        if (this.settings.diacritics) {\n          regex = getPattern(word) || null;\n        } else {\n          regex = escape_regex(word);\n        }\n\n        if (regex && respect_word_boundaries) regex = \"\\\\b\" + regex;\n      }\n\n      tokens.push({\n        string: word,\n        regex: regex ? new RegExp(regex, 'iu') : null,\n        field: field\n      });\n    });\n    return tokens;\n  }\n\n  /**\n   * Returns a function to be used to score individual results.\n   *\n   * Good matches will have a higher score than poor matches.\n   * If an item is not a match, 0 will be returned by the function.\n   *\n   * @returns {T.ScoreFn}\n   */\n  getScoreFunction(query, options) {\n    var search = this.prepareSearch(query, options);\n    return this._getScoreFunction(search);\n  }\n  /**\n   * @returns {T.ScoreFn}\n   *\n   */\n\n\n  _getScoreFunction(search) {\n    const tokens = search.tokens,\n          token_count = tokens.length;\n\n    if (!token_count) {\n      return function () {\n        return 0;\n      };\n    }\n\n    const fields = search.options.fields,\n          weights = search.weights,\n          field_count = fields.length,\n          getAttrFn = search.getAttrFn;\n\n    if (!field_count) {\n      return function () {\n        return 1;\n      };\n    }\n    /**\n     * Calculates the score of an object\n     * against the search query.\n     *\n     */\n\n\n    const scoreObject = function () {\n      if (field_count === 1) {\n        return function (token, data) {\n          const field = fields[0].field;\n          return scoreValue(getAttrFn(data, field), token, weights[field] || 1);\n        };\n      }\n\n      return function (token, data) {\n        var sum = 0; // is the token specific to a field?\n\n        if (token.field) {\n          const value = getAttrFn(data, token.field);\n\n          if (!token.regex && value) {\n            sum += 1 / field_count;\n          } else {\n            sum += scoreValue(value, token, 1);\n          }\n        } else {\n          iterate(weights, (weight, field) => {\n            sum += scoreValue(getAttrFn(data, field), token, weight);\n          });\n        }\n\n        return sum / field_count;\n      };\n    }();\n\n    if (token_count === 1) {\n      return function (data) {\n        return scoreObject(tokens[0], data);\n      };\n    }\n\n    if (search.options.conjunction === 'and') {\n      return function (data) {\n        var score,\n            sum = 0;\n\n        for (let token of tokens) {\n          score = scoreObject(token, data);\n          if (score <= 0) return 0;\n          sum += score;\n        }\n\n        return sum / token_count;\n      };\n    } else {\n      return function (data) {\n        var sum = 0;\n        iterate(tokens, token => {\n          sum += scoreObject(token, data);\n        });\n        return sum / token_count;\n      };\n    }\n  }\n\n  /**\n   * Returns a function that can be used to compare two\n   * results, for sorting purposes. If no sorting should\n   * be performed, `null` will be returned.\n   *\n   * @return function(a,b)\n   */\n  getSortFunction(query, options) {\n    var search = this.prepareSearch(query, options);\n    return this._getSortFunction(search);\n  }\n\n  _getSortFunction(search) {\n    var implicit_score,\n        sort_flds = [];\n    const self = this,\n          options = search.options,\n          sort = !search.query && options.sort_empty ? options.sort_empty : options.sort;\n\n    if (typeof sort == 'function') {\n      return sort.bind(this);\n    }\n    /**\n     * Fetches the specified sort field value\n     * from a search result item.\n     *\n     */\n\n\n    const get_field = function get_field(name, result) {\n      if (name === '$score') return result.score;\n      return search.getAttrFn(self.items[result.id], name);\n    }; // parse options\n\n\n    if (sort) {\n      for (let s of sort) {\n        if (search.query || s.field !== '$score') {\n          sort_flds.push(s);\n        }\n      }\n    } // the \"$score\" field is implied to be the primary\n    // sort field, unless it's manually specified\n\n\n    if (search.query) {\n      implicit_score = true;\n\n      for (let fld of sort_flds) {\n        if (fld.field === '$score') {\n          implicit_score = false;\n          break;\n        }\n      }\n\n      if (implicit_score) {\n        sort_flds.unshift({\n          field: '$score',\n          direction: 'desc'\n        });\n      } // without a search.query, all items will have the same score\n\n    } else {\n      sort_flds = sort_flds.filter(fld => fld.field !== '$score');\n    } // build function\n\n\n    const sort_flds_count = sort_flds.length;\n\n    if (!sort_flds_count) {\n      return null;\n    }\n\n    return function (a, b) {\n      var result, field;\n\n      for (let sort_fld of sort_flds) {\n        field = sort_fld.field;\n        let multiplier = sort_fld.direction === 'desc' ? -1 : 1;\n        result = multiplier * cmp(get_field(field, a), get_field(field, b));\n        if (result) return result;\n      }\n\n      return 0;\n    };\n  }\n\n  /**\n   * Parses a search query and returns an object\n   * with tokens and fields ready to be populated\n   * with results.\n   *\n   */\n  prepareSearch(query, optsUser) {\n    const weights = {};\n    var options = Object.assign({}, optsUser);\n    propToArray(options, 'sort');\n    propToArray(options, 'sort_empty'); // convert fields to new format\n\n    if (options.fields) {\n      propToArray(options, 'fields');\n      const fields = [];\n      options.fields.forEach(field => {\n        if (typeof field == 'string') {\n          field = {\n            field: field,\n            weight: 1\n          };\n        }\n\n        fields.push(field);\n        weights[field.field] = 'weight' in field ? field.weight : 1;\n      });\n      options.fields = fields;\n    }\n\n    return {\n      options: options,\n      query: query.toLowerCase().trim(),\n      tokens: this.tokenize(query, options.respect_word_boundaries, weights),\n      total: 0,\n      items: [],\n      weights: weights,\n      getAttrFn: options.nesting ? getAttrNesting : getAttr\n    };\n  }\n\n  /**\n   * Searches through all items and returns a sorted array of matches.\n   *\n   */\n  search(query, options) {\n    var self = this,\n        score,\n        search;\n    search = this.prepareSearch(query, options);\n    options = search.options;\n    query = search.query; // generate result scoring function\n\n    const fn_score = options.score || self._getScoreFunction(search); // perform search and sort\n\n\n    if (query.length) {\n      iterate(self.items, (item, id) => {\n        score = fn_score(item);\n\n        if (options.filter === false || score > 0) {\n          search.items.push({\n            'score': score,\n            'id': id\n          });\n        }\n      });\n    } else {\n      iterate(self.items, (_, id) => {\n        search.items.push({\n          'score': 1,\n          'id': id\n        });\n      });\n    }\n\n    const fn_sort = self._getSortFunction(search);\n\n    if (fn_sort) search.items.sort(fn_sort); // apply limits\n\n    search.total = search.items.length;\n\n    if (typeof options.limit === 'number') {\n      search.items = search.items.slice(0, options.limit);\n    }\n\n    return search;\n  }\n\n}\n\nexport { Sifter };\n//# sourceMappingURL=sifter.js.map\n", "\nimport { asciifold } from '@orchidjs/unicode-variants';\nimport * as T from './types';\n\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nexport const getAttr = (obj:{[key:string]:any}, name:string ) => {\n    if (!obj ) return;\n    return obj[name];\n};\n\n/**\n * A property getter resolving dot-notation\n * @param  {Object}  obj     The root object to fetch property on\n * @param  {String}  name    The optionally dotted property name to fetch\n * @return {Object}          The resolved property value\n */\nexport const getAttrNesting = (obj:{[key:string]:any}, name:string ) => {\n    if (!obj ) return;\n    var part, names = name.split(\".\");\n\twhile( (part = names.shift()) && (obj = obj[part]));\n    return obj;\n};\n\n/**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n */\nexport const scoreValue = (value:string, token:T.Token, weight:number ):number => {\n\tvar score, pos;\n\n\tif (!value) return 0;\n\n\tvalue = value + '';\n\tif( token.regex == null ) return 0;\n\tpos = value.search(token.regex);\n\tif (pos === -1) return 0;\n\n\tscore = token.string.length / value.length;\n\tif (pos === 0) score += 0.5;\n\n\treturn score * weight;\n};\n\n\n/**\n * Cast object property to an array if it exists and has a value\n *\n */\nexport const propToArray = (obj:{[key:string]:any}, key:string) => {\n\tvar value = obj[key];\n\n\tif( typeof value == 'function' ) return value;\n\n\tif( value && !Array.isArray(value) ){\n\t\tobj[key] = [value];\n\t}\n}\n\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * iterate(this.items, function(item, id) {\n *    // invoked for each item\n * });\n * ```\n *\n */\nexport const iterate = (object:[]|{[key:string]:any}, callback:(value:any,key:any)=>any) => {\n\n\tif ( Array.isArray(object)) {\n\t\tobject.forEach(callback);\n\n\t}else{\n\n\t\tfor (var key in object) {\n\t\t\tif (object.hasOwnProperty(key)) {\n\t\t\t\tcallback(object[key], key);\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nexport const cmp = (a:number|string, b:number|string) => {\n\tif (typeof a === 'number' && typeof b === 'number') {\n\t\treturn a > b ? 1 : (a < b ? -1 : 0);\n\t}\n\ta = asciifold(a + '').toLowerCase();\n\tb = asciifold(b + '').toLowerCase();\n\tif (a > b) return 1;\n\tif (b > a) return -1;\n\treturn 0;\n};\n", "\nimport { iterate } from '@orchidjs/sifter/lib/utils';\n\n/**\n * Return a dom element from either a dom query string, jQuery object, a dom element or html string\n * https://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an-html-string-using-built-in-dom-methods-or-pro/35385518#35385518\n *\n * param query should be {}\n */\nexport const getDom = ( query:any ):HTMLElement => {\n\n\tif( query.jquery ){\n\t\treturn query[0];\n\t}\n\n\tif( query instanceof HTMLElement ){\n\t\treturn query;\n\t}\n\n\tif( isHtmlString(query) ){\n\t\tvar tpl = document.createElement('template');\n\t\ttpl.innerHTML = query.trim(); // Never return a text node of whitespace as the result\n\t\treturn tpl.content.firstChild as HTMLElement;\n\t}\n\n\treturn document.querySelector(query);\n};\n\nexport const isHtmlString = (arg:any): boolean => {\n\tif( typeof arg === 'string' && arg.indexOf('<') > -1 ){\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nexport const escapeQuery = (query:string):string => {\n\treturn query.replace(/['\"\\\\]/g, '\\\\$&');\n}\n\n/**\n * Dispatch an event\n *\n */\nexport const triggerEvent = ( dom_el:HTMLElement, event_name:string ):void => {\n\tvar event = document.createEvent('HTMLEvents');\n\tevent.initEvent(event_name, true, false);\n\tdom_el.dispatchEvent(event)\n};\n\n/**\n * Apply CSS rules to a dom element\n *\n */\nexport const applyCSS = ( dom_el:HTMLElement, css:{ [key: string]: string|number }):void => {\n\tObject.assign(dom_el.style, css);\n}\n\n\n/**\n * Add css classes\n *\n */\nexport const addClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n\tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map( cls => {\n\t\t\tel.classList.add( cls );\n\t\t});\n\t});\n}\n\n/**\n * Remove css classes\n *\n */\n export const removeClasses = ( elmts:HTMLElement|HTMLElement[], ...classes:string[]|string[][] ) => {\n\n \tvar norm_classes \t= classesArray(classes);\n\telmts\t\t\t\t= castAsArray(elmts);\n\n\telmts.map( el => {\n\t\tnorm_classes.map(cls => {\n\t \t\tel.classList.remove( cls );\n\t\t});\n \t});\n }\n\n\n/**\n * Return arguments\n *\n */\nexport const classesArray = (args:string[]|string[][]):string[] => {\n\tvar classes:string[] = [];\n\titerate( args, (_classes) =>{\n\t\tif( typeof _classes === 'string' ){\n\t\t\t_classes = _classes.trim().split(/[\\11\\12\\14\\15\\40]/);\n\t\t}\n\t\tif( Array.isArray(_classes) ){\n\t\t\tclasses = classes.concat(_classes);\n\t\t}\n\t});\n\n\treturn classes.filter(Boolean);\n}\n\n\n/**\n * Create an array from arg if it's not already an array\n *\n */\nexport const castAsArray = (arg:any):Array<any> => {\n\tif( !Array.isArray(arg) ){\n \t\targ = [arg];\n \t}\n\treturn arg;\n}\n\n\n/**\n * Get the closest node to the evt.target matching the selector\n * Stops at wrapper\n *\n */\nexport const parentMatch = ( target:null|HTMLElement, selector:string, wrapper?:HTMLElement ):HTMLElement|void => {\n\n\tif( wrapper && !wrapper.contains(target) ){\n\t\treturn;\n\t}\n\n\twhile( target && target.matches ){\n\n\t\tif( target.matches(selector) ){\n\t\t\treturn target;\n\t\t}\n\n\t\ttarget = target.parentNode as HTMLElement;\n\t}\n}\n\n\n/**\n * Get the first or last item from an array\n *\n * > 0 - right (last)\n * <= 0 - left (first)\n *\n */\nexport const getTail = ( list:Array<any>|NodeList, direction:number=0 ):any => {\n\n\tif( direction > 0 ){\n\t\treturn list[list.length-1];\n\t}\n\n\treturn list[0];\n}\n\n/**\n * Return true if an object is empty\n *\n */\nexport const isEmptyObject = (obj:object):boolean => {\n\treturn (Object.keys(obj).length === 0);\n}\n\n\n/**\n * Get the index of an element amongst sibling nodes of the same type\n *\n */\nexport const nodeIndex = ( el:null|Element, amongst?:string ):number => {\n\tif (!el) return -1;\n\n\tamongst = amongst || el.nodeName;\n\n\tvar i = 0;\n\twhile( el = el.previousElementSibling ){\n\n\t\tif( el.matches(amongst) ){\n\t\t\ti++;\n\t\t}\n\t}\n\treturn i;\n}\n\n\n/**\n * Set attributes of an element\n *\n */\nexport const setAttr = (el:Element,attrs:{ [key: string]: null|string|number }) => {\n\titerate( attrs,(val,attr) => {\n\t\tif( val == null ){\n\t\t\tel.removeAttribute(attr as string);\n\t\t}else{\n\t\t\tel.setAttribute(attr as string, ''+val);\n\t\t}\n\t});\n}\n\n\n/**\n * Replace a node\n */\nexport const replaceNode = ( existing:Node, replacement:Node ) => {\n\tif( existing.parentNode ) existing.parentNode.replaceChild(replacement, existing);\n}\n", "/**\n * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n */\n\nimport {replaceNode} from '../vanilla';\n\n\nexport const highlight = (element:HTMLElement, regex:string|RegExp) => {\n\n\tif( regex === null ) return;\n\n\t// convet string to regex\n\tif( typeof regex === 'string' ){\n\n\t\tif( !regex.length ) return;\n\t\tregex = new RegExp(regex, 'i');\n\t}\n\n\n\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t// Soccer  ->  <span class=\"highlight\">Soc</span>cer  for regex = /soc/i\n\tconst highlightText = ( node:Text ):number => {\n\n\t\tvar match = node.data.match(regex);\n\t\tif( match && node.data.length > 0 ){\n\t\t\tvar spannode\t\t= document.createElement('span');\n\t\t\tspannode.className\t= 'highlight';\n\t\t\tvar middlebit\t\t= node.splitText(match.index as number);\n\n\t\t\tmiddlebit.splitText(match[0]!.length);\n\t\t\tvar middleclone\t\t= middlebit.cloneNode(true);\n\n\t\t\tspannode.appendChild(middleclone);\n\t\t\treplaceNode(middlebit, spannode);\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn 0;\n\t};\n\n\t// Recurse element node, looking for child text nodes to highlight, unless element\n\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\tconst highlightChildren = ( node:Element ):void => {\n\t\tif( node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' ) ){\n\t\t\tArray.from(node.childNodes).forEach(element => {\n\t\t\t\thighlightRecursive(element);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tconst highlightRecursive = ( node:Node|Element ):number => {\n\n\t\tif( node.nodeType === 3 ){\n\t\t\treturn highlightText(node as Text);\n\t\t}\n\n\t\thighlightChildren(node as Element);\n\n\t\treturn 0;\n\t};\n\n\thighlightRecursive( element );\n};\n\n/**\n * removeHighlight fn copied from highlight v5 and\n * edited to remove with(), pass js strict mode, and use without jquery\n */\nexport const removeHighlight = (el:HTMLElement) => {\n\tvar elements = el.querySelectorAll(\"span.highlight\");\n\tArray.prototype.forEach.call(elements, function(el:HTMLElement){\n\t\tvar parent = el.parentNode as Node;\n\t\tparent.replaceChild(el.firstChild as Node, el);\n\t\tparent.normalize();\n\t});\n};\n", "export const KEY_A\t\t\t\t= 65;\nexport const KEY_RETURN\t\t\t= 13;\nexport const KEY_ESC\t\t\t= 27;\nexport const KEY_LEFT\t\t\t= 37;\nexport const KEY_UP\t\t\t\t= 38;\nexport const KEY_RIGHT\t\t\t= 39;\nexport const KEY_DOWN\t\t\t= 40;\nexport const KEY_BACKSPACE\t\t= 8;\nexport const KEY_DELETE\t\t\t= 46;\nexport const KEY_TAB\t\t\t= 9;\n\nexport const IS_MAC      \t\t= typeof navigator === 'undefined' ? false : /Mac/.test(navigator.userAgent);\nexport const KEY_SHORTCUT\t\t= IS_MAC ? 'metaKey' : 'ctrlKey'; // ctrl key or apple key for ma\n", "\nexport default {\n\toptions: [],\n\toptgroups: [],\n\n\tplugins: [],\n\tdelimiter: ',',\n\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\tpersist: true,\n\tdiacritics: true,\n\tcreate: null,\n\tcreateOnBlur: false,\n\tcreateFilter: null,\n\thighlight: true,\n\topenOnFocus: true,\n\tshouldOpen: null,\n\tmaxOptions: 50,\n\tmaxItems: null,\n\thideSelected: null,\n\tduplicates: false,\n\taddPrecedence: false,\n\tselectOnTab: false,\n\tpreload: null,\n\tallowEmptyOption: false,\n\t//closeAfterSelect: false,\n\trefreshThrottle: 300,\n\n\n\tloadThrottle: 300,\n\tloadingClass: 'loading',\n\n\tdataAttr: null, //'data-data',\n\toptgroupField: 'optgroup',\n\tvalueField: 'value',\n\tlabelField: 'text',\n\tdisabledField: 'disabled',\n\toptgroupLabelField: 'label',\n\toptgroupValueField: 'value',\n\tlockOptgroupOrder: false,\n\n\tsortField: '$order',\n\tsearchField: ['text'],\n\tsearchConjunction: 'and',\n\n\tmode: null,\n\twrapperClass: 'ts-wrapper',\n\tcontrolClass: 'ts-control',\n\tdropdownClass: 'ts-dropdown',\n\tdropdownContentClass: 'ts-dropdown-content',\n\titemClass: 'item',\n\toptionClass: 'option',\n\n\tdropdownParent: null,\n\tcontrolInput: '<input type=\"text\" autocomplete=\"off\" size=\"1\" />',\n\n\tcopyClassesToDropdown: false,\n\n\tplaceholder: null,\n\thidePlaceholder: null,\n\n\tshouldLoad: function(query:string):boolean{\n\t\treturn query.length > 0;\n\t},\n\n\t/*\n\tload                 : null, // function(query, callback) { ... }\n\tscore                : null, // function(search) { ... }\n\tonInitialize         : null, // function() { ... }\n\tonChange             : null, // function(value) { ... }\n\tonItemAdd            : null, // function(value, $item) { ... }\n\tonItemRemove         : null, // function(value) { ... }\n\tonClear              : null, // function() { ... }\n\tonOptionAdd          : null, // function(value, data) { ... }\n\tonOptionRemove       : null, // function(value) { ... }\n\tonOptionClear        : null, // function() { ... }\n\tonOptionGroupAdd     : null, // function(id, data) { ... }\n\tonOptionGroupRemove  : null, // function(id) { ... }\n\tonOptionGroupClear   : null, // function() { ... }\n\tonDropdownOpen       : null, // function(dropdown) { ... }\n\tonDropdownClose      : null, // function(dropdown) { ... }\n\tonType               : null, // function(str) { ... }\n\tonDelete             : null, // function(values) { ... }\n\t*/\n\n\trender: {\n\t\t/*\n\t\titem: null,\n\t\toptgroup: null,\n\t\toptgroup_header: null,\n\t\toption: null,\n\t\toption_create: null\n\t\t*/\n\t}\n};\n", "\nimport TomSelect from './tom-select';\nimport { TomLoadCallback } from './types/index';\n\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n *   'str'     -> 'str'\n *   null      -> ''\n *   undefined -> ''\n *   true      -> '1'\n *   false     -> '0'\n *   0         -> '0'\n *   1         -> '1'\n *\n */\nexport const hash_key = (value:undefined|null|boolean|string|number):string|null => {\n\tif (typeof value === 'undefined' || value === null) return null;\n\treturn get_hash(value);\n};\n\nexport const get_hash = (value:boolean|string|number):string => {\n\tif (typeof value === 'boolean') return value ? '1' : '0';\n\treturn value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n */\nexport const escape_html = (str:string):string => {\n\treturn (str + '')\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;');\n};\n\n\n/**\n * use setTimeout if timeout > 0 \n */\nexport const timeout = (fn:()=>void,timeout:number) => {\n\tif( timeout > 0 ){\n\t\treturn setTimeout(fn,timeout);\n\t}\n\n\tfn.call(null);\n\treturn null;\n}\n\n/**\n * Debounce the user provided load function\n *\n */\nexport const loadDebounce = (fn:(value:string,callback:TomLoadCallback) => void,delay:number) => {\n\tvar timeout: null|ReturnType<typeof setTimeout>;\n\treturn function(this:TomSelect, value:string,callback:TomLoadCallback) {\n\t\tvar self = this;\n\n\t\tif( timeout ){\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tclearTimeout(timeout);\n\t\t}\n\t\ttimeout = setTimeout(function() {\n\t\t\ttimeout = null;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tfn.call(self, value, callback);\n\n\t\t}, delay);\n\t};\n};\n\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n */\nexport const debounce_events = ( self:TomSelect, types:string[], fn:() => void ) => {\n\tvar type:string;\n\tvar trigger = self.trigger;\n\tvar event_args:{ [key: string]: any } = {};\n\n\t// override trigger method\n\tself.trigger = function(){\n\t\tvar type = arguments[0];\n\t\tif (types.indexOf(type) !== -1) {\n\t\t\tevent_args[type] = arguments;\n\t\t} else {\n\t\t\treturn trigger.apply(self, arguments);\n\t\t}\n\t};\n\n\t// invoke provided function\n\tfn.apply(self, []);\n\tself.trigger = trigger;\n\n\t// trigger queued events\n\tfor( type of types ){\n\t\tif( type in event_args ){\n\t\t\ttrigger.apply(self, event_args[type]);\n\t\t}\n\t}\n};\n\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n *   - start\n *   - length\n *\n * Note: \"selectionStart, selectionEnd ... apply only to inputs of types text, search, URL, tel and password\"\n * \t- https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n */\nexport const getSelection = (input:HTMLInputElement):{ start: number; length: number } => {\n\treturn {\n\t\tstart\t: input.selectionStart || 0,\n\t\tlength\t: (input.selectionEnd||0) - (input.selectionStart||0),\n\t};\n};\n\n\n/**\n * Prevent default\n *\n */\nexport const preventDefault = (evt?:Event, stop:boolean=false):void => {\n\tif( evt ){\n\t\tevt.preventDefault();\n\t\tif( stop ){\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n}\n\n\n/**\n * Add event helper\n *\n */\nexport const addEvent = (target:EventTarget, type:string, callback:EventListenerOrEventListenerObject, options?:object):void => {\n\ttarget.addEventListener(type,callback,options);\n};\n\n\n/**\n * Return true if the requested key is down\n * Will return false if more than one control character is pressed ( when [ctrl+shift+a] != [ctrl+a] )\n * The current evt may not always set ( eg calling advanceSelection() )\n *\n */\nexport const isKeyDown = ( key_name:keyof (KeyboardEvent|MouseEvent), evt?:KeyboardEvent|MouseEvent ) => {\n\n\tif( !evt ){\n\t\treturn false;\n\t}\n\n\tif( !evt[key_name] ){\n\t\treturn false;\n\t}\n\n\tvar count = (evt.altKey?1:0) + (evt.ctrlKey?1:0) + (evt.shiftKey?1:0) + (evt.metaKey?1:0);\n\n\tif( count === 1 ){\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Get the id of an element\n * If the id attribute is not set, set the attribute with the given id\n *\n */\nexport const getId = (el:Element,id:string) => {\n\tconst existing_id = el.getAttribute('id');\n\tif( existing_id ){\n\t\treturn existing_id;\n\t}\n\n\tel.setAttribute('id',id);\n\treturn id;\n};\n\n\n/**\n * Returns a string with backslashes added before characters that need to be escaped.\n */\nexport const addSlashes = (str:string):string => {\n\treturn str.replace(/[\\\\\"']/g, '\\\\$&');\n};\n\n/**\n *\n */\nexport const append = ( parent:Element|DocumentFragment, node: string|Node|null|undefined ):void =>{\n\tif( node ) parent.append(node);\n};\n", "import defaults from './defaults';\nimport { hash_key } from './utils';\nimport { TomOption, TomSettings, RecursivePartial } from './types/index';\nimport { iterate } from '@orchidjs/sifter/lib/utils';\nimport { TomInput } from './types/index';\n\n\nexport default function getSettings( input:TomInput, settings_user:RecursivePartial<TomSettings>):TomSettings{\n\tvar settings:TomSettings\t= Object.assign({}, defaults, settings_user);\n\n\tvar attr_data\t\t\t\t= settings.dataAttr;\n\tvar field_label\t\t\t\t= settings.labelField;\n\tvar field_value\t\t\t\t= settings.valueField;\n\tvar field_disabled\t\t\t= settings.disabledField;\n\tvar field_optgroup\t\t\t= settings.optgroupField;\n\tvar field_optgroup_label\t= settings.optgroupLabelField;\n\tvar field_optgroup_value\t= settings.optgroupValueField;\n\n\tvar tag_name\t\t\t\t= input.tagName.toLowerCase();\n\tvar placeholder\t\t\t\t= input.getAttribute('placeholder') || input.getAttribute('data-placeholder');\n\n\tif (!placeholder && !settings.allowEmptyOption) {\n\t\tlet option\t\t= input.querySelector('option[value=\"\"]');\n\t\tif( option ){\n\t\t\tplaceholder = option.textContent;\n\t\t}\n\n\t}\n\n\tvar settings_element:{\n\t\tplaceholder\t: null|string,\n\t\toptions\t\t: TomOption[],\n\t\toptgroups\t: TomOption[],\n\t\titems\t\t: string[],\n\t\tmaxItems\t: null|number,\n\t} = {\n\t\tplaceholder\t: placeholder,\n\t\toptions\t\t: [],\n\t\toptgroups\t: [],\n\t\titems\t\t: [],\n\t\tmaxItems\t: null,\n\t};\n\n\n\t/**\n\t * Initialize from a <select> element.\n\t *\n\t */\n\tvar init_select = () => {\n\t\tvar tagName;\n\t\tvar options = settings_element.options;\n\t\tvar optionsMap:{[key:string]:any} = {};\n\t\tvar group_count = 1;\n\t\tlet $order = 0;\n\n\t\tvar readData = (el:HTMLElement):TomOption => {\n\n\t\t\tvar data\t= Object.assign({},el.dataset); // get plain object from DOMStringMap\n\t\t\tvar json\t= attr_data && data[attr_data];\n\n\t\t\tif( typeof json === 'string' && json.length ){\n\t\t\t\tdata = Object.assign(data,JSON.parse(json));\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\t\tvar addOption = (option:HTMLOptionElement, group?:string) => {\n\n\t\t\tvar value = hash_key(option.value);\n\t\t\tif ( value == null ) return;\n\t\t\tif ( !value && !settings.allowEmptyOption) return;\n\n\t\t\t// if the option already exists, it's probably been\n\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t// existing option so that it's rendered in both places.\n\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\tif (group) {\n\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t} else if (!Array.isArray(arr)) {\n\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}else{\n\n\t\t\t\tvar option_data             = readData(option);\n\t\t\t\toption_data[field_label]    = option_data[field_label] || option.textContent;\n\t\t\t\toption_data[field_value]    = option_data[field_value] || value;\n\t\t\t\toption_data[field_disabled] = option_data[field_disabled] || option.disabled;\n\t\t\t\toption_data[field_optgroup] = option_data[field_optgroup] || group;\n\t\t\t\toption_data.$option\t\t\t= option;\n\t\t\t\toption_data.$order\t\t\t= option_data.$order || ++$order;\n\n\t\t\t\toptionsMap[value] = option_data;\n\t\t\t\toptions.push(option_data);\n\t\t\t}\n\n\t\t\tif( option.selected ){\n\t\t\t\tsettings_element.items.push(value);\n\t\t\t}\n\t\t};\n\n\t\tvar addGroup = ( optgroup:HTMLOptGroupElement ) => {\n\t\t\tvar id:string, optgroup_data\n\n\t\t\toptgroup_data\t\t\t\t\t\t\t= readData(optgroup);\n\t\t\toptgroup_data[field_optgroup_label]\t\t= optgroup_data[field_optgroup_label] || optgroup.getAttribute('label') || '';\n\t\t\toptgroup_data[field_optgroup_value]\t\t= optgroup_data[field_optgroup_value] || group_count++;\n\t\t\toptgroup_data[field_disabled]\t\t\t= optgroup_data[field_disabled] || optgroup.disabled;\n\t\t\toptgroup_data.$order\t\t\t\t\t= optgroup_data.$order || ++$order;\n\n\t\t\tsettings_element.optgroups.push(optgroup_data);\n\n\t\t\tid = optgroup_data[field_optgroup_value];\n\n\t\t\titerate(optgroup.children, (option)=>{\n\t\t\t\taddOption(option as HTMLOptionElement, id);\n\t\t\t});\n\n\t\t};\n\n\t\tsettings_element.maxItems = input.hasAttribute('multiple') ? null : 1;\n\n\t\titerate(input.children,(child)=>{\n\t\t\ttagName = child.tagName.toLowerCase();\n\t\t\tif (tagName === 'optgroup') {\n\t\t\t\taddGroup(child as HTMLOptGroupElement);\n\t\t\t} else if (tagName === 'option') {\n\t\t\t\taddOption(child as HTMLOptionElement);\n\t\t\t}\n\t\t});\n\n\t};\n\n\n\t/**\n\t * Initialize from a <input type=\"text\"> element.\n\t *\n\t */\n\tvar init_textbox = () => {\n\t\tconst data_raw = input.getAttribute(attr_data);\n\n\t\tif (!data_raw) {\n\t\t\tvar value = input.value.trim() || '';\n\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\tconst values = value.split(settings.delimiter);\n\n\t\t\titerate( values, (value) => {\n\t\t\t\tconst option:TomOption = {};\n\t\t\t\toption[field_label] = value;\n\t\t\t\toption[field_value] = value;\n\t\t\t\tsettings_element.options.push(option);\n\t\t\t});\n\t\t\tsettings_element.items = values;\n\t\t} else {\n\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\titerate( settings_element.options, (opt) => {\n\t\t\t\tsettings_element.items.push(opt[field_value]);\n\t\t\t});\n\t\t}\n\t};\n\n\n\tif (tag_name === 'select') {\n\t\tinit_select();\n\t} else {\n\t\tinit_textbox();\n\t}\n\n\treturn Object.assign( {}, defaults, settings_element, settings_user) as TomSettings;\n};\n", "\nimport MicroEvent from './contrib/microevent';\nimport MicroPlugin from './contrib/microplugin';\nimport { Sifter, iterate } from '@orchidjs/sifter';\nimport { escape_regex } from '@orchidjs/unicode-variants';\nimport { TomInput, TomArgObject, TomOption, TomOptions, TomCreateFilter, TomCreateCallback, TomItem, TomSettings, TomTemplateNames, TomClearFilter, RecursivePartial } from './types/index';\nimport {highlight, removeHighlight} from './contrib/highlight';\nimport * as constants from './constants';\nimport getSettings from './getSettings';\nimport {\n\thash_key,\n\tget_hash,\n\tescape_html,\n\tdebounce_events,\n\tgetSelection,\n\tpreventDefault,\n\taddEvent,\n\tloadDebounce,\n\ttimeout,\n\tisKeyDown,\n\tgetId,\n\taddSlashes,\n\tappend\n} from './utils';\n\nimport {\n\tgetDom,\n\tisHtmlString,\n\tescapeQuery,\n\ttriggerEvent,\n\tapplyCSS,\n\taddClasses,\n\tremoveClasses,\n\tparentMatch,\n\tgetTail,\n\tisEmptyObject,\n\tnodeIndex,\n\tsetAttr,\n\treplaceNode\n} from './vanilla';\n\nvar instance_i = 0;\n\nexport default class TomSelect extends MicroPlugin(MicroEvent){\n\n\tpublic control_input\t\t\t: HTMLInputElement;\n\tpublic wrapper\t\t\t\t\t: HTMLElement;\n\tpublic dropdown\t\t\t\t\t: HTMLElement;\n\tpublic control\t\t\t\t\t: HTMLElement;\n\tpublic dropdown_content\t\t\t: HTMLElement;\n\tpublic focus_node\t\t\t\t: HTMLElement;\n\n\tpublic order\t\t\t\t\t: number = 0;\n\tpublic settings\t\t\t\t\t: TomSettings;\n\tpublic input\t\t\t\t\t: TomInput;\n\tpublic tabIndex\t\t\t\t\t: number;\n\tpublic is_select_tag\t\t\t: boolean;\n\tpublic rtl\t\t\t\t\t\t: boolean;\n\tprivate inputId\t\t\t\t\t: string;\n\n\tprivate _destroy\t\t\t\t!: () => void;\n\tpublic sifter\t\t\t\t\t: Sifter;\n\n\n\tpublic isOpen\t\t\t\t\t: boolean = false;\n\tpublic isDisabled\t\t\t\t: boolean = false;\n\tpublic isReadOnly\t\t\t\t: boolean = false;\n\tpublic isRequired\t\t\t\t: boolean;\n\tpublic isInvalid\t\t\t\t: boolean = false; // @deprecated 1.8\n\tpublic isValid\t\t\t\t\t: boolean = true;\n\tpublic isLocked\t\t\t\t\t: boolean = false;\n\tpublic isFocused\t\t\t\t: boolean = false;\n\tpublic isInputHidden\t\t\t: boolean = false;\n\tpublic isSetup\t\t\t\t\t: boolean = false;\n\tpublic ignoreFocus\t\t\t\t: boolean = false;\n\tpublic ignoreHover\t\t\t\t: boolean = false;\n\tpublic hasOptions\t\t\t\t: boolean = false;\n\tpublic currentResults\t\t\t?: ReturnType<Sifter['search']>;\n\tpublic lastValue\t\t\t\t: string = '';\n\tpublic caretPos\t\t\t\t\t: number = 0;\n\tpublic loading\t\t\t\t\t: number = 0;\n\tpublic loadedSearches\t\t\t: { [key: string]: boolean } = {};\n\n\tpublic activeOption\t\t\t\t: null|HTMLElement = null;\n\tpublic activeItems\t\t\t\t: TomItem[] = [];\n\n\tpublic optgroups\t\t\t\t: TomOptions = {};\n\tpublic options\t\t\t\t\t: TomOptions = {};\n\tpublic userOptions\t\t\t\t: {[key:string]:boolean} = {};\n\tpublic items\t\t\t\t\t: string[] = [];\n\n\tprivate refreshTimeout\t\t\t: null|ReturnType<typeof setTimeout> = null;\n\n\n\tconstructor( input_arg: string|TomInput, user_settings:RecursivePartial<TomSettings> ){\n\t\tsuper();\n\n\t\tinstance_i++;\n\n\t\tvar dir;\n\t\tvar input\t\t\t\t= getDom( input_arg ) as TomInput;\n\n\t\tif( input.tomselect ){\n\t\t\tthrow new Error('Tom Select already initialized on this element');\n\t\t}\n\n\n\t\tinput.tomselect\t\t\t= this;\n\n\n\t\t// detect rtl environment\n\t\tvar computedStyle\t\t= window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir\t\t\t\t\t\t= computedStyle.getPropertyValue('direction');\n\n\t\t// setup default state\n\t\tconst settings\t\t\t= getSettings( input, user_settings );\n\t\tthis.settings\t\t\t= settings;\n\t\tthis.input\t\t\t\t= input;\n\t\tthis.tabIndex\t\t\t= input.tabIndex || 0;\n\t\tthis.is_select_tag\t\t= input.tagName.toLowerCase() === 'select';\n\t\tthis.rtl\t\t\t\t= /rtl/i.test(dir);\n\t\tthis.inputId\t\t\t= getId(input, 'tomselect-'+instance_i);\n\t\tthis.isRequired\t\t\t= input.required;\n\n\n\t\t// search system\n\t\tthis.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\n\t\t// option-dependent defaults\n\t\tsettings.mode = settings.mode || (settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof settings.hideSelected !== 'boolean') {\n\t\t\tsettings.hideSelected = settings.mode === 'multi';\n\t\t}\n\n\t\tif( typeof settings.hidePlaceholder !== 'boolean' ){\n\t\t\tsettings.hidePlaceholder = settings.mode !== 'multi';\n\t\t}\n\n\t\t// set up createFilter callback\n\t\tvar filter = settings.createFilter;\n\t\tif( typeof filter !== 'function' ){\n\n\t\t\tif( typeof filter === 'string' ){\n\t\t\t\tfilter = new RegExp(filter);\n\t\t\t}\n\n\t\t\tif( filter instanceof RegExp ){\n\t\t\t\tsettings.createFilter = (input) => (filter as RegExp).test(input);\n\t\t\t}else{\n\t\t\t\tsettings.createFilter = (value) => {\n\t\t\t\t\treturn this.settings.duplicates || !this.options[value];\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\n\t\tthis.initializePlugins(settings.plugins);\n\t\tthis.setupCallbacks();\n\t\tthis.setupTemplates();\n\n\n\t\t// Create all elements\n\t\tconst wrapper\t\t\t= getDom('<div>');\n\t\tconst control\t\t\t= getDom('<div>');\n\t\tconst dropdown\t\t\t= this._render('dropdown');\n\t\tconst dropdown_content\t= getDom(`<div role=\"listbox\" tabindex=\"-1\">`);\n\n\t\tconst classes\t\t\t= this.input.getAttribute('class') || '';\n\t\tconst inputMode\t\t\t= settings.mode;\n\n\t\tvar control_input: HTMLInputElement;\n\n\n\t\taddClasses( wrapper, settings.wrapperClass, classes, inputMode);\n\n\n\t\taddClasses(control,settings.controlClass);\n\t\tappend( wrapper, control );\n\n\n\t\taddClasses(dropdown, settings.dropdownClass, inputMode);\n\t\tif( settings.copyClassesToDropdown ){\n\t\t\taddClasses( dropdown, classes);\n\t\t}\n\n\n\t\taddClasses(dropdown_content, settings.dropdownContentClass);\n\t\tappend( dropdown, dropdown_content );\n\n\t\tgetDom( settings.dropdownParent || wrapper ).appendChild( dropdown );\n\n\n\t\t// default controlInput\n\t\tif( isHtmlString(settings.controlInput) ){\n\t\t\tcontrol_input\t\t= getDom(settings.controlInput ) as HTMLInputElement;\n\n\t\t\t// set attributes\n\t\t\tvar attrs = ['autocorrect','autocapitalize','autocomplete','spellcheck'];\n\t\t\titerate(attrs,(attr:string) => {\n\t\t\t\tif( input.getAttribute(attr) ){\n\t\t\t\t\tsetAttr(control_input,{[attr]:input.getAttribute(attr)});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tcontrol_input.tabIndex = -1;\n\t\t\tcontrol.appendChild( control_input );\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t// dom element\n\t\t}else if( settings.controlInput ){\n\t\t\tcontrol_input\t\t= getDom( settings.controlInput ) as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control_input;\n\n\t\t}else{\n\t\t\tcontrol_input\t\t= getDom('<input/>') as HTMLInputElement;\n\t\t\tthis.focus_node\t\t= control;\n\t\t}\n\n\t\tthis.wrapper\t\t\t= wrapper;\n\t\tthis.dropdown\t\t\t= dropdown;\n\t\tthis.dropdown_content\t= dropdown_content;\n\t\tthis.control \t\t\t= control;\n\t\tthis.control_input\t\t= control_input;\n\n\t\tthis.setup();\n\t}\n\n\t/**\n\t * set up event bindings.\n\t *\n\t */\n\tsetup(){\n\n\t\tconst self = this;\n\t\tconst settings\t\t\t\t= self.settings;\n\t\tconst control_input\t\t\t= self.control_input;\n\t\tconst dropdown\t\t\t\t= self.dropdown;\n\t\tconst dropdown_content\t\t= self.dropdown_content;\n\t\tconst wrapper\t\t\t\t= self.wrapper;\n\t\tconst control\t\t\t\t= self.control;\n\t\tconst input\t\t\t\t\t= self.input;\n\t\tconst focus_node\t\t\t= self.focus_node;\n\t\tconst passive_event\t\t\t= { passive: true };\n\t\tconst listboxId\t\t\t\t= self.inputId +'-ts-dropdown';\n\n\n\t\tsetAttr(dropdown_content,{\n\t\t\tid: listboxId\n\t\t});\n\n\t\tsetAttr(focus_node,{\n\t\t\trole:'combobox',\n\t\t\t'aria-haspopup':'listbox',\n\t\t\t'aria-expanded':'false',\n\t\t\t'aria-controls':listboxId\n\t\t});\n\n\t\tconst control_id\t= getId(focus_node,self.inputId + '-ts-control');\n\t\tconst query\t\t\t= \"label[for='\"+escapeQuery(self.inputId)+\"']\";\n\t\tconst label\t\t\t= document.querySelector(query);\n\t\tconst label_click\t= self.focus.bind(self);\n\t\tif( label ){\n\t\t\taddEvent(label,'click', label_click );\n\t\t\tsetAttr(label,{for:control_id});\n\t\t\tconst label_id = getId(label,self.inputId+'-ts-label');\n\t\t\tsetAttr(focus_node,{'aria-labelledby':label_id});\n\t\t\tsetAttr(dropdown_content,{'aria-labelledby':label_id});\n\t\t}\n\n\t\twrapper.style.width = input.style.width;\n\n\t\tif (self.plugins.names.length) {\n\t\t\tconst classes_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\taddClasses( [wrapper,dropdown], classes_plugins);\n\t\t}\n\n\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.is_select_tag ){\n\t\t\tsetAttr(input,{multiple:'multiple'});\n\t\t}\n\n\t\tif (settings.placeholder) {\n\t\t\tsetAttr(control_input,{placeholder:settings.placeholder});\n\t\t}\n\n\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\tif (!settings.splitOn && settings.delimiter) {\n\t\t\tsettings.splitOn = new RegExp('\\\\s*' + escape_regex(settings.delimiter) + '+\\\\s*');\n\t\t}\n\n\t\t// debounce user defined load() if loadThrottle > 0\n\t\t// after initializePlugins() so plugins can create/modify user defined loaders\n\t\tif( settings.load && settings.loadThrottle ){\n\t\t\tsettings.load = loadDebounce(settings.load,settings.loadThrottle)\n\t\t}\n\n\t\taddEvent(dropdown,'mousemove', () => {\n\t\t\tself.ignoreHover = false;\n\t\t});\n\n\t\taddEvent(dropdown,'mouseenter', (e) => {\n\n\t\t\tvar target_match = parentMatch(e.target as HTMLElement, '[data-selectable]', dropdown);\n\t\t\tif( target_match ) self.onOptionHover( e as MouseEvent, target_match );\n\n\t\t}, {capture:true});\n\n\t\t// clicking on an option should select it\n\t\taddEvent(dropdown,'click',(evt) => {\n\t\t\tconst option = parentMatch(evt.target as HTMLElement, '[data-selectable]');\n\t\t\tif( option ){\n\t\t\t\tself.onOptionSelect( evt as MouseEvent, option );\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\t\t});\n\n\t\taddEvent(control,'click', (evt) => {\n\n\t\t\tvar target_match = parentMatch( evt.target as HTMLElement, '[data-ts-item]', control);\n\t\t\tif( target_match && self.onItemSelect(evt as MouseEvent, target_match as TomItem) ){\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// retain focus (see control_input mousedown)\n\t\t\tif( control_input.value != '' ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tself.onClick();\n\t\t\tpreventDefault(evt,true);\n\t\t});\n\n\n\t\t// keydown on focus_node for arrow_down/arrow_up\n\t\taddEvent(focus_node,'keydown',\t\t(e) => self.onKeyDown(e as KeyboardEvent) );\n\n\t\t// keypress and input/keyup\n\t\taddEvent(control_input,'keypress',\t(e) => self.onKeyPress(e as KeyboardEvent) );\n\t\taddEvent(control_input,'input',\t\t(e) => self.onInput(e as KeyboardEvent) );\n\t\taddEvent(focus_node,'blur', \t\t(e) => self.onBlur(e as FocusEvent) );\n\t\taddEvent(focus_node,'focus',\t\t(e) => self.onFocus(e as MouseEvent) );\n\t\taddEvent(control_input,'paste',\t\t(e) => self.onPaste(e as MouseEvent) );\n\n\n\t\tconst doc_mousedown = (evt:Event) => {\n\n\t\t\t// blur if target is outside of this instance\n\t\t\t// dropdown is not always inside wrapper\n\t\t\tconst target = evt.composedPath()[0];\n\t\t\tif( !wrapper.contains(target as HTMLElement) && !dropdown.contains(target as HTMLElement) ){\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.blur();\n\t\t\t\t}\n\t\t\t\tself.inputState();\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// retain focus by preventing native handling. if the\n\t\t\t// event target is the input it should not be modified.\n\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t// Fixes bug #212 which is no covered by tests\n\t\t\tif( target == control_input && self.isOpen ){\n\t\t\t\tevt.stopPropagation();\n\n\t\t\t// clicking anywhere in the control should not blur the control_input (which would close the dropdown)\n\t\t\t}else{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t}\n\n\t\t};\n\n\t\tconst win_scroll = () => {\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.positionDropdown();\n\t\t\t}\n\t\t};\n\n\n\t\taddEvent(document,'mousedown', doc_mousedown);\n\t\taddEvent(window,'scroll', win_scroll, passive_event);\n\t\taddEvent(window,'resize', win_scroll, passive_event);\n\n\t\tthis._destroy = () => {\n\t\t\tdocument.removeEventListener('mousedown',doc_mousedown);\n\t\t\twindow.removeEventListener('scroll',win_scroll);\n\t\t\twindow.removeEventListener('resize',win_scroll);\n\t\t\tif( label ) label.removeEventListener('click',label_click);\n\t\t};\n\n\t\t// store original html and tab index so that they can be\n\t\t// restored when the destroy() method is called.\n\t\tthis.revertSettings = {\n\t\t\tinnerHTML : input.innerHTML,\n\t\t\ttabIndex : input.tabIndex\n\t\t};\n\n\n\t\tinput.tabIndex = -1;\n\t\tinput.insertAdjacentElement('afterend', self.wrapper);\n\n\t\tself.sync(false);\n\t\tsettings.items = [];\n\t\tdelete settings.optgroups;\n\t\tdelete settings.options;\n\n\t\taddEvent(input,'invalid', () => {\n\t\t\tif( self.isValid ){\n\t\t\t\tself.isValid = false;\n\t\t\t\tself.isInvalid = true;\n\t\t\t\tself.refreshState();\n\t\t\t}\n\t\t});\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshItems();\n\t\tself.close(false);\n\t\tself.inputState();\n\t\tself.isSetup = true;\n\n\t\tif( input.disabled ){\n\t\t\tself.disable();\n\t\t}else if( input.readOnly ){\n\t\t\tself.setReadOnly(true);\n\t\t}else{\n\t\t\tself.enable(); //sets tabIndex\n\t\t}\n\n\t\tself.on('change', this.onChange);\n\n\t\taddClasses(input,'tomselected','ts-hidden-accessible');\n\t\tself.trigger('initialize');\n\n\t\t// preload options\n\t\tif (settings.preload === true) {\n\t\t\tself.preload();\n\t\t}\n\n\t}\n\n\n\t/**\n\t * Register options and optgroups\n\t *\n\t */\n\tsetupOptions(options:TomOption[] = [], optgroups:TomOption[] = []){\n\n\t\t// build options table\n\t\tthis.addOptions(options);\n\n\n\t\t// build optgroup table\n\t\titerate( optgroups, (optgroup:TomOption) => {\n\t\t\tthis.registerOptionGroup(optgroup);\n\t\t});\n\t}\n\n\t/**\n\t * Sets up default rendering functions.\n\t */\n\tsetupTemplates() {\n\t\tvar self = this;\n\t\tvar field_label = self.settings.labelField;\n\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\n\t\tvar templates = {\n\t\t\t'optgroup': (data:TomOption) => {\n\t\t\t\tlet optgroup = document.createElement('div');\n\t\t\t\toptgroup.className = 'optgroup';\n\t\t\t\toptgroup.appendChild(data.options);\n\t\t\t\treturn optgroup;\n\n\t\t\t},\n\t\t\t'optgroup_header': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t},\n\t\t\t'option': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'item': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div>' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'option_create': (data:TomOption, escape:typeof escape_html) => {\n\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n\t\t\t},\n\t\t\t'no_results':() => {\n\t\t\t\treturn '<div class=\"no-results\">No results found</div>';\n\t\t\t},\n\t\t\t'loading':() => {\n\t\t\t\treturn '<div class=\"spinner\"></div>';\n\t\t\t},\n\t\t\t'not_loading':() => {},\n\t\t\t'dropdown':() => {\n\t\t\t\treturn '<div></div>';\n\t\t\t}\n\t\t};\n\n\n\t\tself.settings.render = Object.assign({}, templates, self.settings.render);\n\t}\n\n\t/**\n\t * Maps fired events to callbacks provided\n\t * in the settings used when creating the control.\n\t */\n\tsetupCallbacks() {\n\t\tvar key, fn;\n\t\tvar callbacks:{[key:string]:string} = {\n\t\t\t'initialize'      : 'onInitialize',\n\t\t\t'change'          : 'onChange',\n\t\t\t'item_add'        : 'onItemAdd',\n\t\t\t'item_remove'     : 'onItemRemove',\n\t\t\t'item_select'     : 'onItemSelect',\n\t\t\t'clear'           : 'onClear',\n\t\t\t'option_add'      : 'onOptionAdd',\n\t\t\t'option_remove'   : 'onOptionRemove',\n\t\t\t'option_clear'    : 'onOptionClear',\n\t\t\t'optgroup_add'    : 'onOptionGroupAdd',\n\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t'optgroup_clear'  : 'onOptionGroupClear',\n\t\t\t'dropdown_open'   : 'onDropdownOpen',\n\t\t\t'dropdown_close'  : 'onDropdownClose',\n\t\t\t'type'            : 'onType',\n\t\t\t'load'            : 'onLoad',\n\t\t\t'focus'           : 'onFocus',\n\t\t\t'blur'            : 'onBlur'\n\t\t};\n\n\t\tfor (key in callbacks) {\n\n\t\t\tfn = this.settings[callbacks[key] as (keyof TomSettings)];\n\t\t\tif (fn) this.on(key, fn);\n\n\t\t}\n\t}\n\n\t/**\n\t * Sync the Tom Select instance with the original input or select\n\t *\n\t */\n\tsync(get_settings:boolean=true):void{\n\t\tconst self\t\t= this;\n\t\tconst settings\t= get_settings ? getSettings( self.input, {delimiter:self.settings.delimiter} as RecursivePartial<TomSettings> ) : self.settings;\n\n\t\tself.setupOptions(settings.options,settings.optgroups);\n\n\t\tself.setValue(settings.items||[],true); // silent prevents recursion\n\n\t\tself.lastQuery = null; // so updated options will be displayed in dropdown\n\t}\n\n\t/**\n\t * Triggered when the main control element\n\t * has a click event.\n\t *\n\t */\n\tonClick():void {\n\t\tvar self = this;\n\n\t\tif( self.activeItems.length > 0 ){\n\t\t\tself.clearActiveItems();\n\t\t\tself.focus();\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.isFocused && self.isOpen ){\n\t\t\tself.blur();\n\t\t} else {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @deprecated v1.7\n\t *\n\t */\n\tonMouseDown():void {}\n\n\t/**\n\t * Triggered when the value of the control has been changed.\n\t * This should propagate the event to the original DOM\n\t * input / select element.\n\t */\n\tonChange() {\n\t\ttriggerEvent(this.input, 'input');\n\t\ttriggerEvent(this.input, 'change');\n\t}\n\n\t/**\n\t * Triggered on <input> paste.\n\t *\n\t */\n\tonPaste(e:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tif( self.isInputHidden || self.isLocked ){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\t// If a regex or string is included, this will split the pasted\n\t\t// input and create Items for each separate value\n\t\tif( !self.settings.splitOn ){\n\t\t\treturn;\n\t\t}\n\n\t\t// Wait for pasted text to be recognized in value\n\t\tsetTimeout(() => {\n\t\t\tvar pastedText = self.inputValue();\n\t\t\tif( !pastedText.match(self.settings.splitOn)){\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tvar splitInput = pastedText.trim().split(self.settings.splitOn);\n\t\t\titerate( splitInput, (piece:string) => {\n\n\t\t\t\tconst hash = hash_key(piece);\n\t\t\t\tif( hash ){\n\t\t\t\t\tif( this.options[piece] ){\n\t\t\t\t\t\tself.addItem(piece);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tself.createItem(piece);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}, 0);\n\n\t}\n\n\t/**\n\t * Triggered on <input> keypress.\n\t *\n\t */\n\tonKeyPress(e:KeyboardEvent):void {\n\t\tvar self = this;\n\t\tif(self.isLocked){\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\tif (self.settings.create && self.settings.mode === 'multi' && character === self.settings.delimiter) {\n\t\t\tself.createItem();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keydown.\n\t *\n\t */\n\tonKeyDown(e:KeyboardEvent):void {\n\t\tvar self = this;\n\n\t\tself.ignoreHover = true;\n\n\t\tif (self.isLocked) {\n\t\t\tif (e.keyCode !== constants.KEY_TAB) {\n\t\t\t\tpreventDefault(e);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\n\t\t\t// ctrl+A: select all\n\t\t\tcase constants.KEY_A:\n\t\t\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\t\t\tif( self.control_input.value == '' ){\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t// esc: close dropdown\n\t\t\tcase constants.KEY_ESC:\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tpreventDefault(e,true);\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\n\t\t\t// down: open dropdown or move selection down\n\t\t\tcase constants.KEY_DOWN:\n\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\tself.open();\n\t\t\t\t} else if (self.activeOption) {\n\t\t\t\t\tlet next = self.getAdjacent(self.activeOption, 1);\n\t\t\t\t\tif (next) self.setActiveOption(next);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// up: move selection up\n\t\t\tcase constants.KEY_UP:\n\t\t\t\tif (self.activeOption) {\n\t\t\t\t\tlet prev = self.getAdjacent(self.activeOption, -1);\n\t\t\t\t\tif (prev) self.setActiveOption(prev);\n\t\t\t\t}\n\t\t\t\tpreventDefault(e);\n\t\t\t\treturn;\n\n\t\t\t// return: select active option\n\t\t\tcase constants.KEY_RETURN:\n\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// if the option_create=null, the dropdown might be closed\n\t\t\t\t}else if (self.settings.create && self.createItem()) {\n\t\t\t\t\tpreventDefault(e);\n\n\t\t\t\t// don't submit form when searching for a value\n\t\t\t\t}else if( document.activeElement == self.control_input && self.isOpen ){\n\t\t\t\t\tpreventDefault(e);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\n\t\t\t// left: modifiy item selection to the left\n\t\t\tcase constants.KEY_LEFT:\n\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\treturn;\n\n\t\t\t// right: modifiy item selection to the right\n\t\t\tcase constants.KEY_RIGHT:\n\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\treturn;\n\n\t\t\t// tab: select active option and/or create item\n\t\t\tcase constants.KEY_TAB:\n\n\t\t\t\tif( self.settings.selectOnTab ){\n\t\t\t\t\tif( self.canSelect(self.activeOption) ){\n\t\t\t\t\t\tself.onOptionSelect(e,self.activeOption!);\n\n\t\t\t\t\t\t// prevent default [tab] behaviour of jump to the next field\n\t\t\t\t\t\t// if select isFull, then the dropdown won't be open and [tab] will work normally\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t\tif (self.settings.create && self.createItem()) {\n\t\t\t\t\t\tpreventDefault(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\n\t\t\t// delete|backspace: delete items\n\t\t\tcase constants.KEY_BACKSPACE:\n\t\t\tcase constants.KEY_DELETE:\n\t\t\t\tself.deleteSelection(e);\n\t\t\t\treturn;\n\t\t}\n\n\t\t// don't enter text in the control_input when active items are selected\n\t\tif( self.isInputHidden && !isKeyDown(constants.KEY_SHORTCUT,e) ){\n\t\t\tpreventDefault(e);\n\t\t}\n\t}\n\n\t/**\n\t * Triggered on <input> keyup.\n\t *\n\t */\n\tonInput(e:MouseEvent|KeyboardEvent):void {\n\t\t\n\t\tif( this.isLocked ){\n\t\t\treturn;\n\t\t}\n\n\t\tconst value = this.inputValue();\n\t\tif( this.lastValue === value ) return;\n\t\tthis.lastValue = value;\n\t\t\n\t\tif( value == '' ){\n\t\t\tthis._onInput();\n\t\t\treturn;\n\t\t}\n\n\t\tif( this.refreshTimeout ){\n\t\t\tclearTimeout(this.refreshTimeout);\n\t\t}\n\n\t\tthis.refreshTimeout = timeout(()=> {\n\t\t\tthis.refreshTimeout = null;\n\t\t\tthis._onInput();\n\t\t}, this.settings.refreshThrottle);\n\t}\n\n\t_onInput():void {\n\t\tconst value = this.lastValue;\n\n\t\tif( this.settings.shouldLoad.call(this,value) ){\n\t\t\tthis.load(value);\n\t\t}\n\n\t\tthis.refreshOptions();\n\t\tthis.trigger('type', value);\n\t}\n\n\t/**\n\t * Triggered when the user rolls over\n\t * an option in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionHover( evt:MouseEvent|KeyboardEvent, option:HTMLElement ):void{\n\t\tif( this.ignoreHover ) return;\n\t\tthis.setActiveOption(option, false);\n\t}\n\n\t/**\n\t * Triggered on <input> focus.\n\t *\n\t */\n\tonFocus(e?:MouseEvent|KeyboardEvent):void {\n\t\tvar self = this;\n\t\tvar wasFocused = self.isFocused;\n\n\t\tif( self.isDisabled || self.isReadOnly ){\n\t\t\tself.blur();\n\t\t\tpreventDefault(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (self.ignoreFocus) return;\n\t\tself.isFocused = true;\n\t\tif( self.settings.preload === 'focus' ) self.preload();\n\n\t\tif (!wasFocused) self.trigger('focus');\n\n\t\tif (!self.activeItems.length) {\n\t\t\tself.inputState();\n\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t}\n\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Triggered on <input> blur.\n\t *\n\t */\n\tonBlur(e?:FocusEvent):void {\n\n\t\tif( document.hasFocus() === false ) return;\n\n\t\tvar self = this;\n\t\tif (!self.isFocused) return;\n\t\tself.isFocused = false;\n\t\tself.ignoreFocus = false;\n\n\t\tvar deactivate = () => {\n\t\t\tself.close();\n\t\t\tself.setActiveItem();\n\t\t\tself.setCaret(self.items.length);\n\t\t\tself.trigger('blur');\n\t\t};\n\n\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\tself.createItem(null, deactivate);\n\t\t} else {\n\t\t\tdeactivate();\n\t\t}\n\t}\n\n\n\t/**\n\t * Triggered when the user clicks on an option\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\tonOptionSelect( evt:MouseEvent|KeyboardEvent, option:HTMLElement ){\n\t\tvar value, self = this;\n\n\n\t\t// should not be possible to trigger a option under a disabled optgroup\n\t\tif( option.parentElement && option.parentElement.matches('[data-disabled]') ){\n\t\t\treturn;\n\t\t}\n\n\n\t\tif( option.classList.contains('create') ){\n\t\t\tself.createItem(null, () => {\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = option.dataset.value;\n\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.addItem(value);\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( !self.settings.hideSelected && evt.type && /click/.test(evt.type) ){\n\t\t\t\t\tself.setActiveOption(option);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return true if the given option can be selected\n\t *\n\t */\n\tcanSelect(option:HTMLElement|null):boolean{\n\n\t\tif( this.isOpen && option && this.dropdown_content.contains(option) ) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Triggered when the user clicks on an item\n\t * that has been selected.\n\t *\n\t */\n\tonItemSelect( evt?:MouseEvent, item?:TomItem ):boolean{\n\t\tvar self = this;\n\n\t\tif( !self.isLocked && self.settings.mode === 'multi' ){\n\t\t\tpreventDefault(evt);\n\t\t\tself.setActiveItem(item, evt);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Determines whether or not to invoke\n\t * the user-provided option provider / loader\n\t *\n\t * Note, there is a subtle difference between\n\t * this.canLoad() and this.settings.shouldLoad();\n\t *\n\t *\t- settings.shouldLoad() is a user-input validator.\n\t *\tWhen false is returned, the not_loading template\n\t *\twill be added to the dropdown\n\t *\n\t *\t- canLoad() is lower level validator that checks\n\t * \tthe Tom Select instance. There is no inherent user\n\t *\tfeedback when canLoad returns false\n\t *\n\t */\n\tcanLoad(value:string):boolean{\n\n\t\tif( !this.settings.load ) return false;\n\t\tif( this.loadedSearches.hasOwnProperty(value) ) return false;\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Invokes the user-provided option provider / loader.\n\t *\n\t */\n\tload(value:string):void {\n\t\tconst self = this;\n\n\t\tif( !self.canLoad(value) ) return;\n\n\t\taddClasses(self.wrapper,self.settings.loadingClass);\n\t\tself.loading++;\n\n\t\tconst callback = self.loadCallback.bind(self);\n\t\tself.settings.load.call(self, value, callback);\n\t}\n\n\t/**\n\t * Invoked by the user-provided option provider\n\t *\n\t */\n\tloadCallback( options:TomOption[], optgroups:TomOption[] ):void{\n\t\tconst self = this;\n\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\tself.lastQuery = null;\n\n\t\tself.clearActiveOption(); // when new results load, focus should be on first option\n\t\tself.setupOptions(options,optgroups);\n\n\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\n\t\tif (!self.loading) {\n\t\t\tremoveClasses(self.wrapper,self.settings.loadingClass);\n\t\t}\n\n\t\tself.trigger('load', options, optgroups);\n\t}\n\n\tpreload():void{\n\t\tvar classList = this.wrapper.classList;\n\t\tif( classList.contains('preloaded') ) return;\n\t\tclassList.add('preloaded');\n\t\tthis.load('');\n\t}\n\n\n\t/**\n\t * Sets the input field of the control to the specified value.\n\t *\n\t */\n\tsetTextboxValue(value:string = '') {\n\t\tvar input = this.control_input;\n\t\tvar changed = input.value !== value;\n\t\tif (changed) {\n\t\t\tinput.value = value;\n\t\t\ttriggerEvent(input,'update');\n\t\t\tthis.lastValue = value;\n\t\t}\n\t}\n\n\t/**\n\t * Returns the value of the control. If multiple items\n\t * can be selected (e.g. <select multiple>), this returns\n\t * an array. If only one item can be selected, this\n\t * returns a string.\n\t *\n\t */\n\tgetValue():string|string[] {\n\n\t\tif( this.is_select_tag && this.input.hasAttribute('multiple')) {\n\t\t\treturn this.items;\n\t\t}\n\n\t\treturn this.items.join(this.settings.delimiter);\n\t}\n\n\t/**\n\t * Resets the selected items to the given value.\n\t *\n\t */\n\tsetValue( value:string|string[], silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events,() => {\n\t\t\tthis.clear(silent);\n\t\t\tthis.addItems(value, silent);\n\t\t});\n\t}\n\n\n\t/**\n\t * Resets the number of max items to the given value\n\t *\n\t */\n\tsetMaxItems(value:null|number){\n\t\tif(value === 0) value = null; //reset to unlimited items.\n\t\tthis.settings.maxItems = value;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Sets the selected item.\n\t *\n\t */\n\tsetActiveItem( item?:TomItem, e?:MouseEvent|KeyboardEvent ){\n\t\tvar self = this;\n\t\tvar eventName;\n\t\tvar i, begin, end, swap;\n\t\tvar last;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\t// clear the active selection\n\t\tif( !item ){\n\t\t\tself.clearActiveItems();\n\t\t\tif (self.isFocused) {\n\t\t\t\tself.inputState();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// modify selection\n\t\teventName = e && e.type.toLowerCase();\n\n\t\tif (eventName === 'click' && isKeyDown('shiftKey',e) && self.activeItems.length) {\n\t\t\tlast\t= self.getLastActive();\n\t\t\tbegin\t= Array.prototype.indexOf.call(self.control.children, last);\n\t\t\tend\t\t= Array.prototype.indexOf.call(self.control.children, item);\n\n\t\t\tif (begin > end) {\n\t\t\t\tswap  = begin;\n\t\t\t\tbegin = end;\n\t\t\t\tend   = swap;\n\t\t\t}\n\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\titem = self.control.children[i] as TomItem;\n\t\t\t\tif (self.activeItems.indexOf(item) === -1) {\n\t\t\t\t\tself.setActiveItemClass(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreventDefault(e);\n\t\t} else if ((eventName === 'click' && isKeyDown(constants.KEY_SHORTCUT,e) ) || (eventName === 'keydown' && isKeyDown('shiftKey',e))) {\n\t\t\tif( item.classList.contains('active') ){\n\t\t\t\tself.removeActiveItem( item );\n\t\t\t} else {\n\t\t\t\tself.setActiveItemClass(item);\n\t\t\t}\n\t\t} else {\n\t\t\tself.clearActiveItems();\n\t\t\tself.setActiveItemClass(item);\n\t\t}\n\n\t\t// ensure control has focus\n\t\tself.inputState();\n\t\tif (!self.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Set the active and last-active classes\n\t *\n\t */\n\tsetActiveItemClass( item:TomItem ){\n\t\tconst self = this;\n\t\tconst last_active = self.control.querySelector('.last-active');\n\t\tif( last_active ) removeClasses(last_active as HTMLElement,'last-active');\n\n\t\taddClasses(item,'active last-active');\n\t\tself.trigger('item_select', item);\n\t\tif( self.activeItems.indexOf(item) == -1 ){\n\t\t\tself.activeItems.push( item );\n\t\t}\n\t}\n\n\t/**\n\t * Remove active item\n\t *\n\t */\n\tremoveActiveItem( item:TomItem ){\n\t\tvar idx = this.activeItems.indexOf(item);\n\t\tthis.activeItems.splice(idx, 1);\n\t\tremoveClasses(item,'active');\n\t}\n\n\t/**\n\t * Clears all the active items\n\t *\n\t */\n\tclearActiveItems(){\n\t\tremoveClasses(this.activeItems,'active');\n\t\tthis.activeItems = [];\n\t}\n\n\t/**\n\t * Sets the selected item in the dropdown menu\n\t * of available options.\n\t *\n\t */\n\tsetActiveOption( option:null|HTMLElement,scroll:boolean=true ):void{\n\n\t\tif( option === this.activeOption ){\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clearActiveOption();\n\t\tif( !option ) return;\n\n\t\tthis.activeOption = option;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':option.getAttribute('id')});\n\t\tsetAttr(option,{'aria-selected':'true'});\n\t\taddClasses(option,'active');\n\t\tif( scroll ) this.scrollToOption(option);\n\t}\n\n\t/**\n\t * Sets the dropdown_content scrollTop to display the option\n\t *\n\t */\n\tscrollToOption( option:null|HTMLElement, behavior?:string ):void{\n\n\t\tif( !option ) return;\n\n\t\tconst content\t\t= this.dropdown_content;\n\t\tconst height_menu\t= content.clientHeight;\n\t\tconst scrollTop\t\t= content.scrollTop || 0;\n\t\tconst height_item\t= option.offsetHeight;\n\t\tconst y\t\t\t\t= option.getBoundingClientRect().top - content.getBoundingClientRect().top + scrollTop;\n\n\t\tif (y + height_item > height_menu + scrollTop) {\n\t\t\tthis.scroll(y - height_menu + height_item, behavior);\n\n\t\t} else if (y < scrollTop) {\n\t\t\tthis.scroll(y, behavior);\n\t\t}\n\t}\n\n\t/**\n\t * Scroll the dropdown to the given position\n\t *\n\t */\n\tscroll( scrollTop:number, behavior?:string ):void{\n\t\tconst content = this.dropdown_content;\n\t\tif( behavior ){\n\t\t\tcontent.style.scrollBehavior = behavior;\n\t\t}\n\t\tcontent.scrollTop = scrollTop;\n\t\tcontent.style.scrollBehavior = '';\n\t}\n\n\t/**\n\t * Clears the active option\n\t *\n\t */\n\tclearActiveOption(){\n\t\tif( this.activeOption ){\n\t\t\tremoveClasses(this.activeOption,'active');\n\t\t\tsetAttr(this.activeOption,{'aria-selected':null});\n\t\t}\n\t\tthis.activeOption = null;\n\t\tsetAttr(this.focus_node,{'aria-activedescendant':null});\n\t}\n\n\n\t/**\n\t * Selects all items (CTRL + A).\n\t */\n\tselectAll() {\n\t\tconst self = this;\n\n\t\tif (self.settings.mode === 'single') return;\n\n\t\tconst activeItems = self.controlChildren();\n\n\t\tif( !activeItems.length ) return;\n\n\t\tself.inputState();\n\t\tself.close();\n\n\t\tself.activeItems = activeItems;\n\t\titerate( activeItems, (item:TomItem) => {\n\t\t\tself.setActiveItemClass(item);\n\t\t});\n\n\t}\n\n\t/**\n\t * Determines if the control_input should be in a hidden or visible state\n\t *\n\t */\n\tinputState(){\n\t\tvar self = this;\n\n\t\tif( !self.control.contains(self.control_input) ) return;\n\n\t\tsetAttr(self.control_input,{placeholder:self.settings.placeholder});\n\n\t\tif( self.activeItems.length > 0 || (!self.isFocused && self.settings.hidePlaceholder && self.items.length > 0) ){\n\t\t\tself.setTextboxValue();\n\t\t\tself.isInputHidden = true;\n\n\t\t}else{\n\n\t\t\tif( self.settings.hidePlaceholder && self.items.length > 0 ){\n\t\t\t\tsetAttr(self.control_input,{placeholder:''});\n\t\t\t}\n\t\t\tself.isInputHidden = false;\n\t\t}\n\n\t\tself.wrapper.classList.toggle('input-hidden', self.isInputHidden );\n\t}\n\n\t/**\n\t * Get the input value\n\t */\n\tinputValue(){\n\t\treturn this.control_input.value.trim();\n\t}\n\n\t/**\n\t * Gives the control focus.\n\t */\n\tfocus() {\n\t\tvar self = this;\n\t\tif( self.isDisabled || self.isReadOnly) return;\n\n\t\tself.ignoreFocus = true;\n\n\t\tif( self.control_input.offsetWidth ){\n\t\t\tself.control_input.focus();\n\t\t}else{\n\t\t\tself.focus_node.focus();\n\t\t}\n\n\t\tsetTimeout(() => {\n\t\t\tself.ignoreFocus = false;\n\t\t\tself.onFocus();\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Forces the control out of focus.\n\t *\n\t */\n\tblur():void {\n\t\tthis.focus_node.blur();\n\t\tthis.onBlur();\n\t}\n\n\t/**\n\t * Returns a function that scores an object\n\t * to show how good of a match it is to the\n\t * provided query.\n\t *\n\t * @return {function}\n\t */\n\tgetScoreFunction(query:string) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t}\n\n\t/**\n\t * Returns search options for sifter (the system\n\t * for scoring and sorting results).\n\t *\n\t * @see https://github.com/orchidjs/sifter.js\n\t * @return {object}\n\t */\n\tgetSearchOptions() {\n\t\tvar settings = this.settings;\n\t\tvar sort = settings.sortField;\n\t\tif (typeof settings.sortField === 'string') {\n\t\t\tsort = [{field: settings.sortField}];\n\t\t}\n\n\t\treturn {\n\t\t\tfields      : settings.searchField,\n\t\t\tconjunction : settings.searchConjunction,\n\t\t\tsort        : sort,\n\t\t\tnesting     : settings.nesting\n\t\t};\n\t}\n\n\t/**\n\t * Searches through available options and returns\n\t * a sorted array of matches.\n\t *\n\t */\n\tsearch(query:string) : ReturnType<Sifter['search']>{\n\t\tvar result, calculateScore;\n\t\tvar self     = this;\n\t\tvar options  = this.getSearchOptions();\n\n\t\t// validate user-provided result scoring function\n\t\tif ( self.settings.score ){\n\t\t\tcalculateScore = self.settings.score.call(self,query);\n\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\tthrow new Error('Tom Select \"score\" setting must be a function that returns a function');\n\t\t\t}\n\t\t}\n\n\t\t// perform search\n\t\tif (query !== self.lastQuery) {\n\t\t\tself.lastQuery\t\t\t= query;\n\t\t\tresult\t\t\t\t\t= self.sifter.search(query, Object.assign(options, {score: calculateScore}));\n\t\t\tself.currentResults\t\t= result;\n\t\t} else {\n\t\t\tresult\t\t\t\t\t= Object.assign( {}, self.currentResults);\n\t\t}\n\n\t\t// filter out selected items\n\t\tif( self.settings.hideSelected ){\n\t\t\tresult.items = result.items.filter((item) => {\n\t\t\t\tlet hashed = hash_key(item.id);\n\t\t\t\treturn !(hashed && self.items.indexOf(hashed) !== -1 );\n\t\t\t});\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Refreshes the list of available options shown\n\t * in the autocomplete dropdown menu.\n\t *\n\t */\n\trefreshOptions( triggerDropdown:boolean = true ){\n\t\tvar i, j, k, n, optgroup, optgroups, html:DocumentFragment, has_create_option, active_group;\n\t\tvar create;\n\n\t\ttype Group = {fragment:DocumentFragment,order:number,optgroup:string}\n\t\tconst groups: {[key:string]:number} = {};\n\t\tconst groups_order:Group[]\t= [];\n\n\t\tvar self\t\t\t\t\t= this;\n\t\tvar query\t\t\t\t\t= self.inputValue();\n\t\tconst same_query\t\t\t= query === self.lastQuery || (query == '' && self.lastQuery == null);\n\t\tvar results\t\t\t\t\t= self.search(query);\n\t\tvar active_option:HTMLElement|null = null;\n\t\tvar show_dropdown\t\t\t= self.settings.shouldOpen || false;\n\t\tvar dropdown_content\t\t= self.dropdown_content;\n\n\n\t\tif( same_query ){\n\t\t\tactive_option\t\t\t= self.activeOption;\n\n\t\t\tif( active_option ){\n\t\t\t\tactive_group = active_option.closest('[data-group]') as HTMLElement;\n\t\t\t}\n\t\t}\n\n\t\t// build markup\n\t\tn = results.items.length;\n\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t}\n\n\t\tif( n > 0 ){\n\t\t\tshow_dropdown = true;\n\t\t}\n\n\t\t// get fragment for group and the position of the group in group_order\n\t\tconst getGroupFragment = (optgroup:string,order:number):[number,DocumentFragment] => {\n\n\t\t\tlet group_order_i = groups[optgroup];\n\n\t\t\tif( group_order_i !== undefined ){\n\t\t\t\tlet order_group = groups_order[group_order_i];\n\t\t\t\tif( order_group !== undefined ){\n\t\t\t\t\treturn [group_order_i,order_group.fragment];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet group_fragment = document.createDocumentFragment();\n\t\t\tgroup_order_i = groups_order.length;\n\t\t\tgroups_order.push({fragment:group_fragment,order,optgroup});\n\n\t\t\treturn [group_order_i,group_fragment]\n\t\t}\n\n\t\t// render and group available options individually\n\t\tfor (i = 0; i < n; i++) {\n\n\t\t\t// get option dom element\n\t\t\tlet item\t\t\t= results.items[i];\n\t\t\tif( !item ) continue;\n\n\t\t\tlet opt_value\t\t= item.id;\n\t\t\tlet option\t\t\t= self.options[opt_value];\n\n\t\t\tif( option === undefined ) continue;\n\n\t\t\tlet opt_hash\t\t= get_hash(opt_value);\n\t\t\tlet option_el\t\t= self.getOption(opt_hash,true) as HTMLElement;\n\n\t\t\t// toggle 'selected' class\n\t\t\tif( !self.settings.hideSelected ){\n\t\t\t\toption_el.classList.toggle('selected', self.items.includes(opt_hash) );\n\t\t\t}\n\n\t\t\toptgroup    = option[self.settings.optgroupField] || '';\n\t\t\toptgroups   = Array.isArray(optgroup) ? optgroup : [optgroup];\n\t\t\t\n\n\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\toptgroup = optgroups[j];\n\n\t\t\t\tlet order = option.$order;\n\t\t\t\tlet self_optgroup = self.optgroups[optgroup];\n\t\t\t\tif( self_optgroup === undefined ){\t\t\t\t\t\n\t\t\t\t\toptgroup = '';\n\t\t\t\t}else{\n\t\t\t\t\torder = self_optgroup.$order;\n\t\t\t\t}\n\n\t\t\t\tconst [group_order_i,group_fragment] = getGroupFragment(optgroup,order);\n\n\n\t\t\t\t// nodes can only have one parent, so if the option is in mutple groups, we need a clone\n\t\t\t\tif( j > 0 ){\n\t\t\t\t\toption_el = option_el.cloneNode(true) as HTMLElement;\n\t\t\t\t\tsetAttr(option_el,{id: option.$id+'-clone-'+j,'aria-selected':null});\n\t\t\t\t\toption_el.classList.add('ts-cloned');\n\t\t\t\t\tremoveClasses(option_el,'active');\n\n\n\t\t\t\t\t// make sure we keep the activeOption in the same group\n\t\t\t\t\tif( self.activeOption && self.activeOption.dataset.value == opt_value ){\n\t\t\t\t\t\tif( active_group && active_group.dataset.group === optgroup.toString() ){\n\t\t\t\t\t\t\tactive_option = option_el;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\t\n\t\t\t\t\n\t\t\t\tgroup_fragment.appendChild(option_el);\n\t\t\t\tif( optgroup != '' ){\n\t\t\t\t\tgroups[optgroup] = group_order_i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// sort optgroups\n\t\tif( self.settings.lockOptgroupOrder ){\n\t\t\tgroups_order.sort((a, b) => {\n\t\t\t\treturn a.order - b.order;\n\t\t\t});\n\t\t}\n\n\t\t// render optgroup headers & join groups\n\t\thtml = document.createDocumentFragment();\n\t\titerate( groups_order, (group_order:Group) => {\n\n\t\t\tlet group_fragment = group_order.fragment;\n\t\t\tlet optgroup = group_order.optgroup\n\n\t\t\tif( !group_fragment || !group_fragment.children.length ) return;\n\n\t\t\tlet group_heading = self.optgroups[optgroup];\n\n\t\t\tif( group_heading !== undefined ){\n\n\t\t\t\tlet group_options = document.createDocumentFragment();\n\t\t\t\tlet header = self.render('optgroup_header', group_heading);\n\t\t\t\tappend( group_options, header );\n\t\t\t\tappend( group_options, group_fragment );\n\n\t\t\t\tlet group_html = self.render('optgroup', {group:group_heading,options:group_options} );\n\n\t\t\t\tappend( html, group_html );\n\n\t\t\t} else {\n\t\t\t\tappend( html, group_fragment );\n\t\t\t}\n\t\t});\n\n\t\tdropdown_content.innerHTML = '';\n\t\tappend( dropdown_content, html );\n\n\t\t// highlight matching terms inline\n\t\tif (self.settings.highlight) {\n\t\t\tremoveHighlight( dropdown_content );\n\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\titerate( results.tokens, (tok) => {\n\t\t\t\t\thighlight( dropdown_content, tok.regex);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// helper method for adding templates to dropdown\n\t\tvar add_template = (template:TomTemplateNames) => {\n\t\t\tlet content = self.render(template,{input:query});\n\t\t\tif( content ){\n\t\t\t\tshow_dropdown = true;\n\t\t\t\tdropdown_content.insertBefore(content, dropdown_content.firstChild);\n\t\t\t}\n\t\t\treturn content;\n\t\t};\n\n\n\t\t// add loading message\n\t\tif( self.loading ){\n\t\t\tadd_template('loading');\n\n\t\t// invalid query\n\t\t}else if( !self.settings.shouldLoad.call(self,query) ){\n\t\t\tadd_template('not_loading');\n\n\t\t// add no_results message\n\t\t}else if( results.items.length === 0 ){\n\t\t\tadd_template('no_results');\n\n\t\t}\n\n\n\n\t\t// add create option\n\t\thas_create_option = self.canCreate(query);\n\t\tif (has_create_option) {\n\t\t\tcreate = add_template('option_create');\n\t\t}\n\n\n\t\t// activate\n\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\tif( show_dropdown ){\n\n\t\t\tif (results.items.length > 0) {\n\n\t\t\t\tif( !active_option && self.settings.mode === 'single' && self.items[0] != undefined ){\n\t\t\t\t\tactive_option = self.getOption(self.items[0]);\n\t\t\t\t}\n\n\t\t\t\tif( !dropdown_content.contains(active_option)  ){\n\n\t\t\t\t\tlet active_index = 0;\n\t\t\t\t\tif( create && !self.settings.addPrecedence ){\n\t\t\t\t\t\tactive_index = 1;\n\t\t\t\t\t}\n\t\t\t\t\tactive_option = self.selectable()[active_index] as HTMLElement;\n\t\t\t\t}\n\n\t\t\t}else if( create ){\n\t\t\t\tactive_option = create;\n\t\t\t}\n\n\t\t\tif( triggerDropdown && !self.isOpen ){\n\t\t\t\tself.open();\n\t\t\t\tself.scrollToOption(active_option,'auto');\n\t\t\t}\n\t\t\tself.setActiveOption(active_option);\n\n\t\t}else{\n\t\t\tself.clearActiveOption();\n\t\t\tif( triggerDropdown && self.isOpen ){\n\t\t\t\tself.close(false); // if create_option=null, we want the dropdown to close but not reset the textbox value\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Return list of selectable options\n\t *\n\t */\n\tselectable():NodeList{\n\t\treturn this.dropdown_content.querySelectorAll('[data-selectable]');\n\t}\n\n\n\n\t/**\n\t * Adds an available option. If it already exists,\n\t * nothing will happen. Note: this does not refresh\n\t * the options list dropdown (use `refreshOptions`\n\t * for that).\n\t *\n\t * Usage:\n\t *\n\t *   this.addOption(data)\n\t *\n\t */\n\taddOption( data:TomOption, user_created = false ):false|string {\n\t\tconst self = this;\n\n\t\t// @deprecated 1.7.7\n\t\t// use addOptions( array, user_created ) for adding multiple options\n\t\tif( Array.isArray(data) ){\n\t\t\tself.addOptions( data, user_created);\n\t\t\treturn false;\n\t\t}\n\n\t\tconst key = hash_key(data[self.settings.valueField]);\n\t\tif( key === null || self.options.hasOwnProperty(key) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tdata.$order\t\t\t= data.$order || ++self.order;\n\t\tdata.$id\t\t\t= self.inputId + '-opt-' + data.$order;\n\t\tself.options[key]\t= data;\n\t\tself.lastQuery\t\t= null;\n\n\t\tif( user_created ){\n\t\t\tself.userOptions[key] = user_created;\n\t\t\tself.trigger('option_add', key, data);\n\t\t}\n\n\t\treturn key;\n\t}\n\n\t/**\n\t * Add multiple options\n\t *\n\t */\n\taddOptions( data:TomOption[], user_created = false ):void{\n\t\titerate( data, (dat:TomOption) => {\n\t\t\tthis.addOption(dat, user_created);\n\t\t});\n\t}\n\n\t/**\n\t * @deprecated 1.7.7\n\t */\n\tregisterOption( data:TomOption ):false|string {\n\t\treturn this.addOption(data);\n\t}\n\n\t/**\n\t * Registers an option group to the pool of option groups.\n\t *\n\t * @return {boolean|string}\n\t */\n\tregisterOptionGroup(data:TomOption) {\n\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\n\t\tif ( key === null ) return false;\n\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.optgroups[key] = data;\n\t\treturn key;\n\t}\n\n\t/**\n\t * Registers a new optgroup for options\n\t * to be bucketed into.\n\t *\n\t */\n\taddOptionGroup(id:string, data:TomOption) {\n\t\tvar hashed_id;\n\t\tdata[this.settings.optgroupValueField] = id;\n\n\t\tif( hashed_id = this.registerOptionGroup(data) ){\n\t\t\tthis.trigger('optgroup_add', hashed_id, data);\n\t\t}\n\t}\n\n\t/**\n\t * Removes an existing option group.\n\t *\n\t */\n\tremoveOptionGroup(id:string) {\n\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\tdelete this.optgroups[id];\n\t\t\tthis.clearCache();\n\t\t\tthis.trigger('optgroup_remove', id);\n\t\t}\n\t}\n\n\t/**\n\t * Clears all existing option groups.\n\t */\n\tclearOptionGroups() {\n\t\tthis.optgroups = {};\n\t\tthis.clearCache();\n\t\tthis.trigger('optgroup_clear');\n\t}\n\n\t/**\n\t * Updates an option available for selection. If\n\t * it is visible in the selected items or options\n\t * dropdown, it will be re-rendered automatically.\n\t *\n\t */\n\tupdateOption(value:string, data:TomOption) {\n\t\tconst self = this;\n\t\tvar item_new;\n\t\tvar index_item;\n\n\t\tconst value_old\t\t= hash_key(value);\n\t\tconst value_new\t\t= hash_key(data[self.settings.valueField]);\n\n\t\t// sanity checks\n\t\tif( value_old === null ) return;\n\n\t\tconst data_old\t\t= self.options[value_old];\n\n\t\tif( data_old == undefined ) return;\n\t\tif( typeof value_new !== 'string' ) throw new Error('Value must be set in option data');\n\n\n\t\tconst option\t\t= self.getOption(value_old);\n\t\tconst item\t\t\t= self.getItem(value_old);\n\n\n\t\tdata.$order = data.$order || data_old.$order;\n\t\tdelete self.options[value_old];\n\n\t\t// invalidate render cache\n\t\t// don't remove existing node yet, we'll remove it after replacing it\n\t\tself.uncacheValue(value_new);\n\n\t\tself.options[value_new] = data;\n\n\t\t// update the option if it's in the dropdown\n\t\tif( option ){\n\t\t\tif( self.dropdown_content.contains(option) ){\n\n\t\t\t\tconst option_new\t= self._render('option', data);\n\t\t\t\treplaceNode(option, option_new);\n\n\t\t\t\tif( self.activeOption === option ){\n\t\t\t\t\tself.setActiveOption(option_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\toption.remove();\n\t\t}\n\n\t\t// update the item if we have one\n\t\tif( item ){\n\t\t\tindex_item = self.items.indexOf(value_old);\n\t\t\tif (index_item !== -1) {\n\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t}\n\n\t\t\titem_new\t= self._render('item', data);\n\n\t\t\tif( item.classList.contains('active') ) addClasses(item_new,'active');\n\n\t\t\treplaceNode( item, item_new);\n\t\t}\n\n\t\t// invalidate last query because we might have updated the sortField\n\t\tself.lastQuery = null;\n\t}\n\n\t/**\n\t * Removes a single option.\n\t *\n\t */\n\tremoveOption(value:string, silent?:boolean):void {\n\t\tconst self = this;\n\t\tvalue = get_hash(value);\n\n\t\tself.uncacheValue(value);\n\n\t\tdelete self.userOptions[value];\n\t\tdelete self.options[value];\n\t\tself.lastQuery = null;\n\t\tself.trigger('option_remove', value);\n\t\tself.removeItem(value, silent);\n\t}\n\n\t/**\n\t * Clears all options.\n\t */\n\tclearOptions(filter?:TomClearFilter ) {\n\n\t\tconst boundFilter = (filter || this.clearFilter).bind(this);\n\n\t\tthis.loadedSearches\t\t= {};\n\t\tthis.userOptions\t\t= {};\n\t\tthis.clearCache();\n\n\t\tconst selected:TomOptions\t= {};\n\t\titerate(this.options,(option:TomOption,key:string)=>{\n\t\t\tif( boundFilter(option,key as string) ){\n\t\t\t\tselected[key] = option;\n\t\t\t}\n\t\t});\n\n\t\tthis.options = this.sifter.items = selected;\n\t\tthis.lastQuery = null;\n\t\tthis.trigger('option_clear');\n\t}\n\n\t/**\n\t * Used by clearOptions() to decide whether or not an option should be removed\n\t * Return true to keep an option, false to remove\n\t *\n\t */\n\tclearFilter(option:TomOption,value:string){\n\t\tif( this.items.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Returns the dom element of the option\n\t * matching the given value.\n\t *\n\t */\n\tgetOption(value:undefined|null|boolean|string|number, create:boolean=false):null|HTMLElement {\n\n\t\tconst hashed = hash_key(value);\n\t\tif( hashed === null ) return null;\n\n\t\tconst option = this.options[hashed];\n\t\tif( option != undefined ){\n\n\t\t\tif( option.$div ){\n\t\t\t\treturn option.$div;\n\t\t\t}\n\n\t\t\tif( create ){\n\t\t\t\treturn this._render('option', option);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Returns the dom element of the next or previous dom element of the same type\n\t * Note: adjacent options may not be adjacent DOM elements (optgroups)\n\t *\n\t */\n\tgetAdjacent( option:null|HTMLElement, direction:number, type:string = 'option' ) : HTMLElement|null{\n\t\tvar self = this, all;\n\n\t\tif( !option ){\n\t\t\treturn null;\n\t\t}\n\n\t\tif( type == 'item' ){\n\t\t\tall\t\t\t= self.controlChildren();\n\t\t}else{\n\t\t\tall\t\t\t= self.dropdown_content.querySelectorAll('[data-selectable]');\n\t\t}\n\n\t\tfor( let i = 0; i < all.length; i++ ){\n\t\t\tif( all[i] != option ){\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif( direction > 0 ){\n\t\t\t\treturn all[i+1] as HTMLElement;\n\t\t\t}\n\n\t\t\treturn all[i-1] as HTMLElement;\n\t\t}\n\t\treturn null;\n\t}\n\n\n\t/**\n\t * Returns the dom element of the item\n\t * matching the given value.\n\t *\n\t */\n\tgetItem(item:string|TomItem|null):null|TomItem {\n\n\t\tif( typeof item == 'object' ){\n\t\t\treturn item;\n\t\t}\n\n\t\tvar value = hash_key(item);\n\t\treturn value !== null\n\t\t\t? this.control.querySelector(`[data-value=\"${addSlashes(value)}\"]`)\n\t\t\t: null;\n\t}\n\n\t/**\n\t * \"Selects\" multiple items at once. Adds them to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItems( values:string|string[], silent?:boolean ):void{\n\t\tvar self = this;\n\n\t\tvar items = Array.isArray(values) ? values : [values];\n\t\titems = items.filter(x => self.items.indexOf(x) === -1);\n\t\tconst last_item = items[items.length - 1];\n\t\titems.forEach(item => {\n\t\t\tself.isPending = (item !== last_item);\n\t\t\tself.addItem(item, silent);\n\t\t});\n\t}\n\n\t/**\n\t * \"Selects\" an item. Adds it to the list\n\t * at the current caret position.\n\t *\n\t */\n\taddItem( value:string, silent?:boolean ):void{\n\t\tvar events = silent ? [] : ['change','dropdown_close'];\n\n\t\tdebounce_events(this, events, () => {\n\t\t\tvar item, wasFull;\n\t\t\tconst self = this;\n\t\t \tconst inputMode = self.settings.mode;\n\t\t\tconst hashed = hash_key(value);\n\n\t\t\tif( hashed && self.items.indexOf(hashed) !== -1 ){\n\n\t\t\t\tif( inputMode === 'single' ){\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\n\t\t\t\tif( inputMode === 'single' || !self.settings.duplicates ){\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (hashed === null || !self.options.hasOwnProperty(hashed)) return;\n\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\n\t\t\titem = self._render('item', self.options[hashed]);\n\n\t\t\tif( self.control.contains(item) ){ // duplicates\n\t\t\t\titem = item.cloneNode(true) as HTMLElement;\n\t\t\t}\n\n\t\t\twasFull = self.isFull();\n\t\t\tself.items.splice(self.caretPos, 0, hashed);\n\t\t\tself.insertAtCaret(item);\n\n\t\t\tif (self.isSetup) {\n\n\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\tif( !self.isPending && self.settings.hideSelected ){\n\t\t\t\t\tlet option = self.getOption(hashed);\n\t\t\t\t\tlet next = self.getAdjacent(option, 1);\n\t\t\t\t\tif( next ){\n\t\t\t\t\t\tself.setActiveOption(next);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// refreshOptions after setActiveOption(),\n\t\t\t\t// otherwise setActiveOption() will be called by refreshOptions() with the wrong value\n\t\t\t\tif( !self.isPending && !self.settings.closeAfterSelect ){\n\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t}\n\n\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\tif( self.settings.closeAfterSelect != false && self.isFull() ){\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\n\t\t\t\tself.trigger('item_add', hashed, item);\n\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\tself.inputState();\n\t\t\t\tself.refreshState();\n\t\t\t}\n\n\t\t});\n\t}\n\n\t/**\n\t * Removes the selected item matching\n\t * the provided value.\n\t *\n\t */\n\tremoveItem( item:string|TomItem|null=null, silent?:boolean ){\n\t\tconst self\t\t= this;\n\t\titem\t\t\t= self.getItem(item);\n\n\t\tif( !item ) return;\n\n\t\tvar i,idx;\n\t\tconst value\t= item.dataset.value;\n\t\ti = nodeIndex(item);\n\n\t\titem.remove();\n\t\tif( item.classList.contains('active') ){\n\t\t\tidx = self.activeItems.indexOf(item);\n\t\t\tself.activeItems.splice(idx, 1);\n\t\t\tremoveClasses(item,'active');\n\t\t}\n\n\t\tself.items.splice(i, 1);\n\t\tself.lastQuery = null;\n\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\tself.removeOption(value, silent);\n\t\t}\n\n\t\tif (i < self.caretPos) {\n\t\t\tself.setCaret(self.caretPos - 1);\n\t\t}\n\n\t\tself.updateOriginalInput({silent: silent});\n\t\tself.refreshState();\n\t\tself.positionDropdown();\n\t\tself.trigger('item_remove', value, item);\n\n\t}\n\n\t/**\n\t * Invokes the `create` method provided in the\n\t * TomSelect options that should provide the data\n\t * for the new item, given the user input.\n\t *\n\t * Once this completes, it will be added\n\t * to the item list.\n\t *\n\t */\n\tcreateItem( input:null|string=null, callback:TomCreateCallback = ()=>{} ):boolean{\n\n\t\t// triggerDropdown parameter @deprecated 2.1.1\n\t\tif( arguments.length === 3 ){\n\t\t\tcallback = arguments[2];\n\t\t}\n\t\tif( typeof callback != 'function' ){\n\t\t\tcallback = () => {};\n\t\t}\n\n\t\tvar self  = this;\n\t\tvar caret = self.caretPos;\n\t\tvar output;\n\t\tinput = input || self.inputValue();\n\n\t\tif (!self.canCreate(input)) {\n\t\t\tcallback();\n\t\t\treturn false;\n\t\t}\n\n\t\tself.lock();\n\n\t\tvar created = false;\n\t\tvar create = (data?:boolean|TomOption) => {\n\t\t\tself.unlock();\n\n\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\tif( typeof value !== 'string' ){\n\t\t\t\treturn callback();\n\t\t\t}\n\n\t\t\tself.setTextboxValue();\n\t\t\tself.addOption(data,true);\n\t\t\tself.setCaret(caret);\n\t\t\tself.addItem(value);\n\t\t\tcallback(data);\n\t\t\tcreated = true;\n\t\t};\n\n\t\tif( typeof self.settings.create === 'function' ){\n\t\t\toutput = self.settings.create.call(this, input, create);\n\t\t}else{\n\t\t\toutput = {\n\t\t\t\t[self.settings.labelField]: input,\n\t\t\t\t[self.settings.valueField]: input,\n\t\t\t};\n\t\t}\n\n\t\tif( !created ){\n\t\t\tcreate(output);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Re-renders the selected item lists.\n\t */\n\trefreshItems() {\n\t\tvar self = this;\n\t\tself.lastQuery = null;\n\n\t\tif (self.isSetup) {\n\t\t\tself.addItems(self.items);\n\t\t}\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshState();\n\t}\n\n\t/**\n\t * Updates all state-dependent attributes\n\t * and CSS classes.\n\t */\n\trefreshState() {\n\t\tconst self     = this;\n\n\t\tself.refreshValidityState();\n\n\t\tconst isFull\t= self.isFull();\n\t\tconst isLocked\t= self.isLocked;\n\n\t\tself.wrapper.classList.toggle('rtl',self.rtl);\n\n\n\t\tconst wrap_classList = self.wrapper.classList;\n\n\t\twrap_classList.toggle('focus', self.isFocused)\n\t\twrap_classList.toggle('disabled', self.isDisabled)\n\t\twrap_classList.toggle('readonly', self.isReadOnly)\n\t\twrap_classList.toggle('required', self.isRequired)\n\t\twrap_classList.toggle('invalid', !self.isValid)\n\t\twrap_classList.toggle('locked', isLocked)\n\t\twrap_classList.toggle('full', isFull)\n\t\twrap_classList.toggle('input-active', self.isFocused && !self.isInputHidden)\n\t\twrap_classList.toggle('dropdown-active', self.isOpen)\n\t\twrap_classList.toggle('has-options', isEmptyObject(self.options) )\n\t\twrap_classList.toggle('has-items', self.items.length > 0);\n\n\t}\n\n\n\t/**\n\t * Update the `required` attribute of both input and control input.\n\t *\n\t * The `required` property needs to be activated on the control input\n\t * for the error to be displayed at the right place. `required` also\n\t * needs to be temporarily deactivated on the input since the input is\n\t * hidden and can't show errors.\n\t */\n\trefreshValidityState() {\n\t\tvar self = this;\n\n\t\tif( !self.input.validity ){\n\t\t\treturn;\n\t\t}\n\n\t\tself.isValid = self.input.validity.valid;\n\t\tself.isInvalid = !self.isValid;\n\t}\n\n\t/**\n\t * Determines whether or not more items can be added\n\t * to the control without exceeding the user-defined maximum.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFull() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t}\n\n\t/**\n\t * Refreshes the original <select> or <input>\n\t * element to reflect the current state.\n\t *\n\t */\n\tupdateOriginalInput( opts:TomArgObject = {} ){\n\t\tconst self = this;\n\t\tvar option, label;\n\n\t\tconst empty_option = self.input.querySelector('option[value=\"\"]') as HTMLOptionElement;\n\n\t\tif( self.is_select_tag ){\n\n\t\t\tconst selected:HTMLOptionElement[]\t\t= [];\n\t\t\tconst has_selected:number\t\t\t\t= self.input.querySelectorAll('option:checked').length;\n\n\t\t\tfunction AddSelected(option_el:HTMLOptionElement|null, value:string, label:string):HTMLOptionElement{\n\n\t\t\t\tif( !option_el ){\n\t\t\t\t\toption_el = getDom('<option value=\"' + escape_html(value) + '\">' + escape_html(label) + '</option>') as HTMLOptionElement;\n\t\t\t\t}\n\n\t\t\t\t// don't move empty option from top of list\n\t\t\t\t// fixes bug in firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1725293\n\t\t\t\tif( option_el != empty_option ){\n\t\t\t\t\tself.input.append(option_el);\n\t\t\t\t}\n\n\t\t\t\tselected.push(option_el);\n\n\t\t\t\t// marking empty option as selected can break validation\n\t\t\t\t// fixes https://github.com/orchidjs/tom-select/issues/303\n\t\t\t\tif( option_el != empty_option || has_selected > 0 ){\n\t\t\t\t\toption_el.selected = true;\n\t\t\t\t}\n\n\t\t\t\treturn option_el;\n\t\t\t}\n\n\t\t\t// unselect all selected options\n\t\t\tself.input.querySelectorAll('option:checked').forEach((option_el:Element) => {\n\t\t\t\t(<HTMLOptionElement>option_el).selected = false;\n\t\t\t});\n\n\n\t\t\t// nothing selected?\n\t\t\tif( self.items.length == 0 && self.settings.mode == 'single' ){\n\n\t\t\t\tAddSelected(empty_option, \"\", \"\");\n\n\t\t\t// order selected <option> tags for values in self.items\n\t\t\t}else{\n\n\t\t\t\tself.items.forEach((value)=>{\n\t\t\t\t\toption\t\t\t= self.options[value]!;\n\t\t\t\t\tlabel\t\t\t= option[self.settings.labelField] || '';\n\n\t\t\t\t\tif( selected.includes(option.$option) ){\n\t\t\t\t\t\tconst reuse_opt = self.input.querySelector(`option[value=\"${addSlashes(value)}\"]:not(:checked)`) as HTMLOptionElement;\n\t\t\t\t\t\tAddSelected(reuse_opt, value, label);\n\t\t\t\t\t}else{\n\t\t\t\t\t\toption.$option\t= AddSelected(option.$option, value, label);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\n\t\t} else {\n\t\t\tself.input.value = self.getValue() as string;\n\t\t}\n\n\t\tif (self.isSetup) {\n\t\t\tif (!opts.silent) {\n\t\t\t\tself.trigger('change', self.getValue() );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Shows the autocomplete dropdown containing\n\t * the available options.\n\t */\n\topen() {\n\t\tvar self = this;\n\n\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\tself.isOpen = true;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'true'});\n\t\tself.refreshState();\n\t\tapplyCSS(self.dropdown,{visibility: 'hidden', display: 'block'});\n\t\tself.positionDropdown();\n\t\tapplyCSS(self.dropdown,{visibility: 'visible', display: 'block'});\n\t\tself.focus();\n\t\tself.trigger('dropdown_open', self.dropdown);\n\t}\n\n\t/**\n\t * Closes the autocomplete dropdown menu.\n\t */\n\tclose(setTextboxValue=true) {\n\t\tvar self = this;\n\t\tvar trigger = self.isOpen;\n\n\t\tif( setTextboxValue ){\n\n\t\t\t// before blur() to prevent form onchange event\n\t\t\tself.setTextboxValue();\n\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.inputState();\n\t\t\t}\n\t\t}\n\n\t\tself.isOpen = false;\n\t\tsetAttr(self.focus_node,{'aria-expanded': 'false'});\n\t\tapplyCSS(self.dropdown,{display: 'none'});\n\t\tif( self.settings.hideSelected ){\n\t\t\tself.clearActiveOption();\n\t\t}\n\t\tself.refreshState();\n\n\t\tif (trigger) self.trigger('dropdown_close', self.dropdown);\n\t}\n\n\t/**\n\t * Calculates and applies the appropriate\n\t * position of the dropdown if dropdownParent = 'body'.\n\t * Otherwise, position is determined by css\n\t */\n\tpositionDropdown(){\n\n\t\tif( this.settings.dropdownParent !== 'body' ){\n\t\t\treturn;\n\t\t}\n\n\t\tvar context\t\t\t= this.control;\n\t\tvar rect\t\t\t= context.getBoundingClientRect();\n\t\tvar top\t\t\t\t= context.offsetHeight + rect.top  + window.scrollY;\n\t\tvar left\t\t\t= rect.left + window.scrollX;\n\n\n\t\tapplyCSS(this.dropdown,{\n\t\t\twidth : rect.width + 'px',\n\t\t\ttop   : top + 'px',\n\t\t\tleft  : left + 'px'\n\t\t});\n\n\t}\n\n\t/**\n\t * Resets / clears all selected items\n\t * from the control.\n\t *\n\t */\n\tclear(silent?:boolean) {\n\t\tvar self = this;\n\n\t\tif (!self.items.length) return;\n\n\t\tvar items = self.controlChildren();\n\t\titerate(items,(item:TomItem)=>{\n\t\t\tself.removeItem(item,true);\n\t\t});\n\n\t\tself.inputState();\n\t\tif( !silent ) self.updateOriginalInput();\n\t\tself.trigger('clear');\n\t}\n\n\t/**\n\t * A helper method for inserting an element\n\t * at the current caret position.\n\t *\n\t */\n\tinsertAtCaret(el:HTMLElement) {\n\t\tconst self\t\t= this;\n\t\tconst caret\t\t= self.caretPos;\n\t\tconst target\t= self.control;\n\n\t\ttarget.insertBefore(el, target.children[caret] || null);\n\t\tself.setCaret(caret + 1);\n\t}\n\n\t/**\n\t * Removes the current selected item(s).\n\t *\n\t */\n\tdeleteSelection(e:KeyboardEvent):boolean {\n\t\tvar direction, selection, caret, tail;\n\t\tvar self = this;\n\n\t\tdirection = (e && e.keyCode === constants.KEY_BACKSPACE) ? -1 : 1;\n\t\tselection = getSelection(self.control_input);\n\n\n\t\t// determine items that will be removed\n\t\tconst rm_items:TomItem[]\t= [];\n\n\t\tif (self.activeItems.length) {\n\n\t\t\ttail = getTail(self.activeItems, direction);\n\t\t\tcaret = nodeIndex(tail);\n\n\t\t\tif (direction > 0) { caret++; }\n\n\t\t\titerate(self.activeItems, (item:TomItem) => rm_items.push(item) );\n\n\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\tconst items = self.controlChildren();\n\t\t\tlet rm_item;\n\t\t\tif( direction < 0 && selection.start === 0 && selection.length === 0 ){\n\t\t\t\trm_item = items[self.caretPos - 1];\n\n\t\t\t}else if( direction > 0 && selection.start === self.inputValue().length ){\n\t\t\t\trm_item = items[self.caretPos];\n\t\t\t}\n\n\t\t\tif( rm_item !== undefined ){\n\t\t\t\trm_items.push( rm_item );\n\t\t\t}\n\t\t}\n\n\t\tif( !self.shouldDelete(rm_items,e) ){\n\t\t\treturn false;\n\t\t}\n\n\t\tpreventDefault(e,true);\n\n\t\t// perform removal\n\t\tif (typeof caret !== 'undefined') {\n\t\t\tself.setCaret(caret);\n\t\t}\n\n\t\twhile( rm_items.length ){\n\t\t\tself.removeItem(rm_items.pop());\n\t\t}\n\n\t\tself.inputState();\n\t\tself.positionDropdown();\n\t\tself.refreshOptions(false);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Return true if the items should be deleted\n\t */\n\tshouldDelete(items:TomItem[],evt:MouseEvent|KeyboardEvent){\n\n\t\tconst values = items.map(item => item.dataset.value);\n\n\t\t// allow the callback to abort\n\t\tif( !values.length || (typeof this.settings.onDelete === 'function' && this.settings.onDelete(values,evt) === false) ){\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Selects the previous / next item (depending on the `direction` argument).\n\t *\n\t * > 0 - right\n\t * < 0 - left\n\t *\n\t */\n\tadvanceSelection(direction:number, e?:MouseEvent|KeyboardEvent) {\n\t\tvar last_active, adjacent, self = this;\n\n\t\tif (self.rtl) direction *= -1;\n\t\tif( self.inputValue().length ) return;\n\n\n\t\t// add or remove to active items\n\t\tif( isKeyDown(constants.KEY_SHORTCUT,e) || isKeyDown('shiftKey',e) ){\n\n\t\t\tlast_active\t\t\t= self.getLastActive(direction);\n\t\t\tif( last_active ){\n\n\t\t\t\tif( !last_active.classList.contains('active') ){\n\t\t\t\t\tadjacent\t\t\t= last_active;\n\t\t\t\t}else{\n\t\t\t\t\tadjacent\t\t\t= self.getAdjacent(last_active,direction,'item');\n\t\t\t\t}\n\n\t\t\t// if no active item, get items adjacent to the control input\n\t\t\t}else if( direction > 0 ){\n\t\t\t\tadjacent\t\t\t= self.control_input.nextElementSibling;\n\t\t\t}else{\n\t\t\t\tadjacent\t\t\t= self.control_input.previousElementSibling;\n\t\t\t}\n\n\n\t\t\tif( adjacent ){\n\t\t\t\tif( adjacent.classList.contains('active') ){\n\t\t\t\t\tself.removeActiveItem(last_active);\n\t\t\t\t}\n\t\t\t\tself.setActiveItemClass(adjacent); // mark as last_active !! after removeActiveItem() on last_active\n\t\t\t}\n\n\t\t// move caret to the left or right\n\t\t}else{\n\t\t\tself.moveCaret(direction);\n\t\t}\n\t}\n\n\tmoveCaret(direction:number){}\n\n\t/**\n\t * Get the last active item\n\t *\n\t */\n\tgetLastActive(direction?:number){\n\n\t\tlet last_active = this.control.querySelector('.last-active');\n\t\tif( last_active ){\n\t\t\treturn last_active;\n\t\t}\n\n\n\t\tvar result = this.control.querySelectorAll('.active');\n\t\tif( result ){\n\t\t\treturn getTail(result,direction);\n\t\t}\n\t}\n\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tsetCaret(new_pos:number) {\n\t\tthis.caretPos = this.items.length;\n\t}\n\n\t/**\n\t * Return list of item dom elements\n\t *\n\t */\n\tcontrolChildren():TomItem[]{\n\t\treturn Array.from( this.control.querySelectorAll('[data-ts-item]') ) as TomItem[];\n\t}\n\n\t/**\n\t * Disables user input on the control. Used while\n\t * items are being asynchronously created.\n\t */\n\tlock() {\n\t\tthis.setLocked(true);\n\t}\n\n\t/**\n\t * Re-enables user input on the control.\n\t */\n\tunlock() {\n\t\tthis.setLocked(false);\n\t}\n\n\t/**\n\t * Disable or enable user input on the control\n\t */\n\tsetLocked( lock:boolean = this.isReadOnly || this.isDisabled ){\n\t\tthis.isLocked = lock;\n\t\tthis.refreshState();\n\t}\n\n\t/**\n\t * Disables user input on the control completely.\n\t * While disabled, it cannot receive focus.\n\t */\n\tdisable() {\n\t\tthis.setDisabled(true);\n\t\tthis.close();\n\t}\n\n\t/**\n\t * Enables the control so that it can respond\n\t * to focus and user input.\n\t */\n\tenable() {\n\t\tthis.setDisabled(false);\n\t}\n\n\tsetDisabled(disabled:boolean){\n\t\tthis.focus_node.tabIndex\t\t= disabled ? -1 : this.tabIndex;\n\t\tthis.isDisabled\t\t\t\t\t= disabled;\n\t\tthis.input.disabled\t\t\t\t= disabled;\n\t\tthis.control_input.disabled\t\t= disabled;\n\t\tthis.setLocked();\n\t}\n\n\tsetReadOnly(isReadOnly:boolean){\n\t\tthis.isReadOnly\t\t\t\t\t= isReadOnly;\n\t\tthis.input.readOnly\t\t\t\t= isReadOnly;\n\t\tthis.control_input.readOnly\t\t= isReadOnly;\n\t\tthis.setLocked();\n\t}\n\n\t/**\n\t * Completely destroys the control and\n\t * unbinds all event listeners so that it can\n\t * be garbage collected.\n\t */\n\tdestroy() {\n\t\tvar self = this;\n\t\tvar revertSettings = self.revertSettings;\n\n\t\tself.trigger('destroy');\n\t\tself.off();\n\t\tself.wrapper.remove();\n\t\tself.dropdown.remove();\n\n\t\tself.input.innerHTML = revertSettings.innerHTML;\n\t\tself.input.tabIndex = revertSettings.tabIndex;\n\n\t\tremoveClasses(self.input,'tomselected','ts-hidden-accessible');\n\n\t\tself._destroy();\n\n\t\tdelete self.input.tomselect;\n\t}\n\n\t/**\n\t * A helper method for rendering \"item\" and\n\t * \"option\" templates, given the data.\n\t *\n\t */\n\trender( templateName:TomTemplateNames, data?:any ):null|HTMLElement{\n\t\tvar id, html;\n\t\tconst self = this;\n\n\t\tif( typeof this.settings.render[templateName] !== 'function' ){\n\t\t\treturn null;\n\t\t}\n\n\t\t// render markup\n\t\thtml = self.settings.render[templateName].call(this, data, escape_html);\n\n\t\tif( !html ){\n\t\t\treturn null;\n\t\t}\n\n\t\thtml = getDom( html );\n\n\t\t// add mandatory attributes\n\t\tif (templateName === 'option' || templateName === 'option_create') {\n\n\t\t\tif( data[self.settings.disabledField] ){\n\t\t\t\tsetAttr(html,{'aria-disabled':'true'});\n\t\t\t}else{\n\t\t\t\tsetAttr(html,{'data-selectable': ''});\n\t\t\t}\n\n\t\t}else if (templateName === 'optgroup') {\n\t\t\tid = data.group[self.settings.optgroupValueField];\n\t\t\tsetAttr(html,{'data-group': id});\n\t\t\tif(data.group[self.settings.disabledField]) {\n\t\t\t\tsetAttr(html,{'data-disabled': ''});\n\t\t\t}\n\t\t}\n\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\tconst value\t= get_hash(data[self.settings.valueField]);\n\t\t\tsetAttr(html,{'data-value': value });\n\n\n\t\t\t// make sure we have some classes if a template is overwritten\n\t\t\tif( templateName === 'item' ){\n\t\t\t\taddClasses(html,self.settings.itemClass);\n\t\t\t\tsetAttr(html,{'data-ts-item':''});\n\t\t\t}else{\n\t\t\t\taddClasses(html,self.settings.optionClass);\n\t\t\t\tsetAttr(html,{\n\t\t\t\t\trole:'option',\n\t\t\t\t\tid:data.$id\n\t\t\t\t});\n\n\t\t\t\t// update cache\n\t\t\t\tdata.$div = html;\n\t\t\t\tself.options[value] = data;\n\t\t\t}\n\n\n\t\t}\n\n\t\treturn html;\n\n\t}\n\n\n\t/**\n\t * Type guarded rendering\n\t *\n\t */\n\t_render( templateName:TomTemplateNames, data?:any ):HTMLElement{\n\t\tconst html = this.render(templateName, data);\n\n\t\tif( html == null ){\n\t\t\tthrow 'HTMLElement expected';\n\t\t}\n\t\treturn html;\n\t}\n\n\n\t/**\n\t * Clears the render cache for a template. If\n\t * no template is given, clears all render\n\t * caches.\n\t *\n\t */\n\tclearCache():void{\n\n\t\titerate(this.options, (option:TomOption)=>{\n\t\t\tif( option.$div ){\n\t\t\t\toption.$div.remove();\n\t\t\t\tdelete option.$div;\n\t\t\t}\n\t\t});\n\n\t}\n\n\t/**\n\t * Removes a value from item and option caches\n\t *\n\t */\n\tuncacheValue(value:string){\n\n\t\tconst option_el\t\t\t= this.getOption(value);\n\t\tif( option_el ) option_el.remove();\n\n\t}\n\n\t/**\n\t * Determines whether or not to display the\n\t * create item prompt, given a user input.\n\t *\n\t */\n\tcanCreate( input:string ):boolean {\n\t\treturn this.settings.create && (input.length > 0) && (this.settings.createFilter as TomCreateFilter ).call(this, input);\n\t}\n\n\n\t/**\n\t * Wraps this.`method` so that `new_fn` can be invoked 'before', 'after', or 'instead' of the original method\n\t *\n\t * this.hook('instead','onKeyDown',function( arg1, arg2 ...){\n\t *\n\t * });\n\t */\n\thook( when:string, method:string, new_fn:any ){\n\t\tvar self = this;\n\t\tvar orig_method = self[method];\n\n\n\t\tself[method] = function(){\n\t\t\tvar result, result_new;\n\n\t\t\tif( when === 'after' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\tresult_new = new_fn.apply(self, arguments );\n\n\t\t\tif( when === 'instead' ){\n\t\t\t\treturn result_new;\n\t\t\t}\n\n\t\t\tif( when === 'before' ){\n\t\t\t\tresult = orig_method.apply(self, arguments);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\n\t}\n\n};\n", "/**\n * Plugin: \"change_listener\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { addEvent } from '../../utils';\n\nexport default function(this:TomSelect) {\n\taddEvent(this.input,'change',()=>{\n\t\tthis.sync();\n\t});\n};\n", "/**\n * Plugin: \"checkbox_options\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { preventDefault, hash_key } from '../../utils';\nimport { getDom } from '../../vanilla';\nimport { CBOptions } from './types';\n\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tvar self = this;\n\tvar orig_onOptionSelect = self.onOptionSelect;\n\n\tself.settings.hideSelected = false;\n\n\tconst cbOptions : CBOptions = Object.assign({\n\t\t// so that the user may add different ones as well\n\t\tclassName             : \"tomselect-checkbox\",\n\n\t\t// the following default to the historic plugin's values\n\t\tcheckedClassNames     : undefined,\n\t\tuncheckedClassNames   : undefined,\n\t}, userOptions);\n\n\n\tvar UpdateChecked = function(checkbox:HTMLInputElement, toCheck : boolean) {\n\t\tif( toCheck ){\n\t\t\tcheckbox.checked = true;\n\t\t\tif (cbOptions.uncheckedClassNames) {\n\t\t\t\tcheckbox.classList.remove(...cbOptions.uncheckedClassNames);\n\t\t\t}\n\t\t\tif (cbOptions.checkedClassNames) {\n\t\t\t\tcheckbox.classList.add(...cbOptions.checkedClassNames);\n\t\t\t}\n\t\t}else{\n\t\t\tcheckbox.checked = false;\n\t\t\tif (cbOptions.checkedClassNames) {\n\t\t\t\tcheckbox.classList.remove(...cbOptions.checkedClassNames);\n\t\t\t}\n\t\t\tif (cbOptions.uncheckedClassNames) {\n\t\t\t\tcheckbox.classList.add(...cbOptions.uncheckedClassNames);\n\t\t\t}\n\t\t}\n\t}\n\n\t// update the checkbox for an option\n\tvar UpdateCheckbox = function(option:HTMLElement){\n\t\tsetTimeout(()=>{\n\t\t\tvar checkbox = option.querySelector('input.' + cbOptions.className);\n\t\t\tif( checkbox instanceof HTMLInputElement ){\n\t\t\t\tUpdateChecked(checkbox, option.classList.contains('selected'));\n\t\t\t}\n\t\t},1);\n\t};\n\n\t// add checkbox to option template\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_option = self.settings.render.option;\n\n\t\tself.settings.render.option = (data, escape_html) => {\n\t\t\tvar rendered = getDom(orig_render_option.call(self, data, escape_html));\n\t\t\tvar checkbox = document.createElement('input');\n\t\t\tif (cbOptions.className) {\n\t\t\t\tcheckbox.classList.add(cbOptions.className);\n\t\t\t}\n\t\t\tcheckbox.addEventListener('click',function(evt){\n\t\t\t\tpreventDefault(evt);\n\t\t\t});\n\n\t\t\tcheckbox.type = 'checkbox';\n\t\t\tconst hashed = hash_key(data[self.settings.valueField]);\n\n\t\t\tUpdateChecked(checkbox, !!(hashed && self.items.indexOf(hashed) > -1) );\n\n\t\t\trendered.prepend(checkbox);\n\t\t\treturn rendered;\n\t\t};\n\t});\n\n\t// uncheck when item removed\n\tself.on('item_remove',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\toption.classList.remove('selected'); // selected class won't be removed yet\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\t// check when item added\n\tself.on('item_add',(value:string) => {\n\t\tvar option = self.getOption(value);\n\n\t\tif( option ){ // if dropdown hasn't been opened yet, the option won't exist\n\t\t\tUpdateCheckbox(option);\n\t\t}\n\t});\n\n\n\t// remove items when selected option is clicked\n\tself.hook('instead','onOptionSelect',( evt:KeyboardEvent, option:HTMLElement )=>{\n\n\t\tif( option.classList.contains('selected') ){\n\t\t\toption.classList.remove('selected')\n\t\t\tself.removeItem(option.dataset.value);\n\t\t\tself.refreshOptions();\n\t\t\tpreventDefault(evt,true);\n\t\t\treturn;\n        }\n\n\t\torig_onOptionSelect.call(self, evt, option);\n\n\t\tUpdateCheckbox(option);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { CBOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:CBOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\tclassName: 'clear-button',\n\t\ttitle: 'Clear All',\n\t\thtml: (data:CBOptions) => {\n\t\t\treturn `<div class=\"${data.className}\" title=\"${data.title}\">&#10799;</div>`;\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar button = getDom(options.html(options));\n\t\tbutton.addEventListener('click',(evt)=>{\n\n\t\t\tif( self.isLocked ) return;\n\n\t\t\tself.clear();\n\n\t\t\tif( self.settings.mode === 'single' && self.settings.allowEmptyOption ){\n\t\t\t\tself.addItem('');\n\t\t\t}\n\n\t\t\tevt.preventDefault();\n\t\t\tevt.stopPropagation();\n\t\t});\n\t\tself.control.appendChild(button);\n\t});\n\n};\n", "/**\n * Plugin: \"drag_drop\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { TomOption, TomItem } from '../../types/index';\nimport { escape_html, preventDefault, addEvent } from '../../utils';\nimport { getDom, setAttr } from '../../vanilla';\n\n\nconst insertAfter = (referenceNode:Element, newNode:Element) => {\n\treferenceNode.parentNode?.insertBefore(newNode, referenceNode.nextSibling);\n}\n\nconst insertBefore = (referenceNode:Element, newNode:Element) => {\n\treferenceNode.parentNode?.insertBefore(newNode, referenceNode);\n}\n\nconst isBefore = (referenceNode:Element|undefined|null, newNode:Element|undefined|null) =>{\n\t\n\tdo{\n\t\tnewNode = newNode?.previousElementSibling;\n\n\t\tif( referenceNode == newNode ){\n\t\t\treturn true;\n\t\t}\n\n\t}while( newNode && newNode.previousElementSibling );\n\n\treturn false;\n}\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tif (self.settings.mode !== 'multi') return;\n\n\tvar orig_lock\t\t= self.lock;\n\tvar orig_unlock\t\t= self.unlock;\n\tlet sortable = true;\n\t\tlet drag_item:TomItem|undefined;\n\n\n\t/**\n\t * Add draggable attribute to item\n\t */\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\t\t\tconst item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\t\t\tsetAttr(item,{'draggable':'true'});\n\n\n\t\t\t// prevent doc_mousedown (see tom-select.ts)\n\t\t\tconst mousedown = (evt:Event) => {\n\t\t\t\tif( !sortable ) preventDefault(evt);\n\t\t\t\tevt.stopPropagation();\n\t\t\t}\n\n\t\t\tconst dragStart = (evt:Event) => {\n\t\t\t\tdrag_item = item;\n\t\t\t\t\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\titem.classList.add('ts-dragging');\n\t\t\t\t}, 0);\n\t\t\t\t\n\t\t\t}\n\n\t\t\tconst dragOver = (evt:Event) =>{\n\t\t\t\tevt.preventDefault();\n\t\t\t\titem.classList.add('ts-drag-over');\n\t\t\t\tmoveitem(item,drag_item);\n\t\t\t}\n\n\t\t\tconst dragLeave = () => {\n\t\t\t\titem.classList.remove('ts-drag-over');\n\t\t\t}\n\n\t\t\tconst moveitem = (targetitem:TomItem, dragitem:TomItem|undefined) => {\n\t\t\t\tif( dragitem === undefined ) return;\n\t\t\t\t\n\t\t\t\tif( isBefore(dragitem,item) ){\n\t\t\t\t\tinsertAfter(targetitem,dragitem);\n\t\t\t\t}else{\n\t\t\t\t\tinsertBefore(targetitem,dragitem);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst dragend = () => {\n\t\t\t\tdocument.querySelectorAll('.ts-drag-over').forEach(el=> el.classList.remove('ts-drag-over'));\n\t\t\t\tdrag_item?.classList.remove('ts-dragging');\n\t\t\t\tdrag_item = undefined;\n\n\t\t\t\tvar values:string[] = [];\n\t\t\t\tself.control.querySelectorAll(`[data-value]`).forEach((el:Element)=> {\n\t\t\t\t\tif( (<HTMLOptionElement>el).dataset.value ){\n\t\t\t\t\t\tlet value = (<HTMLOptionElement>el).dataset.value;\n\t\t\t\t\t\tif( value ){\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tself.setValue(values);\n\t\t\t}\t\n\n\n\t\t\taddEvent(item,'mousedown', mousedown);\n\t\t\taddEvent(item,'dragstart', dragStart);\n\t\t\taddEvent(item,'dragenter', dragOver)\n\t\t\taddEvent(item,'dragover', dragOver);\n\t\t\taddEvent(item,'dragleave', dragLeave);\n\t\t\taddEvent(item,'dragend', dragend);\n\t\t\t\t\n\t\t\treturn item;\n\t\t}\t\n\t});\n\n\n\n\tself.hook('instead','lock',()=>{\n\t\tsortable = false;\n\t\treturn orig_lock.call(self);\n\t});\n\n\tself.hook('instead','unlock',()=>{\n\t\tsortable = true;\n\t\treturn orig_unlock.call(self);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_header\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { preventDefault } from '../../utils';\nimport { DHOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:DHOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttitle         : 'Untitled',\n\t\theaderClass   : 'dropdown-header',\n\t\ttitleRowClass : 'dropdown-header-title',\n\t\tlabelClass    : 'dropdown-header-label',\n\t\tcloseClass    : 'dropdown-header-close',\n\n\t\thtml: (data:DHOptions) => {\n\t\t\treturn (\n\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t'<a class=\"' + data.closeClass + '\">&times;</a>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t}\n\t}, userOptions);\n\n\tself.on('initialize',()=>{\n\t\tvar header = getDom(options.html(options));\n\n\t\tvar close_link = header.querySelector('.'+options.closeClass);\n\t\tif( close_link ){\n\t\t\tclose_link.addEventListener('click',(evt)=>{\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t\tself.close();\n\t\t\t});\n\t\t}\n\n\t\tself.dropdown.insertBefore(header, self.dropdown.firstChild);\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { nodeIndex, removeClasses } from '../../vanilla';\n\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * The input must be moved by leaving it in place and moving the\n\t * siblings, due to the fact that focus cannot be restored once lost\n\t * on mobile webkit devices\n\t *\n\t */\n\tself.hook('instead','setCaret',(new_pos:number) => {\n\n\t\tif( self.settings.mode === 'single' || !self.control.contains(self.control_input) ) {\n\t\t\tnew_pos = self.items.length;\n\t\t} else {\n\t\t\tnew_pos = Math.max(0, Math.min(self.items.length, new_pos));\n\n\t\t\tif( new_pos != self.caretPos && !self.isPending ){\n\n\t\t\t\tself.controlChildren().forEach((child,j) => {\n\t\t\t\t\tif( j < new_pos ){\n\t\t\t\t\t\tself.control_input.insertAdjacentElement('beforebegin', child );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.control.appendChild( child );\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tself.caretPos = new_pos;\n\t});\n\n\tself.hook('instead','moveCaret',(direction:number) => {\n\n\t\tif( !self.isFocused ) return;\n\n\t\t// move caret before or after selected items\n\t\tconst last_active\t\t= self.getLastActive(direction);\n\t\tif( last_active ){\n\t\t\tconst idx = nodeIndex(last_active);\n\t\t\tself.setCaret(direction > 0 ? idx + 1: idx);\n\t\t\tself.setActiveItem();\n\t\t\tremoveClasses(last_active as HTMLElement,'last-active');\n\n\t\t// move caret left or right of current position\n\t\t}else{\n\t\t\tself.setCaret(self.caretPos + direction);\n\n\t\t}\n\n\t});\n\n};\n", "/**\n * Plugin: \"dropdown_input\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport * as constants from '../../constants';\nimport { getDom, addClasses } from '../../vanilla';\nimport { addEvent, preventDefault } from '../../utils';\n\n\nexport default function(this:TomSelect) {\n\tconst self = this;\n\n\tself.settings.shouldOpen = true; // make sure the input is shown even if there are no options to display in the dropdown\n\n\tself.hook('before','setup',()=>{\n\t\tself.focus_node\t\t= self.control;\n\n\t\taddClasses( self.control_input, 'dropdown-input');\n\n\t \tconst div = getDom('<div class=\"dropdown-input-wrap\">');\n\t\tdiv.append(self.control_input);\n\t\tself.dropdown.insertBefore(div, self.dropdown.firstChild);\n\n\t\t// set a placeholder in the select control\n\t\tconst placeholder = getDom('<input class=\"items-placeholder\" tabindex=\"-1\" />') as HTMLInputElement;\n\t\tplaceholder.placeholder = self.settings.placeholder ||'';\n\t\tself.control.append(placeholder);\n\n\t});\n\n\n\tself.on('initialize',()=>{\n\n\t\t// set tabIndex on control to -1, otherwise [shift+tab] will put focus right back on control_input\n\t\tself.control_input.addEventListener('keydown',(evt:KeyboardEvent) =>{\n\t\t//addEvent(self.control_input,'keydown' as const,(evt:KeyboardEvent) =>{\n\t\t\tswitch( evt.keyCode ){\n\t\t\t\tcase constants.KEY_ESC:\n\t\t\t\t\tif (self.isOpen) {\n\t\t\t\t\t\tpreventDefault(evt,true);\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t\tself.clearActiveItems();\n\t\t\t\treturn;\n\t\t\t\tcase constants.KEY_TAB:\n\t\t\t\t\tself.focus_node.tabIndex = -1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn self.onKeyDown.call(self,evt);\n\t\t});\n\n\t\tself.on('blur',()=>{\n\t\t\tself.focus_node.tabIndex = self.isDisabled ? -1 : self.tabIndex;\n\t\t});\n\n\n\t\t// give the control_input focus when the dropdown is open\n\t\tself.on('dropdown_open',() =>{\n\t\t\tself.control_input.focus();\n\t\t});\n\n\t\t// prevent onBlur from closing when focus is on the control_input\n\t\tconst orig_onBlur = self.onBlur;\n\t\tself.hook('instead','onBlur',(evt?:FocusEvent)=>{\n\t\t\tif( evt && evt.relatedTarget == self.control_input ) return;\n\t\t\treturn orig_onBlur.call(self);\n\t\t});\n\n\t\taddEvent(self.control_input,'blur', () => self.onBlur() );\n\n\t\t// return focus to control to allow further keyboard input\n\t\tself.hook('before','close',() =>{\n\n\t\t\tif( !self.isOpen ) return;\n\t\t\tself.focus_node.focus({preventScroll: true});\n\t\t});\n\n\t});\n\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { addEvent } from '../../utils';\n\nexport default function(this:TomSelect) {\n\tvar self\t\t\t\t\t= this;\n\n\tself.on('initialize',()=>{\n\n\n\t\tvar test_input\t\t\t\t= document.createElement('span');\n\t\tvar control\t\t\t\t\t= self.control_input;\n\t\ttest_input.style.cssText\t= 'position:absolute; top:-99999px; left:-99999px; width:auto; padding:0; white-space:pre; ';\n\n\t\tself.wrapper.appendChild(test_input);\n\n\n\t\tvar transfer_styles\t\t\t= [ 'letterSpacing', 'fontSize', 'fontFamily', 'fontWeight', 'textTransform' ];\n\n\t\tfor( const style_name of transfer_styles ){\n\t\t\t// @ts-ignore TS7015 https://stackoverflow.com/a/50506154/697576\n\t\t\ttest_input.style[style_name] = control.style[style_name];\n\t\t}\n\n\n\t\t/**\n\t\t * Set the control width\n\t\t *\n\t\t */\n\t\tvar resize = ()=>{\n\t\t\ttest_input.textContent\t= control.value;\n\t\t\tcontrol.style.width\t\t= test_input.clientWidth+'px';\n\t\t};\n\n\t\tresize();\n\t\tself.on('update item_add item_remove',resize);\n\t\taddEvent(control,'input', resize );\n\t\taddEvent(control,'keyup', resize );\n\t\taddEvent(control,'blur', resize );\n\t\taddEvent(control,'update', resize );\n\t});\n\n};\n", "/**\n * Plugin: \"input_autogrow\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\tvar orig_deleteSelection = self.deleteSelection;\n\n\tthis.hook('instead','deleteSelection',(evt:KeyboardEvent) => {\n\n\t\tif( self.activeItems.length ){\n\t\t\treturn orig_deleteSelection.call(self, evt);\n\t\t}\n\n\t\treturn false;\n\t});\n\n};\n", "/**\n * Plugin: \"no_active_items\" (Tom Select)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\n\nexport default function(this:TomSelect) {\n\tthis.hook('instead','setActiveItem',() => {});\n\tthis.hook('instead','selectAll',() => {});\n};\n", "/**\n * Plugin: \"optgroup_columns\" (Tom Select.js)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport * as constants from '../../constants';\nimport { parentMatch, nodeIndex } from '../../vanilla';\n\nexport default function(this:TomSelect) {\n\tvar self = this;\n\n\tvar orig_keydown = self.onKeyDown;\n\n\tself.hook('instead','onKeyDown',(evt:KeyboardEvent)=>{\n\t\tvar index, option, options, optgroup;\n\n\t\tif( !self.isOpen || !(evt.keyCode === constants.KEY_LEFT || evt.keyCode === constants.KEY_RIGHT)) {\n\t\t\treturn orig_keydown.call(self,evt);\n\t\t}\n\n\t\tself.ignoreHover\t= true;\n\t\toptgroup\t\t\t= parentMatch(self.activeOption,'[data-group]');\n\t\tindex\t\t\t\t= nodeIndex(self.activeOption,'[data-selectable]');\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( evt.keyCode === constants.KEY_LEFT ){\n\t\t\toptgroup = optgroup.previousSibling;\n\t\t} else {\n\t\t\toptgroup = optgroup.nextSibling;\n\t\t}\n\n\t\tif( !optgroup ){\n\t\t\treturn;\n\t\t}\n\n\t\toptions\t\t\t\t= (<HTMLOptGroupElement>optgroup).querySelectorAll('[data-selectable]');\n\t\toption\t\t\t\t= options[ Math.min(options.length - 1, index) ] as HTMLElement;\n\n\t\tif( option ){\n\t\t\tself.setActiveOption(option);\n\t\t}\n\n\t});\n\n};\n", "/**\n * Plugin: \"remove_button\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { getDom } from '../../vanilla';\nimport { escape_html, preventDefault, addEvent } from '../../utils';\nimport { TomOption, TomItem } from '../../types/index';\nimport { RBOptions } from './types';\n\nexport default function(this:TomSelect, userOptions:RBOptions) {\n\n\tconst options = Object.assign({\n\t\t\tlabel     : '&times;',\n\t\t\ttitle     : 'Remove',\n\t\t\tclassName : 'remove',\n\t\t\tappend    : true\n\t\t}, userOptions);\n\n\n\t//options.className = 'remove-single';\n\tvar self\t\t\t= this;\n\n\t// override the render method to add remove button to each item\n\tif( !options.append ){\n\t\treturn;\n\t}\n\n\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\n\tself.hook('after','setupTemplates',() => {\n\n\t\tvar orig_render_item = self.settings.render.item;\n\n\t\tself.settings.render.item = (data:TomOption, escape:typeof escape_html) => {\n\n\t\t\tvar item = getDom(orig_render_item.call(self, data, escape)) as TomItem;\n\n\t\t\tvar close_button = getDom(html);\n\t\t\titem.appendChild(close_button);\n\n\t\t\taddEvent(close_button,'mousedown',(evt) => {\n\t\t\t\tpreventDefault(evt,true);\n\t\t\t});\n\n\t\t\taddEvent(close_button,'click',(evt) => {\n\n\t\t\t\tif( self.isLocked ) return;\n\n\t\t\t\t// propagating will trigger the dropdown to show for single mode\n\t\t\t\tpreventDefault(evt,true);\n\n\t\t\t\tif( self.isLocked ) return;\n\t\t\t\tif( !self.shouldDelete([item],evt as MouseEvent) ) return;\n\n\t\t\t\tself.removeItem(item);\n\t\t\t\tself.refreshOptions(false);\n\t\t\t\tself.inputState();\n\t\t\t});\n\n\t\t\treturn item;\n\t\t};\n\n\t});\n\n\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\nimport TomSelect from '../../tom-select';\nimport { TomOption } from '../../types/index';\n\ntype TPluginOptions = {\n\ttext?:(option:TomOption)=>string,\n};\n\nexport default function(this:TomSelect, userOptions:TPluginOptions) {\n\tconst self = this;\n\n\tconst options = Object.assign({\n\t\ttext: (option:TomOption) => {\n\t\t\treturn option[self.settings.labelField];\n\t\t}\n\t},userOptions);\n\n\tself.on('item_remove',function(value:string){\n\t\tif( !self.isFocused ){\n\t\t\treturn;\n\t\t}\n\n\t\tif( self.control_input.value.trim() === '' ){\n\t\t\tvar option = self.options[value];\n\t\t\tif( option ){\n\t\t\t\tself.setTextboxValue(options.text.call(self, option));\n\t\t\t}\n\t\t}\n\t});\n\n};\n", "/**\n * Plugin: \"restore_on_backspace\" (Tom Select)\n * Copyright (c) contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n */\n\nimport TomSelect from '../../tom-select';\nimport { TomOption } from '../../types/index';\nimport { addClasses } from '../../vanilla';\n\nexport default function(this:TomSelect) {\n\tconst self\t\t\t\t\t\t\t= this;\n\tconst orig_canLoad\t\t\t\t\t= self.canLoad;\n\tconst orig_clearActiveOption\t\t= self.clearActiveOption;\n\tconst orig_loadCallback\t\t\t\t= self.loadCallback;\n\n\tvar pagination:{[key:string]:any}\t= {};\n\tvar dropdown_content:HTMLElement;\n\tvar loading_more\t\t\t\t\t= false;\n\tvar load_more_opt:HTMLElement;\n\tvar default_values: string[]\t\t= [];\n\n\tif( !self.settings.shouldLoadMore ){\n\n\t\t// return true if additional results should be loaded\n\t\tself.settings.shouldLoadMore = ():boolean=>{\n\n\t\t\tconst scroll_percent = dropdown_content.clientHeight / (dropdown_content.scrollHeight - dropdown_content.scrollTop);\n\t\t\tif( scroll_percent > 0.9 ){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif( self.activeOption ){\n\t\t\t\tvar selectable\t= self.selectable();\n\t\t\t\tvar index\t\t= Array.from(selectable).indexOf(self.activeOption);\n\t\t\t\tif( index >= (selectable.length-2) ){\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t}\n\n\n\tif( !self.settings.firstUrl ){\n\t\tthrow 'virtual_scroll plugin requires a firstUrl() method';\n\t}\n\n\n\t// in order for virtual scrolling to work,\n\t// options need to be ordered the same way they're returned from the remote data source\n\tself.settings.sortField\t\t\t= [{field:'$order'},{field:'$score'}];\n\n\n\t// can we load more results for given query?\n\tconst canLoadMore = (query:string):boolean => {\n\n\t\tif( typeof self.settings.maxOptions === 'number' && dropdown_content.children.length >= self.settings.maxOptions ){\n\t\t\treturn false;\n\t\t}\n\n\t\tif( (query in pagination) && pagination[query] ){\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tconst clearFilter = (option:TomOption, value:string):boolean => {\n\t\tif( self.items.indexOf(value) >= 0 || default_values.indexOf(value) >= 0 ){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n\n\t// set the next url that will be\n\tself.setNextUrl = (value:string,next_url:any):void => {\n\t\tpagination[value] = next_url;\n\t};\n\n\t// getUrl() to be used in settings.load()\n\tself.getUrl = (query:string):any =>{\n\n\t\tif( query in pagination ){\n\t\t\tconst next_url = pagination[query];\n\t\t\tpagination[query] = false;\n\t\t\treturn next_url;\n\t\t}\n\n\t\t// if the user goes back to a previous query\n\t\t// we need to load the first page again\n\t\tself.clearPagination();\n\n\t\treturn self.settings.firstUrl.call(self,query);\n\t};\n\n\t// clear pagination\n\tself.clearPagination = ():void =>{\n\t\tpagination = {};\n\t};\n\n\t// don't clear the active option (and cause unwanted dropdown scroll)\n\t// while loading more results\n\tself.hook('instead','clearActiveOption',()=>{\n\n\t\tif( loading_more ){\n\t\t\treturn;\n\t\t}\n\n\t\treturn orig_clearActiveOption.call(self);\n\t});\n\n\t// override the canLoad method\n\tself.hook('instead','canLoad',(query:string)=>{\n\n\t\t// first time the query has been seen\n\t\tif( !(query in pagination) ){\n\t\t\treturn orig_canLoad.call(self,query);\n\t\t}\n\n\t\treturn canLoadMore(query);\n\t});\n\n\n\t// wrap the load\n\tself.hook('instead','loadCallback',( options:TomOption[], optgroups:TomOption[])=>{\n\n\t\tif( !loading_more ){\n\t\t\tself.clearOptions(clearFilter);\n\t\t}else if( load_more_opt ){\n\t\t\tconst first_option = options[0];\n\t\t\tif( first_option !== undefined ){\n\t\t\t\tload_more_opt.dataset.value\t\t= first_option[self.settings.valueField];\n\t\t\t}\n\t\t}\n\n\t\torig_loadCallback.call( self, options, optgroups);\n\n\t\tloading_more = false;\n\t});\n\n\n\t// add templates to dropdown\n\t//\tloading_more if we have another url in the queue\n\t//\tno_more_results if we don't have another url in the queue\n\tself.hook('after','refreshOptions',()=>{\n\n\t\tconst query\t\t= self.lastValue;\n\t\tvar option;\n\n\t\tif( canLoadMore(query) ){\n\n\t\t\toption = self.render('loading_more',{query:query});\n\t\t\tif( option ){\n\t\t\t\toption.setAttribute('data-selectable',''); // so that navigating dropdown with [down] keypresses can navigate to this node\n\t\t\t\tload_more_opt = option;\n\t\t\t}\n\n\t\t}else if( (query in pagination) && !dropdown_content.querySelector('.no-results') ){\n\t\t\toption = self.render('no_more_results',{query:query});\n\t\t}\n\n\t\tif( option ){\n\t\t\taddClasses(option,self.settings.optionClass);\n\t\t\tdropdown_content.append( option );\n\t\t}\n\n\t});\n\n\n\t// add scroll listener and default templates\n\tself.on('initialize',()=>{\n\t\tdefault_values = Object.keys(self.options);\n\t\tdropdown_content = self.dropdown_content;\n\n\t\t// default templates\n\t\tself.settings.render = Object.assign({}, {\n\t\t\tloading_more:() => {\n\t\t\t\treturn `<div class=\"loading-more-results\">Loading more results ... </div>`;\n\t\t\t},\n\t\t\tno_more_results:() =>{\n\t\t\t\treturn `<div class=\"no-more-results\">No more results</div>`;\n\t\t\t}\n\t\t},self.settings.render);\n\n\n\t\t// watch dropdown content scroll position\n\t\tdropdown_content.addEventListener('scroll',()=>{\n\n\t\t\tif( !self.settings.shouldLoadMore.call(self) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// !important: this will get checked again in load() but we still need to check here otherwise loading_more will be set to true\n\t\t\tif( !canLoadMore(self.lastValue) ){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// don't call load() too much\n\t\t\tif( loading_more ) return;\n\n\n\t\t\tloading_more = true;\n\t\t\tself.load.call(self,self.lastValue);\n\t\t});\n\t});\n\n};\n", "import TomSelect from './tom-select';\n\nimport change_listener from './plugins/change_listener/plugin';\nimport checkbox_options from './plugins/checkbox_options/plugin';\nimport clear_button from './plugins/clear_button/plugin';\nimport drag_drop from './plugins/drag_drop/plugin';\nimport dropdown_header from './plugins/dropdown_header/plugin';\nimport caret_position from './plugins/caret_position/plugin';\nimport dropdown_input from './plugins/dropdown_input/plugin';\nimport input_autogrow from './plugins/input_autogrow/plugin';\nimport no_backspace_delete from './plugins/no_backspace_delete/plugin';\nimport no_active_items from './plugins/no_active_items/plugin';\nimport optgroup_columns from './plugins/optgroup_columns/plugin';\nimport remove_button from './plugins/remove_button/plugin';\nimport restore_on_backspace from './plugins/restore_on_backspace/plugin';\nimport virtual_scroll from './plugins/virtual_scroll/plugin';\n\nTomSelect.define('change_listener', change_listener);\nTomSelect.define('checkbox_options', checkbox_options);\nTomSelect.define('clear_button', clear_button);\nTomSelect.define('drag_drop', drag_drop);\nTomSelect.define('dropdown_header', dropdown_header);\nTomSelect.define('caret_position', caret_position);\nTomSelect.define('dropdown_input', dropdown_input);\nTomSelect.define('input_autogrow', input_autogrow);\nTomSelect.define('no_backspace_delete', no_backspace_delete);\nTomSelect.define('no_active_items', no_active_items);\nTomSelect.define('optgroup_columns', optgroup_columns);\nTomSelect.define('remove_button', remove_button);\nTomSelect.define('restore_on_backspace', restore_on_backspace);\nTomSelect.define('virtual_scroll', virtual_scroll);\n\nexport default TomSelect;\n", "/* flatpickr v4.6.13, @license MIT */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.flatpickr = factory());\n}(this, (function () { 'use strict';\n\n    /*! *****************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\r\n\r\n    var __assign = function() {\r\n        __assign = Object.assign || function __assign(t) {\r\n            for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n                s = arguments[i];\r\n                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n            }\r\n            return t;\r\n        };\r\n        return __assign.apply(this, arguments);\r\n    };\r\n\r\n    function __spreadArrays() {\r\n        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n        for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n                r[k] = a[j];\r\n        return r;\r\n    }\n\n    var HOOKS = [\n        \"onChange\",\n        \"onClose\",\n        \"onDayCreate\",\n        \"onDestroy\",\n        \"onKeyDown\",\n        \"onMonthChange\",\n        \"onOpen\",\n        \"onParseConfig\",\n        \"onReady\",\n        \"onValueUpdate\",\n        \"onYearChange\",\n        \"onPreCalendarPosition\",\n    ];\n    var defaults = {\n        _disable: [],\n        allowInput: false,\n        allowInvalidPreload: false,\n        altFormat: \"F j, Y\",\n        altInput: false,\n        altInputClass: \"form-control input\",\n        animate: typeof window === \"object\" &&\n            window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n        ariaDateFormat: \"F j, Y\",\n        autoFillDefaultTime: true,\n        clickOpens: true,\n        closeOnSelect: true,\n        conjunction: \", \",\n        dateFormat: \"Y-m-d\",\n        defaultHour: 12,\n        defaultMinute: 0,\n        defaultSeconds: 0,\n        disable: [],\n        disableMobile: false,\n        enableSeconds: false,\n        enableTime: false,\n        errorHandler: function (err) {\n            return typeof console !== \"undefined\" && console.warn(err);\n        },\n        getWeek: function (givenDate) {\n            var date = new Date(givenDate.getTime());\n            date.setHours(0, 0, 0, 0);\n            // Thursday in current week decides the year.\n            date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n            // January 4 is always in week 1.\n            var week1 = new Date(date.getFullYear(), 0, 4);\n            // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n            return (1 +\n                Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n                    3 +\n                    ((week1.getDay() + 6) % 7)) /\n                    7));\n        },\n        hourIncrement: 1,\n        ignoredFocusElements: [],\n        inline: false,\n        locale: \"default\",\n        minuteIncrement: 5,\n        mode: \"single\",\n        monthSelectorType: \"dropdown\",\n        nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n        noCalendar: false,\n        now: new Date(),\n        onChange: [],\n        onClose: [],\n        onDayCreate: [],\n        onDestroy: [],\n        onKeyDown: [],\n        onMonthChange: [],\n        onOpen: [],\n        onParseConfig: [],\n        onReady: [],\n        onValueUpdate: [],\n        onYearChange: [],\n        onPreCalendarPosition: [],\n        plugins: [],\n        position: \"auto\",\n        positionElement: undefined,\n        prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n        shorthandCurrentMonth: false,\n        showMonths: 1,\n        static: false,\n        time_24hr: false,\n        weekNumbers: false,\n        wrap: false,\n    };\n\n    var english = {\n        weekdays: {\n            shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n            longhand: [\n                \"Sunday\",\n                \"Monday\",\n                \"Tuesday\",\n                \"Wednesday\",\n                \"Thursday\",\n                \"Friday\",\n                \"Saturday\",\n            ],\n        },\n        months: {\n            shorthand: [\n                \"Jan\",\n                \"Feb\",\n                \"Mar\",\n                \"Apr\",\n                \"May\",\n                \"Jun\",\n                \"Jul\",\n                \"Aug\",\n                \"Sep\",\n                \"Oct\",\n                \"Nov\",\n                \"Dec\",\n            ],\n            longhand: [\n                \"January\",\n                \"February\",\n                \"March\",\n                \"April\",\n                \"May\",\n                \"June\",\n                \"July\",\n                \"August\",\n                \"September\",\n                \"October\",\n                \"November\",\n                \"December\",\n            ],\n        },\n        daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n        firstDayOfWeek: 0,\n        ordinal: function (nth) {\n            var s = nth % 100;\n            if (s > 3 && s < 21)\n                return \"th\";\n            switch (s % 10) {\n                case 1:\n                    return \"st\";\n                case 2:\n                    return \"nd\";\n                case 3:\n                    return \"rd\";\n                default:\n                    return \"th\";\n            }\n        },\n        rangeSeparator: \" to \",\n        weekAbbreviation: \"Wk\",\n        scrollTitle: \"Scroll to increment\",\n        toggleTitle: \"Click to toggle\",\n        amPM: [\"AM\", \"PM\"],\n        yearAriaLabel: \"Year\",\n        monthAriaLabel: \"Month\",\n        hourAriaLabel: \"Hour\",\n        minuteAriaLabel: \"Minute\",\n        time_24hr: false,\n    };\n\n    var pad = function (number, length) {\n        if (length === void 0) { length = 2; }\n        return (\"000\" + number).slice(length * -1);\n    };\n    var int = function (bool) { return (bool === true ? 1 : 0); };\n    /* istanbul ignore next */\n    function debounce(fn, wait) {\n        var t;\n        return function () {\n            var _this = this;\n            var args = arguments;\n            clearTimeout(t);\n            t = setTimeout(function () { return fn.apply(_this, args); }, wait);\n        };\n    }\n    var arrayify = function (obj) {\n        return obj instanceof Array ? obj : [obj];\n    };\n\n    function toggleClass(elem, className, bool) {\n        if (bool === true)\n            return elem.classList.add(className);\n        elem.classList.remove(className);\n    }\n    function createElement(tag, className, content) {\n        var e = window.document.createElement(tag);\n        className = className || \"\";\n        content = content || \"\";\n        e.className = className;\n        if (content !== undefined)\n            e.textContent = content;\n        return e;\n    }\n    function clearNode(node) {\n        while (node.firstChild)\n            node.removeChild(node.firstChild);\n    }\n    function findParent(node, condition) {\n        if (condition(node))\n            return node;\n        else if (node.parentNode)\n            return findParent(node.parentNode, condition);\n        return undefined; // nothing found\n    }\n    function createNumberInput(inputClassName, opts) {\n        var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n        if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n            numInput.type = \"number\";\n        }\n        else {\n            numInput.type = \"text\";\n            numInput.pattern = \"\\\\d*\";\n        }\n        if (opts !== undefined)\n            for (var key in opts)\n                numInput.setAttribute(key, opts[key]);\n        wrapper.appendChild(numInput);\n        wrapper.appendChild(arrowUp);\n        wrapper.appendChild(arrowDown);\n        return wrapper;\n    }\n    function getEventTarget(event) {\n        try {\n            if (typeof event.composedPath === \"function\") {\n                var path = event.composedPath();\n                return path[0];\n            }\n            return event.target;\n        }\n        catch (error) {\n            return event.target;\n        }\n    }\n\n    var doNothing = function () { return undefined; };\n    var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n    var revFormat = {\n        D: doNothing,\n        F: function (dateObj, monthName, locale) {\n            dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n        },\n        G: function (dateObj, hour) {\n            dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n        },\n        H: function (dateObj, hour) {\n            dateObj.setHours(parseFloat(hour));\n        },\n        J: function (dateObj, day) {\n            dateObj.setDate(parseFloat(day));\n        },\n        K: function (dateObj, amPM, locale) {\n            dateObj.setHours((dateObj.getHours() % 12) +\n                12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n        },\n        M: function (dateObj, shortMonth, locale) {\n            dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n        },\n        S: function (dateObj, seconds) {\n            dateObj.setSeconds(parseFloat(seconds));\n        },\n        U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n        W: function (dateObj, weekNum, locale) {\n            var weekNumber = parseInt(weekNum);\n            var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n            date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n            return date;\n        },\n        Y: function (dateObj, year) {\n            dateObj.setFullYear(parseFloat(year));\n        },\n        Z: function (_, ISODate) { return new Date(ISODate); },\n        d: function (dateObj, day) {\n            dateObj.setDate(parseFloat(day));\n        },\n        h: function (dateObj, hour) {\n            dateObj.setHours((dateObj.getHours() >= 12 ? 12 : 0) + parseFloat(hour));\n        },\n        i: function (dateObj, minutes) {\n            dateObj.setMinutes(parseFloat(minutes));\n        },\n        j: function (dateObj, day) {\n            dateObj.setDate(parseFloat(day));\n        },\n        l: doNothing,\n        m: function (dateObj, month) {\n            dateObj.setMonth(parseFloat(month) - 1);\n        },\n        n: function (dateObj, month) {\n            dateObj.setMonth(parseFloat(month) - 1);\n        },\n        s: function (dateObj, seconds) {\n            dateObj.setSeconds(parseFloat(seconds));\n        },\n        u: function (_, unixMillSeconds) {\n            return new Date(parseFloat(unixMillSeconds));\n        },\n        w: doNothing,\n        y: function (dateObj, year) {\n            dateObj.setFullYear(2000 + parseFloat(year));\n        },\n    };\n    var tokenRegex = {\n        D: \"\",\n        F: \"\",\n        G: \"(\\\\d\\\\d|\\\\d)\",\n        H: \"(\\\\d\\\\d|\\\\d)\",\n        J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n        K: \"\",\n        M: \"\",\n        S: \"(\\\\d\\\\d|\\\\d)\",\n        U: \"(.+)\",\n        W: \"(\\\\d\\\\d|\\\\d)\",\n        Y: \"(\\\\d{4})\",\n        Z: \"(.+)\",\n        d: \"(\\\\d\\\\d|\\\\d)\",\n        h: \"(\\\\d\\\\d|\\\\d)\",\n        i: \"(\\\\d\\\\d|\\\\d)\",\n        j: \"(\\\\d\\\\d|\\\\d)\",\n        l: \"\",\n        m: \"(\\\\d\\\\d|\\\\d)\",\n        n: \"(\\\\d\\\\d|\\\\d)\",\n        s: \"(\\\\d\\\\d|\\\\d)\",\n        u: \"(.+)\",\n        w: \"(\\\\d\\\\d|\\\\d)\",\n        y: \"(\\\\d{2})\",\n    };\n    var formats = {\n        // get the date in UTC\n        Z: function (date) { return date.toISOString(); },\n        // weekday name, short, e.g. Thu\n        D: function (date, locale, options) {\n            return locale.weekdays.shorthand[formats.w(date, locale, options)];\n        },\n        // full month name e.g. January\n        F: function (date, locale, options) {\n            return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n        },\n        // padded hour 1-12\n        G: function (date, locale, options) {\n            return pad(formats.h(date, locale, options));\n        },\n        // hours with leading zero e.g. 03\n        H: function (date) { return pad(date.getHours()); },\n        // day (1-30) with ordinal suffix e.g. 1st, 2nd\n        J: function (date, locale) {\n            return locale.ordinal !== undefined\n                ? date.getDate() + locale.ordinal(date.getDate())\n                : date.getDate();\n        },\n        // AM/PM\n        K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n        // shorthand month e.g. Jan, Sep, Oct, etc\n        M: function (date, locale) {\n            return monthToStr(date.getMonth(), true, locale);\n        },\n        // seconds 00-59\n        S: function (date) { return pad(date.getSeconds()); },\n        // unix timestamp\n        U: function (date) { return date.getTime() / 1000; },\n        W: function (date, _, options) {\n            return options.getWeek(date);\n        },\n        // full year e.g. 2016, padded (0001-9999)\n        Y: function (date) { return pad(date.getFullYear(), 4); },\n        // day in month, padded (01-30)\n        d: function (date) { return pad(date.getDate()); },\n        // hour from 1-12 (am/pm)\n        h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n        // minutes, padded with leading zero e.g. 09\n        i: function (date) { return pad(date.getMinutes()); },\n        // day in month (1-30)\n        j: function (date) { return date.getDate(); },\n        // weekday name, full, e.g. Thursday\n        l: function (date, locale) {\n            return locale.weekdays.longhand[date.getDay()];\n        },\n        // padded month number (01-12)\n        m: function (date) { return pad(date.getMonth() + 1); },\n        // the month number (1-12)\n        n: function (date) { return date.getMonth() + 1; },\n        // seconds 0-59\n        s: function (date) { return date.getSeconds(); },\n        // Unix Milliseconds\n        u: function (date) { return date.getTime(); },\n        // number of the day of the week\n        w: function (date) { return date.getDay(); },\n        // last two digits of year e.g. 16 for 2016\n        y: function (date) { return String(date.getFullYear()).substring(2); },\n    };\n\n    var createDateFormatter = function (_a) {\n        var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c, _d = _a.isMobile, isMobile = _d === void 0 ? false : _d;\n        return function (dateObj, frmt, overrideLocale) {\n            var locale = overrideLocale || l10n;\n            if (config.formatDate !== undefined && !isMobile) {\n                return config.formatDate(dateObj, frmt, locale);\n            }\n            return frmt\n                .split(\"\")\n                .map(function (c, i, arr) {\n                return formats[c] && arr[i - 1] !== \"\\\\\"\n                    ? formats[c](dateObj, locale, config)\n                    : c !== \"\\\\\"\n                        ? c\n                        : \"\";\n            })\n                .join(\"\");\n        };\n    };\n    var createDateParser = function (_a) {\n        var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n        return function (date, givenFormat, timeless, customLocale) {\n            if (date !== 0 && !date)\n                return undefined;\n            var locale = customLocale || l10n;\n            var parsedDate;\n            var dateOrig = date;\n            if (date instanceof Date)\n                parsedDate = new Date(date.getTime());\n            else if (typeof date !== \"string\" &&\n                date.toFixed !== undefined // timestamp\n            )\n                // create a copy\n                parsedDate = new Date(date);\n            else if (typeof date === \"string\") {\n                // date string\n                var format = givenFormat || (config || defaults).dateFormat;\n                var datestr = String(date).trim();\n                if (datestr === \"today\") {\n                    parsedDate = new Date();\n                    timeless = true;\n                }\n                else if (config && config.parseDate) {\n                    parsedDate = config.parseDate(date, format);\n                }\n                else if (/Z$/.test(datestr) ||\n                    /GMT$/.test(datestr) // datestrings w/ timezone\n                ) {\n                    parsedDate = new Date(date);\n                }\n                else {\n                    var matched = void 0, ops = [];\n                    for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n                        var token_1 = format[i];\n                        var isBackSlash = token_1 === \"\\\\\";\n                        var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n                        if (tokenRegex[token_1] && !escaped) {\n                            regexStr += tokenRegex[token_1];\n                            var match = new RegExp(regexStr).exec(date);\n                            if (match && (matched = true)) {\n                                ops[token_1 !== \"Y\" ? \"push\" : \"unshift\"]({\n                                    fn: revFormat[token_1],\n                                    val: match[++matchIndex],\n                                });\n                            }\n                        }\n                        else if (!isBackSlash)\n                            regexStr += \".\"; // don't really care\n                    }\n                    parsedDate =\n                        !config || !config.noCalendar\n                            ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n                            : new Date(new Date().setHours(0, 0, 0, 0));\n                    ops.forEach(function (_a) {\n                        var fn = _a.fn, val = _a.val;\n                        return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n                    });\n                    parsedDate = matched ? parsedDate : undefined;\n                }\n            }\n            /* istanbul ignore next */\n            if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n                config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n                return undefined;\n            }\n            if (timeless === true)\n                parsedDate.setHours(0, 0, 0, 0);\n            return parsedDate;\n        };\n    };\n    /**\n     * Compute the difference in dates, measured in ms\n     */\n    function compareDates(date1, date2, timeless) {\n        if (timeless === void 0) { timeless = true; }\n        if (timeless !== false) {\n            return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n                new Date(date2.getTime()).setHours(0, 0, 0, 0));\n        }\n        return date1.getTime() - date2.getTime();\n    }\n    var isBetween = function (ts, ts1, ts2) {\n        return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n    };\n    var calculateSecondsSinceMidnight = function (hours, minutes, seconds) {\n        return hours * 3600 + minutes * 60 + seconds;\n    };\n    var parseSeconds = function (secondsSinceMidnight) {\n        var hours = Math.floor(secondsSinceMidnight / 3600), minutes = (secondsSinceMidnight - hours * 3600) / 60;\n        return [hours, minutes, secondsSinceMidnight - hours * 3600 - minutes * 60];\n    };\n    var duration = {\n        DAY: 86400000,\n    };\n    function getDefaultHours(config) {\n        var hours = config.defaultHour;\n        var minutes = config.defaultMinute;\n        var seconds = config.defaultSeconds;\n        if (config.minDate !== undefined) {\n            var minHour = config.minDate.getHours();\n            var minMinutes = config.minDate.getMinutes();\n            var minSeconds = config.minDate.getSeconds();\n            if (hours < minHour) {\n                hours = minHour;\n            }\n            if (hours === minHour && minutes < minMinutes) {\n                minutes = minMinutes;\n            }\n            if (hours === minHour && minutes === minMinutes && seconds < minSeconds)\n                seconds = config.minDate.getSeconds();\n        }\n        if (config.maxDate !== undefined) {\n            var maxHr = config.maxDate.getHours();\n            var maxMinutes = config.maxDate.getMinutes();\n            hours = Math.min(hours, maxHr);\n            if (hours === maxHr)\n                minutes = Math.min(maxMinutes, minutes);\n            if (hours === maxHr && minutes === maxMinutes)\n                seconds = config.maxDate.getSeconds();\n        }\n        return { hours: hours, minutes: minutes, seconds: seconds };\n    }\n\n    if (typeof Object.assign !== \"function\") {\n        Object.assign = function (target) {\n            var args = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                args[_i - 1] = arguments[_i];\n            }\n            if (!target) {\n                throw TypeError(\"Cannot convert undefined or null to object\");\n            }\n            var _loop_1 = function (source) {\n                if (source) {\n                    Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n                }\n            };\n            for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n                var source = args_1[_a];\n                _loop_1(source);\n            }\n            return target;\n        };\n    }\n\n    var DEBOUNCED_CHANGE_MS = 300;\n    function FlatpickrInstance(element, instanceConfig) {\n        var self = {\n            config: __assign(__assign({}, defaults), flatpickr.defaultConfig),\n            l10n: english,\n        };\n        self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n        self._handlers = [];\n        self.pluginElements = [];\n        self.loadedPlugins = [];\n        self._bind = bind;\n        self._setHoursFromDate = setHoursFromDate;\n        self._positionCalendar = positionCalendar;\n        self.changeMonth = changeMonth;\n        self.changeYear = changeYear;\n        self.clear = clear;\n        self.close = close;\n        self.onMouseOver = onMouseOver;\n        self._createElement = createElement;\n        self.createDay = createDay;\n        self.destroy = destroy;\n        self.isEnabled = isEnabled;\n        self.jumpToDate = jumpToDate;\n        self.updateValue = updateValue;\n        self.open = open;\n        self.redraw = redraw;\n        self.set = set;\n        self.setDate = setDate;\n        self.toggle = toggle;\n        function setupHelperFunctions() {\n            self.utils = {\n                getDaysInMonth: function (month, yr) {\n                    if (month === void 0) { month = self.currentMonth; }\n                    if (yr === void 0) { yr = self.currentYear; }\n                    if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n                        return 29;\n                    return self.l10n.daysInMonth[month];\n                },\n            };\n        }\n        function init() {\n            self.element = self.input = element;\n            self.isOpen = false;\n            parseConfig();\n            setupLocale();\n            setupInputs();\n            setupDates();\n            setupHelperFunctions();\n            if (!self.isMobile)\n                build();\n            bindEvents();\n            if (self.selectedDates.length || self.config.noCalendar) {\n                if (self.config.enableTime) {\n                    setHoursFromDate(self.config.noCalendar ? self.latestSelectedDateObj : undefined);\n                }\n                updateValue(false);\n            }\n            setCalendarWidth();\n            var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n            /* TODO: investigate this further\n        \n              Currently, there is weird positioning behavior in safari causing pages\n              to scroll up. https://github.com/chmln/flatpickr/issues/563\n        \n              However, most browsers are not Safari and positioning is expensive when used\n              in scale. https://github.com/chmln/flatpickr/issues/1096\n            */\n            if (!self.isMobile && isSafari) {\n                positionCalendar();\n            }\n            triggerEvent(\"onReady\");\n        }\n        function getClosestActiveElement() {\n            var _a;\n            return (((_a = self.calendarContainer) === null || _a === void 0 ? void 0 : _a.getRootNode())\n                .activeElement || document.activeElement);\n        }\n        function bindToInstance(fn) {\n            return fn.bind(self);\n        }\n        function setCalendarWidth() {\n            var config = self.config;\n            if (config.weekNumbers === false && config.showMonths === 1) {\n                return;\n            }\n            else if (config.noCalendar !== true) {\n                window.requestAnimationFrame(function () {\n                    if (self.calendarContainer !== undefined) {\n                        self.calendarContainer.style.visibility = \"hidden\";\n                        self.calendarContainer.style.display = \"block\";\n                    }\n                    if (self.daysContainer !== undefined) {\n                        var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n                        self.daysContainer.style.width = daysWidth + \"px\";\n                        self.calendarContainer.style.width =\n                            daysWidth +\n                                (self.weekWrapper !== undefined\n                                    ? self.weekWrapper.offsetWidth\n                                    : 0) +\n                                \"px\";\n                        self.calendarContainer.style.removeProperty(\"visibility\");\n                        self.calendarContainer.style.removeProperty(\"display\");\n                    }\n                });\n            }\n        }\n        /**\n         * The handler for all events targeting the time inputs\n         */\n        function updateTime(e) {\n            if (self.selectedDates.length === 0) {\n                var defaultDate = self.config.minDate === undefined ||\n                    compareDates(new Date(), self.config.minDate) >= 0\n                    ? new Date()\n                    : new Date(self.config.minDate.getTime());\n                var defaults = getDefaultHours(self.config);\n                defaultDate.setHours(defaults.hours, defaults.minutes, defaults.seconds, defaultDate.getMilliseconds());\n                self.selectedDates = [defaultDate];\n                self.latestSelectedDateObj = defaultDate;\n            }\n            if (e !== undefined && e.type !== \"blur\") {\n                timeWrapper(e);\n            }\n            var prevValue = self._input.value;\n            setHoursFromInputs();\n            updateValue();\n            if (self._input.value !== prevValue) {\n                self._debouncedChange();\n            }\n        }\n        function ampm2military(hour, amPM) {\n            return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n        }\n        function military2ampm(hour) {\n            switch (hour % 24) {\n                case 0:\n                case 12:\n                    return 12;\n                default:\n                    return hour % 12;\n            }\n        }\n        /**\n         * Syncs the selected date object time with user's time input\n         */\n        function setHoursFromInputs() {\n            if (self.hourElement === undefined || self.minuteElement === undefined)\n                return;\n            var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n                ? (parseInt(self.secondElement.value, 10) || 0) % 60\n                : 0;\n            if (self.amPM !== undefined) {\n                hours = ampm2military(hours, self.amPM.textContent);\n            }\n            var limitMinHours = self.config.minTime !== undefined ||\n                (self.config.minDate &&\n                    self.minDateHasTime &&\n                    self.latestSelectedDateObj &&\n                    compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n                        0);\n            var limitMaxHours = self.config.maxTime !== undefined ||\n                (self.config.maxDate &&\n                    self.maxDateHasTime &&\n                    self.latestSelectedDateObj &&\n                    compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n                        0);\n            if (self.config.maxTime !== undefined &&\n                self.config.minTime !== undefined &&\n                self.config.minTime > self.config.maxTime) {\n                var minBound = calculateSecondsSinceMidnight(self.config.minTime.getHours(), self.config.minTime.getMinutes(), self.config.minTime.getSeconds());\n                var maxBound = calculateSecondsSinceMidnight(self.config.maxTime.getHours(), self.config.maxTime.getMinutes(), self.config.maxTime.getSeconds());\n                var currentTime = calculateSecondsSinceMidnight(hours, minutes, seconds);\n                if (currentTime > maxBound && currentTime < minBound) {\n                    var result = parseSeconds(minBound);\n                    hours = result[0];\n                    minutes = result[1];\n                    seconds = result[2];\n                }\n            }\n            else {\n                if (limitMaxHours) {\n                    var maxTime = self.config.maxTime !== undefined\n                        ? self.config.maxTime\n                        : self.config.maxDate;\n                    hours = Math.min(hours, maxTime.getHours());\n                    if (hours === maxTime.getHours())\n                        minutes = Math.min(minutes, maxTime.getMinutes());\n                    if (minutes === maxTime.getMinutes())\n                        seconds = Math.min(seconds, maxTime.getSeconds());\n                }\n                if (limitMinHours) {\n                    var minTime = self.config.minTime !== undefined\n                        ? self.config.minTime\n                        : self.config.minDate;\n                    hours = Math.max(hours, minTime.getHours());\n                    if (hours === minTime.getHours() && minutes < minTime.getMinutes())\n                        minutes = minTime.getMinutes();\n                    if (minutes === minTime.getMinutes())\n                        seconds = Math.max(seconds, minTime.getSeconds());\n                }\n            }\n            setHours(hours, minutes, seconds);\n        }\n        /**\n         * Syncs time input values with a date\n         */\n        function setHoursFromDate(dateObj) {\n            var date = dateObj || self.latestSelectedDateObj;\n            if (date && date instanceof Date) {\n                setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n            }\n        }\n        /**\n         * Sets the hours, minutes, and optionally seconds\n         * of the latest selected date object and the\n         * corresponding time inputs\n         * @param {Number} hours the hour. whether its military\n         *                 or am-pm gets inferred from config\n         * @param {Number} minutes the minutes\n         * @param {Number} seconds the seconds (optional)\n         */\n        function setHours(hours, minutes, seconds) {\n            if (self.latestSelectedDateObj !== undefined) {\n                self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n            }\n            if (!self.hourElement || !self.minuteElement || self.isMobile)\n                return;\n            self.hourElement.value = pad(!self.config.time_24hr\n                ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n                : hours);\n            self.minuteElement.value = pad(minutes);\n            if (self.amPM !== undefined)\n                self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n            if (self.secondElement !== undefined)\n                self.secondElement.value = pad(seconds);\n        }\n        /**\n         * Handles the year input and incrementing events\n         * @param {Event} event the keyup or increment event\n         */\n        function onYearInput(event) {\n            var eventTarget = getEventTarget(event);\n            var year = parseInt(eventTarget.value) + (event.delta || 0);\n            if (year / 1000 > 1 ||\n                (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n                changeYear(year);\n            }\n        }\n        /**\n         * Essentially addEventListener + tracking\n         * @param {Element} element the element to addEventListener to\n         * @param {String} event the event name\n         * @param {Function} handler the event handler\n         */\n        function bind(element, event, handler, options) {\n            if (event instanceof Array)\n                return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n            if (element instanceof Array)\n                return element.forEach(function (el) { return bind(el, event, handler, options); });\n            element.addEventListener(event, handler, options);\n            self._handlers.push({\n                remove: function () { return element.removeEventListener(event, handler, options); },\n            });\n        }\n        function triggerChange() {\n            triggerEvent(\"onChange\");\n        }\n        /**\n         * Adds all the necessary event listeners\n         */\n        function bindEvents() {\n            if (self.config.wrap) {\n                [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n                    Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n                        return bind(el, \"click\", self[evt]);\n                    });\n                });\n            }\n            if (self.isMobile) {\n                setupMobile();\n                return;\n            }\n            var debouncedResize = debounce(onResize, 50);\n            self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n            if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n                bind(self.daysContainer, \"mouseover\", function (e) {\n                    if (self.config.mode === \"range\")\n                        onMouseOver(getEventTarget(e));\n                });\n            bind(self._input, \"keydown\", onKeyDown);\n            if (self.calendarContainer !== undefined) {\n                bind(self.calendarContainer, \"keydown\", onKeyDown);\n            }\n            if (!self.config.inline && !self.config.static)\n                bind(window, \"resize\", debouncedResize);\n            if (window.ontouchstart !== undefined)\n                bind(window.document, \"touchstart\", documentClick);\n            else\n                bind(window.document, \"mousedown\", documentClick);\n            bind(window.document, \"focus\", documentClick, { capture: true });\n            if (self.config.clickOpens === true) {\n                bind(self._input, \"focus\", self.open);\n                bind(self._input, \"click\", self.open);\n            }\n            if (self.daysContainer !== undefined) {\n                bind(self.monthNav, \"click\", onMonthNavClick);\n                bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n                bind(self.daysContainer, \"click\", selectDate);\n            }\n            if (self.timeContainer !== undefined &&\n                self.minuteElement !== undefined &&\n                self.hourElement !== undefined) {\n                var selText = function (e) {\n                    return getEventTarget(e).select();\n                };\n                bind(self.timeContainer, [\"increment\"], updateTime);\n                bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n                bind(self.timeContainer, \"click\", timeIncrement);\n                bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n                if (self.secondElement !== undefined)\n                    bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n                if (self.amPM !== undefined) {\n                    bind(self.amPM, \"click\", function (e) {\n                        updateTime(e);\n                    });\n                }\n            }\n            if (self.config.allowInput) {\n                bind(self._input, \"blur\", onBlur);\n            }\n        }\n        /**\n         * Set the calendar view to a particular date.\n         * @param {Date} jumpDate the date to set the view to\n         * @param {boolean} triggerChange if change events should be triggered\n         */\n        function jumpToDate(jumpDate, triggerChange) {\n            var jumpTo = jumpDate !== undefined\n                ? self.parseDate(jumpDate)\n                : self.latestSelectedDateObj ||\n                    (self.config.minDate && self.config.minDate > self.now\n                        ? self.config.minDate\n                        : self.config.maxDate && self.config.maxDate < self.now\n                            ? self.config.maxDate\n                            : self.now);\n            var oldYear = self.currentYear;\n            var oldMonth = self.currentMonth;\n            try {\n                if (jumpTo !== undefined) {\n                    self.currentYear = jumpTo.getFullYear();\n                    self.currentMonth = jumpTo.getMonth();\n                }\n            }\n            catch (e) {\n                /* istanbul ignore next */\n                e.message = \"Invalid date supplied: \" + jumpTo;\n                self.config.errorHandler(e);\n            }\n            if (triggerChange && self.currentYear !== oldYear) {\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            if (triggerChange &&\n                (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n                triggerEvent(\"onMonthChange\");\n            }\n            self.redraw();\n        }\n        /**\n         * The up/down arrow handler for time inputs\n         * @param {Event} e the click event\n         */\n        function timeIncrement(e) {\n            var eventTarget = getEventTarget(e);\n            if (~eventTarget.className.indexOf(\"arrow\"))\n                incrementNumInput(e, eventTarget.classList.contains(\"arrowUp\") ? 1 : -1);\n        }\n        /**\n         * Increments/decrements the value of input associ-\n         * ated with the up/down arrow by dispatching an\n         * \"increment\" event on the input.\n         *\n         * @param {Event} e the click event\n         * @param {Number} delta the diff (usually 1 or -1)\n         * @param {Element} inputElem the input element\n         */\n        function incrementNumInput(e, delta, inputElem) {\n            var target = e && getEventTarget(e);\n            var input = inputElem ||\n                (target && target.parentNode && target.parentNode.firstChild);\n            var event = createEvent(\"increment\");\n            event.delta = delta;\n            input && input.dispatchEvent(event);\n        }\n        function build() {\n            var fragment = window.document.createDocumentFragment();\n            self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n            self.calendarContainer.tabIndex = -1;\n            if (!self.config.noCalendar) {\n                fragment.appendChild(buildMonthNav());\n                self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n                if (self.config.weekNumbers) {\n                    var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n                    self.innerContainer.appendChild(weekWrapper);\n                    self.weekNumbers = weekNumbers;\n                    self.weekWrapper = weekWrapper;\n                }\n                self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n                self.rContainer.appendChild(buildWeekdays());\n                if (!self.daysContainer) {\n                    self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n                    self.daysContainer.tabIndex = -1;\n                }\n                buildDays();\n                self.rContainer.appendChild(self.daysContainer);\n                self.innerContainer.appendChild(self.rContainer);\n                fragment.appendChild(self.innerContainer);\n            }\n            if (self.config.enableTime) {\n                fragment.appendChild(buildTime());\n            }\n            toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n            toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n            toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n            self.calendarContainer.appendChild(fragment);\n            var customAppend = self.config.appendTo !== undefined &&\n                self.config.appendTo.nodeType !== undefined;\n            if (self.config.inline || self.config.static) {\n                self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n                if (self.config.inline) {\n                    if (!customAppend && self.element.parentNode)\n                        self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n                    else if (self.config.appendTo !== undefined)\n                        self.config.appendTo.appendChild(self.calendarContainer);\n                }\n                if (self.config.static) {\n                    var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n                    if (self.element.parentNode)\n                        self.element.parentNode.insertBefore(wrapper, self.element);\n                    wrapper.appendChild(self.element);\n                    if (self.altInput)\n                        wrapper.appendChild(self.altInput);\n                    wrapper.appendChild(self.calendarContainer);\n                }\n            }\n            if (!self.config.static && !self.config.inline)\n                (self.config.appendTo !== undefined\n                    ? self.config.appendTo\n                    : window.document.body).appendChild(self.calendarContainer);\n        }\n        function createDay(className, date, _dayNumber, i) {\n            var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", className, date.getDate().toString());\n            dayElement.dateObj = date;\n            dayElement.$i = i;\n            dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n            if (className.indexOf(\"hidden\") === -1 &&\n                compareDates(date, self.now) === 0) {\n                self.todayDateElem = dayElement;\n                dayElement.classList.add(\"today\");\n                dayElement.setAttribute(\"aria-current\", \"date\");\n            }\n            if (dateIsEnabled) {\n                dayElement.tabIndex = -1;\n                if (isDateSelected(date)) {\n                    dayElement.classList.add(\"selected\");\n                    self.selectedDateElem = dayElement;\n                    if (self.config.mode === \"range\") {\n                        toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n                            compareDates(date, self.selectedDates[0], true) === 0);\n                        toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n                            compareDates(date, self.selectedDates[1], true) === 0);\n                        if (className === \"nextMonthDay\")\n                            dayElement.classList.add(\"inRange\");\n                    }\n                }\n            }\n            else {\n                dayElement.classList.add(\"flatpickr-disabled\");\n            }\n            if (self.config.mode === \"range\") {\n                if (isDateInRange(date) && !isDateSelected(date))\n                    dayElement.classList.add(\"inRange\");\n            }\n            if (self.weekNumbers &&\n                self.config.showMonths === 1 &&\n                className !== \"prevMonthDay\" &&\n                i % 7 === 6) {\n                self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n            }\n            triggerEvent(\"onDayCreate\", dayElement);\n            return dayElement;\n        }\n        function focusOnDayElem(targetNode) {\n            targetNode.focus();\n            if (self.config.mode === \"range\")\n                onMouseOver(targetNode);\n        }\n        function getFirstAvailableDay(delta) {\n            var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n            var endMonth = delta > 0 ? self.config.showMonths : -1;\n            for (var m = startMonth; m != endMonth; m += delta) {\n                var month = self.daysContainer.children[m];\n                var startIndex = delta > 0 ? 0 : month.children.length - 1;\n                var endIndex = delta > 0 ? month.children.length : -1;\n                for (var i = startIndex; i != endIndex; i += delta) {\n                    var c = month.children[i];\n                    if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n                        return c;\n                }\n            }\n            return undefined;\n        }\n        function getNextAvailableDay(current, delta) {\n            var givenMonth = current.className.indexOf(\"Month\") === -1\n                ? current.dateObj.getMonth()\n                : self.currentMonth;\n            var endMonth = delta > 0 ? self.config.showMonths : -1;\n            var loopDelta = delta > 0 ? 1 : -1;\n            for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n                var month = self.daysContainer.children[m];\n                var startIndex = givenMonth - self.currentMonth === m\n                    ? current.$i + delta\n                    : delta < 0\n                        ? month.children.length - 1\n                        : 0;\n                var numMonthDays = month.children.length;\n                for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n                    var c = month.children[i];\n                    if (c.className.indexOf(\"hidden\") === -1 &&\n                        isEnabled(c.dateObj) &&\n                        Math.abs(current.$i - i) >= Math.abs(delta))\n                        return focusOnDayElem(c);\n                }\n            }\n            self.changeMonth(loopDelta);\n            focusOnDay(getFirstAvailableDay(loopDelta), 0);\n            return undefined;\n        }\n        function focusOnDay(current, offset) {\n            var activeElement = getClosestActiveElement();\n            var dayFocused = isInView(activeElement || document.body);\n            var startElem = current !== undefined\n                ? current\n                : dayFocused\n                    ? activeElement\n                    : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n                        ? self.selectedDateElem\n                        : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n                            ? self.todayDateElem\n                            : getFirstAvailableDay(offset > 0 ? 1 : -1);\n            if (startElem === undefined) {\n                self._input.focus();\n            }\n            else if (!dayFocused) {\n                focusOnDayElem(startElem);\n            }\n            else {\n                getNextAvailableDay(startElem, offset);\n            }\n        }\n        function buildMonthDays(year, month) {\n            var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n            var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12, year);\n            var daysInMonth = self.utils.getDaysInMonth(month, year), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n            var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n            // prepend days from the ending of previous month\n            for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n                days.appendChild(createDay(\"flatpickr-day \" + prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n            }\n            // Start at 1 since there is no 0th day\n            for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n                days.appendChild(createDay(\"flatpickr-day\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n            }\n            // append days from the next month\n            for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n                (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n                days.appendChild(createDay(\"flatpickr-day \" + nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n            }\n            //updateNavigationCurrentMonth();\n            var dayContainer = createElement(\"div\", \"dayContainer\");\n            dayContainer.appendChild(days);\n            return dayContainer;\n        }\n        function buildDays() {\n            if (self.daysContainer === undefined) {\n                return;\n            }\n            clearNode(self.daysContainer);\n            // TODO: week numbers for each month\n            if (self.weekNumbers)\n                clearNode(self.weekNumbers);\n            var frag = document.createDocumentFragment();\n            for (var i = 0; i < self.config.showMonths; i++) {\n                var d = new Date(self.currentYear, self.currentMonth, 1);\n                d.setMonth(self.currentMonth + i);\n                frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n            }\n            self.daysContainer.appendChild(frag);\n            self.days = self.daysContainer.firstChild;\n            if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n                onMouseOver();\n            }\n        }\n        function buildMonthSwitch() {\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType !== \"dropdown\")\n                return;\n            var shouldBuildMonth = function (month) {\n                if (self.config.minDate !== undefined &&\n                    self.currentYear === self.config.minDate.getFullYear() &&\n                    month < self.config.minDate.getMonth()) {\n                    return false;\n                }\n                return !(self.config.maxDate !== undefined &&\n                    self.currentYear === self.config.maxDate.getFullYear() &&\n                    month > self.config.maxDate.getMonth());\n            };\n            self.monthsDropdownContainer.tabIndex = -1;\n            self.monthsDropdownContainer.innerHTML = \"\";\n            for (var i = 0; i < 12; i++) {\n                if (!shouldBuildMonth(i))\n                    continue;\n                var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n                month.value = new Date(self.currentYear, i).getMonth().toString();\n                month.textContent = monthToStr(i, self.config.shorthandCurrentMonth, self.l10n);\n                month.tabIndex = -1;\n                if (self.currentMonth === i) {\n                    month.selected = true;\n                }\n                self.monthsDropdownContainer.appendChild(month);\n            }\n        }\n        function buildMonth() {\n            var container = createElement(\"div\", \"flatpickr-month\");\n            var monthNavFragment = window.document.createDocumentFragment();\n            var monthElement;\n            if (self.config.showMonths > 1 ||\n                self.config.monthSelectorType === \"static\") {\n                monthElement = createElement(\"span\", \"cur-month\");\n            }\n            else {\n                self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n                self.monthsDropdownContainer.setAttribute(\"aria-label\", self.l10n.monthAriaLabel);\n                bind(self.monthsDropdownContainer, \"change\", function (e) {\n                    var target = getEventTarget(e);\n                    var selectedMonth = parseInt(target.value, 10);\n                    self.changeMonth(selectedMonth - self.currentMonth);\n                    triggerEvent(\"onMonthChange\");\n                });\n                buildMonthSwitch();\n                monthElement = self.monthsDropdownContainer;\n            }\n            var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n            var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n            yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n            if (self.config.minDate) {\n                yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n            }\n            if (self.config.maxDate) {\n                yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n                yearElement.disabled =\n                    !!self.config.minDate &&\n                        self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n            }\n            var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n            currentMonth.appendChild(monthElement);\n            currentMonth.appendChild(yearInput);\n            monthNavFragment.appendChild(currentMonth);\n            container.appendChild(monthNavFragment);\n            return {\n                container: container,\n                yearElement: yearElement,\n                monthElement: monthElement,\n            };\n        }\n        function buildMonths() {\n            clearNode(self.monthNav);\n            self.monthNav.appendChild(self.prevMonthNav);\n            if (self.config.showMonths) {\n                self.yearElements = [];\n                self.monthElements = [];\n            }\n            for (var m = self.config.showMonths; m--;) {\n                var month = buildMonth();\n                self.yearElements.push(month.yearElement);\n                self.monthElements.push(month.monthElement);\n                self.monthNav.appendChild(month.container);\n            }\n            self.monthNav.appendChild(self.nextMonthNav);\n        }\n        function buildMonthNav() {\n            self.monthNav = createElement(\"div\", \"flatpickr-months\");\n            self.yearElements = [];\n            self.monthElements = [];\n            self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n            self.prevMonthNav.innerHTML = self.config.prevArrow;\n            self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n            self.nextMonthNav.innerHTML = self.config.nextArrow;\n            buildMonths();\n            Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n                get: function () { return self.__hidePrevMonthArrow; },\n                set: function (bool) {\n                    if (self.__hidePrevMonthArrow !== bool) {\n                        toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n                        self.__hidePrevMonthArrow = bool;\n                    }\n                },\n            });\n            Object.defineProperty(self, \"_hideNextMonthArrow\", {\n                get: function () { return self.__hideNextMonthArrow; },\n                set: function (bool) {\n                    if (self.__hideNextMonthArrow !== bool) {\n                        toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n                        self.__hideNextMonthArrow = bool;\n                    }\n                },\n            });\n            self.currentYearElement = self.yearElements[0];\n            updateNavigationCurrentMonth();\n            return self.monthNav;\n        }\n        function buildTime() {\n            self.calendarContainer.classList.add(\"hasTime\");\n            if (self.config.noCalendar)\n                self.calendarContainer.classList.add(\"noCalendar\");\n            var defaults = getDefaultHours(self.config);\n            self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n            self.timeContainer.tabIndex = -1;\n            var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n            var hourInput = createNumberInput(\"flatpickr-hour\", {\n                \"aria-label\": self.l10n.hourAriaLabel,\n            });\n            self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n            var minuteInput = createNumberInput(\"flatpickr-minute\", {\n                \"aria-label\": self.l10n.minuteAriaLabel,\n            });\n            self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n            self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n            self.hourElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getHours()\n                : self.config.time_24hr\n                    ? defaults.hours\n                    : military2ampm(defaults.hours));\n            self.minuteElement.value = pad(self.latestSelectedDateObj\n                ? self.latestSelectedDateObj.getMinutes()\n                : defaults.minutes);\n            self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n            self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n            self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n            self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n            self.hourElement.setAttribute(\"maxlength\", \"2\");\n            self.minuteElement.setAttribute(\"min\", \"0\");\n            self.minuteElement.setAttribute(\"max\", \"59\");\n            self.minuteElement.setAttribute(\"maxlength\", \"2\");\n            self.timeContainer.appendChild(hourInput);\n            self.timeContainer.appendChild(separator);\n            self.timeContainer.appendChild(minuteInput);\n            if (self.config.time_24hr)\n                self.timeContainer.classList.add(\"time24hr\");\n            if (self.config.enableSeconds) {\n                self.timeContainer.classList.add(\"hasSeconds\");\n                var secondInput = createNumberInput(\"flatpickr-second\");\n                self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n                self.secondElement.value = pad(self.latestSelectedDateObj\n                    ? self.latestSelectedDateObj.getSeconds()\n                    : defaults.seconds);\n                self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n                self.secondElement.setAttribute(\"min\", \"0\");\n                self.secondElement.setAttribute(\"max\", \"59\");\n                self.secondElement.setAttribute(\"maxlength\", \"2\");\n                self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n                self.timeContainer.appendChild(secondInput);\n            }\n            if (!self.config.time_24hr) {\n                // add self.amPM if appropriate\n                self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n                    ? self.hourElement.value\n                    : self.config.defaultHour) > 11)]);\n                self.amPM.title = self.l10n.toggleTitle;\n                self.amPM.tabIndex = -1;\n                self.timeContainer.appendChild(self.amPM);\n            }\n            return self.timeContainer;\n        }\n        function buildWeekdays() {\n            if (!self.weekdayContainer)\n                self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n            else\n                clearNode(self.weekdayContainer);\n            for (var i = self.config.showMonths; i--;) {\n                var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n                self.weekdayContainer.appendChild(container);\n            }\n            updateWeekdays();\n            return self.weekdayContainer;\n        }\n        function updateWeekdays() {\n            if (!self.weekdayContainer) {\n                return;\n            }\n            var firstDayOfWeek = self.l10n.firstDayOfWeek;\n            var weekdays = __spreadArrays(self.l10n.weekdays.shorthand);\n            if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n                weekdays = __spreadArrays(weekdays.splice(firstDayOfWeek, weekdays.length), weekdays.splice(0, firstDayOfWeek));\n            }\n            for (var i = self.config.showMonths; i--;) {\n                self.weekdayContainer.children[i].innerHTML = \"\\n      <span class='flatpickr-weekday'>\\n        \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n      </span>\\n      \";\n            }\n        }\n        /* istanbul ignore next */\n        function buildWeeks() {\n            self.calendarContainer.classList.add(\"hasWeeks\");\n            var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n            weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n            var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n            weekWrapper.appendChild(weekNumbers);\n            return {\n                weekWrapper: weekWrapper,\n                weekNumbers: weekNumbers,\n            };\n        }\n        function changeMonth(value, isOffset) {\n            if (isOffset === void 0) { isOffset = true; }\n            var delta = isOffset ? value : value - self.currentMonth;\n            if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n                (delta > 0 && self._hideNextMonthArrow === true))\n                return;\n            self.currentMonth += delta;\n            if (self.currentMonth < 0 || self.currentMonth > 11) {\n                self.currentYear += self.currentMonth > 11 ? 1 : -1;\n                self.currentMonth = (self.currentMonth + 12) % 12;\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n            buildDays();\n            triggerEvent(\"onMonthChange\");\n            updateNavigationCurrentMonth();\n        }\n        function clear(triggerChangeEvent, toInitial) {\n            if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n            if (toInitial === void 0) { toInitial = true; }\n            self.input.value = \"\";\n            if (self.altInput !== undefined)\n                self.altInput.value = \"\";\n            if (self.mobileInput !== undefined)\n                self.mobileInput.value = \"\";\n            self.selectedDates = [];\n            self.latestSelectedDateObj = undefined;\n            if (toInitial === true) {\n                self.currentYear = self._initialDate.getFullYear();\n                self.currentMonth = self._initialDate.getMonth();\n            }\n            if (self.config.enableTime === true) {\n                var _a = getDefaultHours(self.config), hours = _a.hours, minutes = _a.minutes, seconds = _a.seconds;\n                setHours(hours, minutes, seconds);\n            }\n            self.redraw();\n            if (triggerChangeEvent)\n                // triggerChangeEvent is true (default) or an Event\n                triggerEvent(\"onChange\");\n        }\n        function close() {\n            self.isOpen = false;\n            if (!self.isMobile) {\n                if (self.calendarContainer !== undefined) {\n                    self.calendarContainer.classList.remove(\"open\");\n                }\n                if (self._input !== undefined) {\n                    self._input.classList.remove(\"active\");\n                }\n            }\n            triggerEvent(\"onClose\");\n        }\n        function destroy() {\n            if (self.config !== undefined)\n                triggerEvent(\"onDestroy\");\n            for (var i = self._handlers.length; i--;) {\n                self._handlers[i].remove();\n            }\n            self._handlers = [];\n            if (self.mobileInput) {\n                if (self.mobileInput.parentNode)\n                    self.mobileInput.parentNode.removeChild(self.mobileInput);\n                self.mobileInput = undefined;\n            }\n            else if (self.calendarContainer && self.calendarContainer.parentNode) {\n                if (self.config.static && self.calendarContainer.parentNode) {\n                    var wrapper = self.calendarContainer.parentNode;\n                    wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n                    if (wrapper.parentNode) {\n                        while (wrapper.firstChild)\n                            wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n                        wrapper.parentNode.removeChild(wrapper);\n                    }\n                }\n                else\n                    self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n            }\n            if (self.altInput) {\n                self.input.type = \"text\";\n                if (self.altInput.parentNode)\n                    self.altInput.parentNode.removeChild(self.altInput);\n                delete self.altInput;\n            }\n            if (self.input) {\n                self.input.type = self.input._type;\n                self.input.classList.remove(\"flatpickr-input\");\n                self.input.removeAttribute(\"readonly\");\n            }\n            [\n                \"_showTimeInput\",\n                \"latestSelectedDateObj\",\n                \"_hideNextMonthArrow\",\n                \"_hidePrevMonthArrow\",\n                \"__hideNextMonthArrow\",\n                \"__hidePrevMonthArrow\",\n                \"isMobile\",\n                \"isOpen\",\n                \"selectedDateElem\",\n                \"minDateHasTime\",\n                \"maxDateHasTime\",\n                \"days\",\n                \"daysContainer\",\n                \"_input\",\n                \"_positionElement\",\n                \"innerContainer\",\n                \"rContainer\",\n                \"monthNav\",\n                \"todayDateElem\",\n                \"calendarContainer\",\n                \"weekdayContainer\",\n                \"prevMonthNav\",\n                \"nextMonthNav\",\n                \"monthsDropdownContainer\",\n                \"currentMonthElement\",\n                \"currentYearElement\",\n                \"navigationCurrentMonth\",\n                \"selectedDateElem\",\n                \"config\",\n            ].forEach(function (k) {\n                try {\n                    delete self[k];\n                }\n                catch (_) { }\n            });\n        }\n        function isCalendarElem(elem) {\n            return self.calendarContainer.contains(elem);\n        }\n        function documentClick(e) {\n            if (self.isOpen && !self.config.inline) {\n                var eventTarget_1 = getEventTarget(e);\n                var isCalendarElement = isCalendarElem(eventTarget_1);\n                var isInput = eventTarget_1 === self.input ||\n                    eventTarget_1 === self.altInput ||\n                    self.element.contains(eventTarget_1) ||\n                    // web components\n                    // e.path is not present in all browsers. circumventing typechecks\n                    (e.path &&\n                        e.path.indexOf &&\n                        (~e.path.indexOf(self.input) ||\n                            ~e.path.indexOf(self.altInput)));\n                var lostFocus = !isInput &&\n                    !isCalendarElement &&\n                    !isCalendarElem(e.relatedTarget);\n                var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n                    return elem.contains(eventTarget_1);\n                });\n                if (lostFocus && isIgnored) {\n                    if (self.config.allowInput) {\n                        self.setDate(self._input.value, false, self.config.altInput\n                            ? self.config.altFormat\n                            : self.config.dateFormat);\n                    }\n                    if (self.timeContainer !== undefined &&\n                        self.minuteElement !== undefined &&\n                        self.hourElement !== undefined &&\n                        self.input.value !== \"\" &&\n                        self.input.value !== undefined) {\n                        updateTime();\n                    }\n                    self.close();\n                    if (self.config &&\n                        self.config.mode === \"range\" &&\n                        self.selectedDates.length === 1)\n                        self.clear(false);\n                }\n            }\n        }\n        function changeYear(newYear) {\n            if (!newYear ||\n                (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n                (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n                return;\n            var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n            self.currentYear = newYearNum || self.currentYear;\n            if (self.config.maxDate &&\n                self.currentYear === self.config.maxDate.getFullYear()) {\n                self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n            }\n            else if (self.config.minDate &&\n                self.currentYear === self.config.minDate.getFullYear()) {\n                self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n            }\n            if (isNewYear) {\n                self.redraw();\n                triggerEvent(\"onYearChange\");\n                buildMonthSwitch();\n            }\n        }\n        function isEnabled(date, timeless) {\n            var _a;\n            if (timeless === void 0) { timeless = true; }\n            var dateToCheck = self.parseDate(date, undefined, timeless); // timeless\n            if ((self.config.minDate &&\n                dateToCheck &&\n                compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n                (self.config.maxDate &&\n                    dateToCheck &&\n                    compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n                return false;\n            if (!self.config.enable && self.config.disable.length === 0)\n                return true;\n            if (dateToCheck === undefined)\n                return false;\n            var bool = !!self.config.enable, array = (_a = self.config.enable) !== null && _a !== void 0 ? _a : self.config.disable;\n            for (var i = 0, d = void 0; i < array.length; i++) {\n                d = array[i];\n                if (typeof d === \"function\" &&\n                    d(dateToCheck) // disabled by function\n                )\n                    return bool;\n                else if (d instanceof Date &&\n                    dateToCheck !== undefined &&\n                    d.getTime() === dateToCheck.getTime())\n                    // disabled by date\n                    return bool;\n                else if (typeof d === \"string\") {\n                    // disabled by date string\n                    var parsed = self.parseDate(d, undefined, true);\n                    return parsed && parsed.getTime() === dateToCheck.getTime()\n                        ? bool\n                        : !bool;\n                }\n                else if (\n                // disabled by range\n                typeof d === \"object\" &&\n                    dateToCheck !== undefined &&\n                    d.from &&\n                    d.to &&\n                    dateToCheck.getTime() >= d.from.getTime() &&\n                    dateToCheck.getTime() <= d.to.getTime())\n                    return bool;\n            }\n            return !bool;\n        }\n        function isInView(elem) {\n            if (self.daysContainer !== undefined)\n                return (elem.className.indexOf(\"hidden\") === -1 &&\n                    elem.className.indexOf(\"flatpickr-disabled\") === -1 &&\n                    self.daysContainer.contains(elem));\n            return false;\n        }\n        function onBlur(e) {\n            var isInput = e.target === self._input;\n            var valueChanged = self._input.value.trimEnd() !== getDateStr();\n            if (isInput &&\n                valueChanged &&\n                !(e.relatedTarget && isCalendarElem(e.relatedTarget))) {\n                self.setDate(self._input.value, true, e.target === self.altInput\n                    ? self.config.altFormat\n                    : self.config.dateFormat);\n            }\n        }\n        function onKeyDown(e) {\n            // e.key                      e.keyCode\n            // \"Backspace\"                        8\n            // \"Tab\"                              9\n            // \"Enter\"                           13\n            // \"Escape\"     (IE \"Esc\")           27\n            // \"ArrowLeft\"  (IE \"Left\")          37\n            // \"ArrowUp\"    (IE \"Up\")            38\n            // \"ArrowRight\" (IE \"Right\")         39\n            // \"ArrowDown\"  (IE \"Down\")          40\n            // \"Delete\"     (IE \"Del\")           46\n            var eventTarget = getEventTarget(e);\n            var isInput = self.config.wrap\n                ? element.contains(eventTarget)\n                : eventTarget === self._input;\n            var allowInput = self.config.allowInput;\n            var allowKeydown = self.isOpen && (!allowInput || !isInput);\n            var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n            if (e.keyCode === 13 && isInput) {\n                if (allowInput) {\n                    self.setDate(self._input.value, true, eventTarget === self.altInput\n                        ? self.config.altFormat\n                        : self.config.dateFormat);\n                    self.close();\n                    return eventTarget.blur();\n                }\n                else {\n                    self.open();\n                }\n            }\n            else if (isCalendarElem(eventTarget) ||\n                allowKeydown ||\n                allowInlineKeydown) {\n                var isTimeObj = !!self.timeContainer &&\n                    self.timeContainer.contains(eventTarget);\n                switch (e.keyCode) {\n                    case 13:\n                        if (isTimeObj) {\n                            e.preventDefault();\n                            updateTime();\n                            focusAndClose();\n                        }\n                        else\n                            selectDate(e);\n                        break;\n                    case 27: // escape\n                        e.preventDefault();\n                        focusAndClose();\n                        break;\n                    case 8:\n                    case 46:\n                        if (isInput && !self.config.allowInput) {\n                            e.preventDefault();\n                            self.clear();\n                        }\n                        break;\n                    case 37:\n                    case 39:\n                        if (!isTimeObj && !isInput) {\n                            e.preventDefault();\n                            var activeElement = getClosestActiveElement();\n                            if (self.daysContainer !== undefined &&\n                                (allowInput === false ||\n                                    (activeElement && isInView(activeElement)))) {\n                                var delta_1 = e.keyCode === 39 ? 1 : -1;\n                                if (!e.ctrlKey)\n                                    focusOnDay(undefined, delta_1);\n                                else {\n                                    e.stopPropagation();\n                                    changeMonth(delta_1);\n                                    focusOnDay(getFirstAvailableDay(1), 0);\n                                }\n                            }\n                        }\n                        else if (self.hourElement)\n                            self.hourElement.focus();\n                        break;\n                    case 38:\n                    case 40:\n                        e.preventDefault();\n                        var delta = e.keyCode === 40 ? 1 : -1;\n                        if ((self.daysContainer &&\n                            eventTarget.$i !== undefined) ||\n                            eventTarget === self.input ||\n                            eventTarget === self.altInput) {\n                            if (e.ctrlKey) {\n                                e.stopPropagation();\n                                changeYear(self.currentYear - delta);\n                                focusOnDay(getFirstAvailableDay(1), 0);\n                            }\n                            else if (!isTimeObj)\n                                focusOnDay(undefined, delta * 7);\n                        }\n                        else if (eventTarget === self.currentYearElement) {\n                            changeYear(self.currentYear - delta);\n                        }\n                        else if (self.config.enableTime) {\n                            if (!isTimeObj && self.hourElement)\n                                self.hourElement.focus();\n                            updateTime(e);\n                            self._debouncedChange();\n                        }\n                        break;\n                    case 9:\n                        if (isTimeObj) {\n                            var elems = [\n                                self.hourElement,\n                                self.minuteElement,\n                                self.secondElement,\n                                self.amPM,\n                            ]\n                                .concat(self.pluginElements)\n                                .filter(function (x) { return x; });\n                            var i = elems.indexOf(eventTarget);\n                            if (i !== -1) {\n                                var target = elems[i + (e.shiftKey ? -1 : 1)];\n                                e.preventDefault();\n                                (target || self._input).focus();\n                            }\n                        }\n                        else if (!self.config.noCalendar &&\n                            self.daysContainer &&\n                            self.daysContainer.contains(eventTarget) &&\n                            e.shiftKey) {\n                            e.preventDefault();\n                            self._input.focus();\n                        }\n                        break;\n                }\n            }\n            if (self.amPM !== undefined && eventTarget === self.amPM) {\n                switch (e.key) {\n                    case self.l10n.amPM[0].charAt(0):\n                    case self.l10n.amPM[0].charAt(0).toLowerCase():\n                        self.amPM.textContent = self.l10n.amPM[0];\n                        setHoursFromInputs();\n                        updateValue();\n                        break;\n                    case self.l10n.amPM[1].charAt(0):\n                    case self.l10n.amPM[1].charAt(0).toLowerCase():\n                        self.amPM.textContent = self.l10n.amPM[1];\n                        setHoursFromInputs();\n                        updateValue();\n                        break;\n                }\n            }\n            if (isInput || isCalendarElem(eventTarget)) {\n                triggerEvent(\"onKeyDown\", e);\n            }\n        }\n        function onMouseOver(elem, cellClass) {\n            if (cellClass === void 0) { cellClass = \"flatpickr-day\"; }\n            if (self.selectedDates.length !== 1 ||\n                (elem &&\n                    (!elem.classList.contains(cellClass) ||\n                        elem.classList.contains(\"flatpickr-disabled\"))))\n                return;\n            var hoverDate = elem\n                ? elem.dateObj.getTime()\n                : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n            var containsDisabled = false;\n            var minRange = 0, maxRange = 0;\n            for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n                if (!isEnabled(new Date(t), true)) {\n                    containsDisabled =\n                        containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n                    if (t < initialDate && (!minRange || t > minRange))\n                        minRange = t;\n                    else if (t > initialDate && (!maxRange || t < maxRange))\n                        maxRange = t;\n                }\n            }\n            var hoverableCells = Array.from(self.rContainer.querySelectorAll(\"*:nth-child(-n+\" + self.config.showMonths + \") > .\" + cellClass));\n            hoverableCells.forEach(function (dayElem) {\n                var date = dayElem.dateObj;\n                var timestamp = date.getTime();\n                var outOfRange = (minRange > 0 && timestamp < minRange) ||\n                    (maxRange > 0 && timestamp > maxRange);\n                if (outOfRange) {\n                    dayElem.classList.add(\"notAllowed\");\n                    [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n                        dayElem.classList.remove(c);\n                    });\n                    return;\n                }\n                else if (containsDisabled && !outOfRange)\n                    return;\n                [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n                    dayElem.classList.remove(c);\n                });\n                if (elem !== undefined) {\n                    elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n                        ? \"startRange\"\n                        : \"endRange\");\n                    if (initialDate < hoverDate && timestamp === initialDate)\n                        dayElem.classList.add(\"startRange\");\n                    else if (initialDate > hoverDate && timestamp === initialDate)\n                        dayElem.classList.add(\"endRange\");\n                    if (timestamp >= minRange &&\n                        (maxRange === 0 || timestamp <= maxRange) &&\n                        isBetween(timestamp, initialDate, hoverDate))\n                        dayElem.classList.add(\"inRange\");\n                }\n            });\n        }\n        function onResize() {\n            if (self.isOpen && !self.config.static && !self.config.inline)\n                positionCalendar();\n        }\n        function open(e, positionElement) {\n            if (positionElement === void 0) { positionElement = self._positionElement; }\n            if (self.isMobile === true) {\n                if (e) {\n                    e.preventDefault();\n                    var eventTarget = getEventTarget(e);\n                    if (eventTarget) {\n                        eventTarget.blur();\n                    }\n                }\n                if (self.mobileInput !== undefined) {\n                    self.mobileInput.focus();\n                    self.mobileInput.click();\n                }\n                triggerEvent(\"onOpen\");\n                return;\n            }\n            else if (self._input.disabled || self.config.inline) {\n                return;\n            }\n            var wasOpen = self.isOpen;\n            self.isOpen = true;\n            if (!wasOpen) {\n                self.calendarContainer.classList.add(\"open\");\n                self._input.classList.add(\"active\");\n                triggerEvent(\"onOpen\");\n                positionCalendar(positionElement);\n            }\n            if (self.config.enableTime === true && self.config.noCalendar === true) {\n                if (self.config.allowInput === false &&\n                    (e === undefined ||\n                        !self.timeContainer.contains(e.relatedTarget))) {\n                    setTimeout(function () { return self.hourElement.select(); }, 50);\n                }\n            }\n        }\n        function minMaxDateSetter(type) {\n            return function (date) {\n                var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n                var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n                if (dateObj !== undefined) {\n                    self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n                        dateObj.getHours() > 0 ||\n                            dateObj.getMinutes() > 0 ||\n                            dateObj.getSeconds() > 0;\n                }\n                if (self.selectedDates) {\n                    self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n                    if (!self.selectedDates.length && type === \"min\")\n                        setHoursFromDate(dateObj);\n                    updateValue();\n                }\n                if (self.daysContainer) {\n                    redraw();\n                    if (dateObj !== undefined)\n                        self.currentYearElement[type] = dateObj.getFullYear().toString();\n                    else\n                        self.currentYearElement.removeAttribute(type);\n                    self.currentYearElement.disabled =\n                        !!inverseDateObj &&\n                            dateObj !== undefined &&\n                            inverseDateObj.getFullYear() === dateObj.getFullYear();\n                }\n            };\n        }\n        function parseConfig() {\n            var boolOpts = [\n                \"wrap\",\n                \"weekNumbers\",\n                \"allowInput\",\n                \"allowInvalidPreload\",\n                \"clickOpens\",\n                \"time_24hr\",\n                \"enableTime\",\n                \"noCalendar\",\n                \"altInput\",\n                \"shorthandCurrentMonth\",\n                \"inline\",\n                \"static\",\n                \"enableSeconds\",\n                \"disableMobile\",\n            ];\n            var userConfig = __assign(__assign({}, JSON.parse(JSON.stringify(element.dataset || {}))), instanceConfig);\n            var formats = {};\n            self.config.parseDate = userConfig.parseDate;\n            self.config.formatDate = userConfig.formatDate;\n            Object.defineProperty(self.config, \"enable\", {\n                get: function () { return self.config._enable; },\n                set: function (dates) {\n                    self.config._enable = parseDateRules(dates);\n                },\n            });\n            Object.defineProperty(self.config, \"disable\", {\n                get: function () { return self.config._disable; },\n                set: function (dates) {\n                    self.config._disable = parseDateRules(dates);\n                },\n            });\n            var timeMode = userConfig.mode === \"time\";\n            if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n                var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;\n                formats.dateFormat =\n                    userConfig.noCalendar || timeMode\n                        ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n                        : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n            }\n            if (userConfig.altInput &&\n                (userConfig.enableTime || timeMode) &&\n                !userConfig.altFormat) {\n                var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;\n                formats.altFormat =\n                    userConfig.noCalendar || timeMode\n                        ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n                        : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n            }\n            Object.defineProperty(self.config, \"minDate\", {\n                get: function () { return self.config._minDate; },\n                set: minMaxDateSetter(\"min\"),\n            });\n            Object.defineProperty(self.config, \"maxDate\", {\n                get: function () { return self.config._maxDate; },\n                set: minMaxDateSetter(\"max\"),\n            });\n            var minMaxTimeSetter = function (type) { return function (val) {\n                self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i:S\");\n            }; };\n            Object.defineProperty(self.config, \"minTime\", {\n                get: function () { return self.config._minTime; },\n                set: minMaxTimeSetter(\"min\"),\n            });\n            Object.defineProperty(self.config, \"maxTime\", {\n                get: function () { return self.config._maxTime; },\n                set: minMaxTimeSetter(\"max\"),\n            });\n            if (userConfig.mode === \"time\") {\n                self.config.noCalendar = true;\n                self.config.enableTime = true;\n            }\n            Object.assign(self.config, formats, userConfig);\n            for (var i = 0; i < boolOpts.length; i++)\n                // https://github.com/microsoft/TypeScript/issues/31663\n                self.config[boolOpts[i]] =\n                    self.config[boolOpts[i]] === true ||\n                        self.config[boolOpts[i]] === \"true\";\n            HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n                self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n            });\n            self.isMobile =\n                !self.config.disableMobile &&\n                    !self.config.inline &&\n                    self.config.mode === \"single\" &&\n                    !self.config.disable.length &&\n                    !self.config.enable &&\n                    !self.config.weekNumbers &&\n                    /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n            for (var i = 0; i < self.config.plugins.length; i++) {\n                var pluginConf = self.config.plugins[i](self) || {};\n                for (var key in pluginConf) {\n                    if (HOOKS.indexOf(key) > -1) {\n                        self.config[key] = arrayify(pluginConf[key])\n                            .map(bindToInstance)\n                            .concat(self.config[key]);\n                    }\n                    else if (typeof userConfig[key] === \"undefined\")\n                        self.config[key] = pluginConf[key];\n                }\n            }\n            if (!userConfig.altInputClass) {\n                self.config.altInputClass =\n                    getInputElem().className + \" \" + self.config.altInputClass;\n            }\n            triggerEvent(\"onParseConfig\");\n        }\n        function getInputElem() {\n            return self.config.wrap\n                ? element.querySelector(\"[data-input]\")\n                : element;\n        }\n        function setupLocale() {\n            if (typeof self.config.locale !== \"object\" &&\n                typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n                self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n            self.l10n = __assign(__assign({}, flatpickr.l10ns.default), (typeof self.config.locale === \"object\"\n                ? self.config.locale\n                : self.config.locale !== \"default\"\n                    ? flatpickr.l10ns[self.config.locale]\n                    : undefined));\n            tokenRegex.D = \"(\" + self.l10n.weekdays.shorthand.join(\"|\") + \")\";\n            tokenRegex.l = \"(\" + self.l10n.weekdays.longhand.join(\"|\") + \")\";\n            tokenRegex.M = \"(\" + self.l10n.months.shorthand.join(\"|\") + \")\";\n            tokenRegex.F = \"(\" + self.l10n.months.longhand.join(\"|\") + \")\";\n            tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n            var userConfig = __assign(__assign({}, instanceConfig), JSON.parse(JSON.stringify(element.dataset || {})));\n            if (userConfig.time_24hr === undefined &&\n                flatpickr.defaultConfig.time_24hr === undefined) {\n                self.config.time_24hr = self.l10n.time_24hr;\n            }\n            self.formatDate = createDateFormatter(self);\n            self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n        }\n        function positionCalendar(customPositionElement) {\n            if (typeof self.config.position === \"function\") {\n                return void self.config.position(self, customPositionElement);\n            }\n            if (self.calendarContainer === undefined)\n                return;\n            triggerEvent(\"onPreCalendarPosition\");\n            var positionElement = customPositionElement || self._positionElement;\n            var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n                (configPosVertical !== \"below\" &&\n                    distanceFromBottom < calendarHeight &&\n                    inputBounds.top > calendarHeight);\n            var top = window.pageYOffset +\n                inputBounds.top +\n                (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n            toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n            toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n            if (self.config.inline)\n                return;\n            var left = window.pageXOffset + inputBounds.left;\n            var isCenter = false;\n            var isRight = false;\n            if (configPosHorizontal === \"center\") {\n                left -= (calendarWidth - inputBounds.width) / 2;\n                isCenter = true;\n            }\n            else if (configPosHorizontal === \"right\") {\n                left -= calendarWidth - inputBounds.width;\n                isRight = true;\n            }\n            toggleClass(self.calendarContainer, \"arrowLeft\", !isCenter && !isRight);\n            toggleClass(self.calendarContainer, \"arrowCenter\", isCenter);\n            toggleClass(self.calendarContainer, \"arrowRight\", isRight);\n            var right = window.document.body.offsetWidth -\n                (window.pageXOffset + inputBounds.right);\n            var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n            var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n            toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n            if (self.config.static)\n                return;\n            self.calendarContainer.style.top = top + \"px\";\n            if (!rightMost) {\n                self.calendarContainer.style.left = left + \"px\";\n                self.calendarContainer.style.right = \"auto\";\n            }\n            else if (!centerMost) {\n                self.calendarContainer.style.left = \"auto\";\n                self.calendarContainer.style.right = right + \"px\";\n            }\n            else {\n                var doc = getDocumentStyleSheet();\n                // some testing environments don't have css support\n                if (doc === undefined)\n                    return;\n                var bodyWidth = window.document.body.offsetWidth;\n                var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n                var centerBefore = \".flatpickr-calendar.centerMost:before\";\n                var centerAfter = \".flatpickr-calendar.centerMost:after\";\n                var centerIndex = doc.cssRules.length;\n                var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n                toggleClass(self.calendarContainer, \"rightMost\", false);\n                toggleClass(self.calendarContainer, \"centerMost\", true);\n                doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n                self.calendarContainer.style.left = centerLeft + \"px\";\n                self.calendarContainer.style.right = \"auto\";\n            }\n        }\n        function getDocumentStyleSheet() {\n            var editableSheet = null;\n            for (var i = 0; i < document.styleSheets.length; i++) {\n                var sheet = document.styleSheets[i];\n                if (!sheet.cssRules)\n                    continue;\n                try {\n                    sheet.cssRules;\n                }\n                catch (err) {\n                    continue;\n                }\n                editableSheet = sheet;\n                break;\n            }\n            return editableSheet != null ? editableSheet : createStyleSheet();\n        }\n        function createStyleSheet() {\n            var style = document.createElement(\"style\");\n            document.head.appendChild(style);\n            return style.sheet;\n        }\n        function redraw() {\n            if (self.config.noCalendar || self.isMobile)\n                return;\n            buildMonthSwitch();\n            updateNavigationCurrentMonth();\n            buildDays();\n        }\n        function focusAndClose() {\n            self._input.focus();\n            if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n                navigator.msMaxTouchPoints !== undefined) {\n                // hack - bugs in the way IE handles focus keeps the calendar open\n                setTimeout(self.close, 0);\n            }\n            else {\n                self.close();\n            }\n        }\n        function selectDate(e) {\n            e.preventDefault();\n            e.stopPropagation();\n            var isSelectable = function (day) {\n                return day.classList &&\n                    day.classList.contains(\"flatpickr-day\") &&\n                    !day.classList.contains(\"flatpickr-disabled\") &&\n                    !day.classList.contains(\"notAllowed\");\n            };\n            var t = findParent(getEventTarget(e), isSelectable);\n            if (t === undefined)\n                return;\n            var target = t;\n            var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n            var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n                selectedDate.getMonth() >\n                    self.currentMonth + self.config.showMonths - 1) &&\n                self.config.mode !== \"range\";\n            self.selectedDateElem = target;\n            if (self.config.mode === \"single\")\n                self.selectedDates = [selectedDate];\n            else if (self.config.mode === \"multiple\") {\n                var selectedIndex = isDateSelected(selectedDate);\n                if (selectedIndex)\n                    self.selectedDates.splice(parseInt(selectedIndex), 1);\n                else\n                    self.selectedDates.push(selectedDate);\n            }\n            else if (self.config.mode === \"range\") {\n                if (self.selectedDates.length === 2) {\n                    self.clear(false, false);\n                }\n                self.latestSelectedDateObj = selectedDate;\n                self.selectedDates.push(selectedDate);\n                // unless selecting same date twice, sort ascendingly\n                if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n                    self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n            }\n            setHoursFromInputs();\n            if (shouldChangeMonth) {\n                var isNewYear = self.currentYear !== selectedDate.getFullYear();\n                self.currentYear = selectedDate.getFullYear();\n                self.currentMonth = selectedDate.getMonth();\n                if (isNewYear) {\n                    triggerEvent(\"onYearChange\");\n                    buildMonthSwitch();\n                }\n                triggerEvent(\"onMonthChange\");\n            }\n            updateNavigationCurrentMonth();\n            buildDays();\n            updateValue();\n            // maintain focus\n            if (!shouldChangeMonth &&\n                self.config.mode !== \"range\" &&\n                self.config.showMonths === 1)\n                focusOnDayElem(target);\n            else if (self.selectedDateElem !== undefined &&\n                self.hourElement === undefined) {\n                self.selectedDateElem && self.selectedDateElem.focus();\n            }\n            if (self.hourElement !== undefined)\n                self.hourElement !== undefined && self.hourElement.focus();\n            if (self.config.closeOnSelect) {\n                var single = self.config.mode === \"single\" && !self.config.enableTime;\n                var range = self.config.mode === \"range\" &&\n                    self.selectedDates.length === 2 &&\n                    !self.config.enableTime;\n                if (single || range) {\n                    focusAndClose();\n                }\n            }\n            triggerChange();\n        }\n        var CALLBACKS = {\n            locale: [setupLocale, updateWeekdays],\n            showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n            minDate: [jumpToDate],\n            maxDate: [jumpToDate],\n            positionElement: [updatePositionElement],\n            clickOpens: [\n                function () {\n                    if (self.config.clickOpens === true) {\n                        bind(self._input, \"focus\", self.open);\n                        bind(self._input, \"click\", self.open);\n                    }\n                    else {\n                        self._input.removeEventListener(\"focus\", self.open);\n                        self._input.removeEventListener(\"click\", self.open);\n                    }\n                },\n            ],\n        };\n        function set(option, value) {\n            if (option !== null && typeof option === \"object\") {\n                Object.assign(self.config, option);\n                for (var key in option) {\n                    if (CALLBACKS[key] !== undefined)\n                        CALLBACKS[key].forEach(function (x) { return x(); });\n                }\n            }\n            else {\n                self.config[option] = value;\n                if (CALLBACKS[option] !== undefined)\n                    CALLBACKS[option].forEach(function (x) { return x(); });\n                else if (HOOKS.indexOf(option) > -1)\n                    self.config[option] = arrayify(value);\n            }\n            self.redraw();\n            updateValue(true);\n        }\n        function setSelectedDate(inputDate, format) {\n            var dates = [];\n            if (inputDate instanceof Array)\n                dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n            else if (inputDate instanceof Date || typeof inputDate === \"number\")\n                dates = [self.parseDate(inputDate, format)];\n            else if (typeof inputDate === \"string\") {\n                switch (self.config.mode) {\n                    case \"single\":\n                    case \"time\":\n                        dates = [self.parseDate(inputDate, format)];\n                        break;\n                    case \"multiple\":\n                        dates = inputDate\n                            .split(self.config.conjunction)\n                            .map(function (date) { return self.parseDate(date, format); });\n                        break;\n                    case \"range\":\n                        dates = inputDate\n                            .split(self.l10n.rangeSeparator)\n                            .map(function (date) { return self.parseDate(date, format); });\n                        break;\n                }\n            }\n            else\n                self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n            self.selectedDates = (self.config.allowInvalidPreload\n                ? dates\n                : dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); }));\n            if (self.config.mode === \"range\")\n                self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n        }\n        function setDate(date, triggerChange, format) {\n            if (triggerChange === void 0) { triggerChange = false; }\n            if (format === void 0) { format = self.config.dateFormat; }\n            if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n                return self.clear(triggerChange);\n            setSelectedDate(date, format);\n            self.latestSelectedDateObj =\n                self.selectedDates[self.selectedDates.length - 1];\n            self.redraw();\n            jumpToDate(undefined, triggerChange);\n            setHoursFromDate();\n            if (self.selectedDates.length === 0) {\n                self.clear(false);\n            }\n            updateValue(triggerChange);\n            if (triggerChange)\n                triggerEvent(\"onChange\");\n        }\n        function parseDateRules(arr) {\n            return arr\n                .slice()\n                .map(function (rule) {\n                if (typeof rule === \"string\" ||\n                    typeof rule === \"number\" ||\n                    rule instanceof Date) {\n                    return self.parseDate(rule, undefined, true);\n                }\n                else if (rule &&\n                    typeof rule === \"object\" &&\n                    rule.from &&\n                    rule.to)\n                    return {\n                        from: self.parseDate(rule.from, undefined),\n                        to: self.parseDate(rule.to, undefined),\n                    };\n                return rule;\n            })\n                .filter(function (x) { return x; }); // remove falsy values\n        }\n        function setupDates() {\n            self.selectedDates = [];\n            self.now = self.parseDate(self.config.now) || new Date();\n            // Workaround IE11 setting placeholder as the input's value\n            var preloadedDate = self.config.defaultDate ||\n                ((self.input.nodeName === \"INPUT\" ||\n                    self.input.nodeName === \"TEXTAREA\") &&\n                    self.input.placeholder &&\n                    self.input.value === self.input.placeholder\n                    ? null\n                    : self.input.value);\n            if (preloadedDate)\n                setSelectedDate(preloadedDate, self.config.dateFormat);\n            self._initialDate =\n                self.selectedDates.length > 0\n                    ? self.selectedDates[0]\n                    : self.config.minDate &&\n                        self.config.minDate.getTime() > self.now.getTime()\n                        ? self.config.minDate\n                        : self.config.maxDate &&\n                            self.config.maxDate.getTime() < self.now.getTime()\n                            ? self.config.maxDate\n                            : self.now;\n            self.currentYear = self._initialDate.getFullYear();\n            self.currentMonth = self._initialDate.getMonth();\n            if (self.selectedDates.length > 0)\n                self.latestSelectedDateObj = self.selectedDates[0];\n            if (self.config.minTime !== undefined)\n                self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n            if (self.config.maxTime !== undefined)\n                self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n            self.minDateHasTime =\n                !!self.config.minDate &&\n                    (self.config.minDate.getHours() > 0 ||\n                        self.config.minDate.getMinutes() > 0 ||\n                        self.config.minDate.getSeconds() > 0);\n            self.maxDateHasTime =\n                !!self.config.maxDate &&\n                    (self.config.maxDate.getHours() > 0 ||\n                        self.config.maxDate.getMinutes() > 0 ||\n                        self.config.maxDate.getSeconds() > 0);\n        }\n        function setupInputs() {\n            self.input = getInputElem();\n            /* istanbul ignore next */\n            if (!self.input) {\n                self.config.errorHandler(new Error(\"Invalid input element specified\"));\n                return;\n            }\n            // hack: store previous type to restore it after destroy()\n            self.input._type = self.input.type;\n            self.input.type = \"text\";\n            self.input.classList.add(\"flatpickr-input\");\n            self._input = self.input;\n            if (self.config.altInput) {\n                // replicate self.element\n                self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n                self._input = self.altInput;\n                self.altInput.placeholder = self.input.placeholder;\n                self.altInput.disabled = self.input.disabled;\n                self.altInput.required = self.input.required;\n                self.altInput.tabIndex = self.input.tabIndex;\n                self.altInput.type = \"text\";\n                self.input.setAttribute(\"type\", \"hidden\");\n                if (!self.config.static && self.input.parentNode)\n                    self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n            }\n            if (!self.config.allowInput)\n                self._input.setAttribute(\"readonly\", \"readonly\");\n            updatePositionElement();\n        }\n        function updatePositionElement() {\n            self._positionElement = self.config.positionElement || self._input;\n        }\n        function setupMobile() {\n            var inputType = self.config.enableTime\n                ? self.config.noCalendar\n                    ? \"time\"\n                    : \"datetime-local\"\n                : \"date\";\n            self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n            self.mobileInput.tabIndex = 1;\n            self.mobileInput.type = inputType;\n            self.mobileInput.disabled = self.input.disabled;\n            self.mobileInput.required = self.input.required;\n            self.mobileInput.placeholder = self.input.placeholder;\n            self.mobileFormatStr =\n                inputType === \"datetime-local\"\n                    ? \"Y-m-d\\\\TH:i:S\"\n                    : inputType === \"date\"\n                        ? \"Y-m-d\"\n                        : \"H:i:S\";\n            if (self.selectedDates.length > 0) {\n                self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n            }\n            if (self.config.minDate)\n                self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n            if (self.config.maxDate)\n                self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n            if (self.input.getAttribute(\"step\"))\n                self.mobileInput.step = String(self.input.getAttribute(\"step\"));\n            self.input.type = \"hidden\";\n            if (self.altInput !== undefined)\n                self.altInput.type = \"hidden\";\n            try {\n                if (self.input.parentNode)\n                    self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n            }\n            catch (_a) { }\n            bind(self.mobileInput, \"change\", function (e) {\n                self.setDate(getEventTarget(e).value, false, self.mobileFormatStr);\n                triggerEvent(\"onChange\");\n                triggerEvent(\"onClose\");\n            });\n        }\n        function toggle(e) {\n            if (self.isOpen === true)\n                return self.close();\n            self.open(e);\n        }\n        function triggerEvent(event, data) {\n            // If the instance has been destroyed already, all hooks have been removed\n            if (self.config === undefined)\n                return;\n            var hooks = self.config[event];\n            if (hooks !== undefined && hooks.length > 0) {\n                for (var i = 0; hooks[i] && i < hooks.length; i++)\n                    hooks[i](self.selectedDates, self.input.value, self, data);\n            }\n            if (event === \"onChange\") {\n                self.input.dispatchEvent(createEvent(\"change\"));\n                // many front-end frameworks bind to the input event\n                self.input.dispatchEvent(createEvent(\"input\"));\n            }\n        }\n        function createEvent(name) {\n            var e = document.createEvent(\"Event\");\n            e.initEvent(name, true, true);\n            return e;\n        }\n        function isDateSelected(date) {\n            for (var i = 0; i < self.selectedDates.length; i++) {\n                var selectedDate = self.selectedDates[i];\n                if (selectedDate instanceof Date &&\n                    compareDates(selectedDate, date) === 0)\n                    return \"\" + i;\n            }\n            return false;\n        }\n        function isDateInRange(date) {\n            if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n                return false;\n            return (compareDates(date, self.selectedDates[0]) >= 0 &&\n                compareDates(date, self.selectedDates[1]) <= 0);\n        }\n        function updateNavigationCurrentMonth() {\n            if (self.config.noCalendar || self.isMobile || !self.monthNav)\n                return;\n            self.yearElements.forEach(function (yearElement, i) {\n                var d = new Date(self.currentYear, self.currentMonth, 1);\n                d.setMonth(self.currentMonth + i);\n                if (self.config.showMonths > 1 ||\n                    self.config.monthSelectorType === \"static\") {\n                    self.monthElements[i].textContent =\n                        monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n                }\n                else {\n                    self.monthsDropdownContainer.value = d.getMonth().toString();\n                }\n                yearElement.value = d.getFullYear().toString();\n            });\n            self._hidePrevMonthArrow =\n                self.config.minDate !== undefined &&\n                    (self.currentYear === self.config.minDate.getFullYear()\n                        ? self.currentMonth <= self.config.minDate.getMonth()\n                        : self.currentYear < self.config.minDate.getFullYear());\n            self._hideNextMonthArrow =\n                self.config.maxDate !== undefined &&\n                    (self.currentYear === self.config.maxDate.getFullYear()\n                        ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n                        : self.currentYear > self.config.maxDate.getFullYear());\n        }\n        function getDateStr(specificFormat) {\n            var format = specificFormat ||\n                (self.config.altInput ? self.config.altFormat : self.config.dateFormat);\n            return self.selectedDates\n                .map(function (dObj) { return self.formatDate(dObj, format); })\n                .filter(function (d, i, arr) {\n                return self.config.mode !== \"range\" ||\n                    self.config.enableTime ||\n                    arr.indexOf(d) === i;\n            })\n                .join(self.config.mode !== \"range\"\n                ? self.config.conjunction\n                : self.l10n.rangeSeparator);\n        }\n        /**\n         * Updates the values of inputs associated with the calendar\n         */\n        function updateValue(triggerChange) {\n            if (triggerChange === void 0) { triggerChange = true; }\n            if (self.mobileInput !== undefined && self.mobileFormatStr) {\n                self.mobileInput.value =\n                    self.latestSelectedDateObj !== undefined\n                        ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n                        : \"\";\n            }\n            self.input.value = getDateStr(self.config.dateFormat);\n            if (self.altInput !== undefined) {\n                self.altInput.value = getDateStr(self.config.altFormat);\n            }\n            if (triggerChange !== false)\n                triggerEvent(\"onValueUpdate\");\n        }\n        function onMonthNavClick(e) {\n            var eventTarget = getEventTarget(e);\n            var isPrevMonth = self.prevMonthNav.contains(eventTarget);\n            var isNextMonth = self.nextMonthNav.contains(eventTarget);\n            if (isPrevMonth || isNextMonth) {\n                changeMonth(isPrevMonth ? -1 : 1);\n            }\n            else if (self.yearElements.indexOf(eventTarget) >= 0) {\n                eventTarget.select();\n            }\n            else if (eventTarget.classList.contains(\"arrowUp\")) {\n                self.changeYear(self.currentYear + 1);\n            }\n            else if (eventTarget.classList.contains(\"arrowDown\")) {\n                self.changeYear(self.currentYear - 1);\n            }\n        }\n        function timeWrapper(e) {\n            e.preventDefault();\n            var isKeyDown = e.type === \"keydown\", eventTarget = getEventTarget(e), input = eventTarget;\n            if (self.amPM !== undefined && eventTarget === self.amPM) {\n                self.amPM.textContent =\n                    self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n            }\n            var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n                (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n            var newValue = curValue + step * delta;\n            if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n                var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n                if (newValue < min) {\n                    newValue =\n                        max +\n                            newValue +\n                            int(!isHourElem) +\n                            (int(isHourElem) && int(!self.amPM));\n                    if (isMinuteElem)\n                        incrementNumInput(undefined, -1, self.hourElement);\n                }\n                else if (newValue > max) {\n                    newValue =\n                        input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n                    if (isMinuteElem)\n                        incrementNumInput(undefined, 1, self.hourElement);\n                }\n                if (self.amPM &&\n                    isHourElem &&\n                    (step === 1\n                        ? newValue + curValue === 23\n                        : Math.abs(newValue - curValue) > step)) {\n                    self.amPM.textContent =\n                        self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n                }\n                input.value = pad(newValue);\n            }\n        }\n        init();\n        return self;\n    }\n    /* istanbul ignore next */\n    function _flatpickr(nodeList, config) {\n        // static list\n        var nodes = Array.prototype.slice\n            .call(nodeList)\n            .filter(function (x) { return x instanceof HTMLElement; });\n        var instances = [];\n        for (var i = 0; i < nodes.length; i++) {\n            var node = nodes[i];\n            try {\n                if (node.getAttribute(\"data-fp-omit\") !== null)\n                    continue;\n                if (node._flatpickr !== undefined) {\n                    node._flatpickr.destroy();\n                    node._flatpickr = undefined;\n                }\n                node._flatpickr = FlatpickrInstance(node, config || {});\n                instances.push(node._flatpickr);\n            }\n            catch (e) {\n                console.error(e);\n            }\n        }\n        return instances.length === 1 ? instances[0] : instances;\n    }\n    /* istanbul ignore next */\n    if (typeof HTMLElement !== \"undefined\" &&\n        typeof HTMLCollection !== \"undefined\" &&\n        typeof NodeList !== \"undefined\") {\n        // browser env\n        HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n            return _flatpickr(this, config);\n        };\n        HTMLElement.prototype.flatpickr = function (config) {\n            return _flatpickr([this], config);\n        };\n    }\n    /* istanbul ignore next */\n    var flatpickr = function (selector, config) {\n        if (typeof selector === \"string\") {\n            return _flatpickr(window.document.querySelectorAll(selector), config);\n        }\n        else if (selector instanceof Node) {\n            return _flatpickr([selector], config);\n        }\n        else {\n            return _flatpickr(selector, config);\n        }\n    };\n    /* istanbul ignore next */\n    flatpickr.defaultConfig = {};\n    flatpickr.l10ns = {\n        en: __assign({}, english),\n        default: __assign({}, english),\n    };\n    flatpickr.localize = function (l10n) {\n        flatpickr.l10ns.default = __assign(__assign({}, flatpickr.l10ns.default), l10n);\n    };\n    flatpickr.setDefaults = function (config) {\n        flatpickr.defaultConfig = __assign(__assign({}, flatpickr.defaultConfig), config);\n    };\n    flatpickr.parseDate = createDateParser({});\n    flatpickr.formatDate = createDateFormatter({});\n    flatpickr.compareDates = compareDates;\n    /* istanbul ignore next */\n    if (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n        jQuery.fn.flatpickr = function (config) {\n            return _flatpickr(this, config);\n        };\n    }\n    Date.prototype.fp_incr = function (days) {\n        return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n    };\n    if (typeof window !== \"undefined\") {\n        window.flatpickr = flatpickr;\n    }\n\n    return flatpickr;\n\n})));\n", "export default {\n  logger: self.console,\n  WebSocket: self.WebSocket\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordPing() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    this.recordPing()\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    switch (type) {\n      case message_types.welcome:\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return this.monitor.recordPing()\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        return this.subscriptions.notify(identifier, \"connected\")\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n", "(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"Flowbite\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Flowbite\"] = factory();\n\telse\n\t\troot[\"Flowbite\"] = factory();\n})(self, function() {\nreturn ", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export { default as applyStyles } from \"./applyStyles.js\";\nexport { default as arrow } from \"./arrow.js\";\nexport { default as computeStyles } from \"./computeStyles.js\";\nexport { default as eventListeners } from \"./eventListeners.js\";\nexport { default as flip } from \"./flip.js\";\nexport { default as hide } from \"./hide.js\";\nexport { default as offset } from \"./offset.js\";\nexport { default as popperOffsets } from \"./popperOffsets.js\";\nexport { default as preventOverflow } from \"./preventOverflow.js\";", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { AccordionItem, AccordionOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { AccordionInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: AccordionOptions = {\n    alwaysOpen: false,\n    activeClasses: 'bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white',\n    inactiveClasses: 'text-gray-500 dark:text-gray-400',\n    onOpen: () => {},\n    onClose: () => {},\n    onToggle: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Accordion implements AccordionInterface {\n    _instanceId: string;\n    _accordionEl: HTMLElement;\n    _items: AccordionItem[];\n    _options: AccordionOptions;\n    _clickHandler: EventListenerOrEventListenerObject;\n    _initialized: boolean;\n\n    constructor(\n        accordionEl: HTMLElement | null = null,\n        items: AccordionItem[] = [],\n        options: AccordionOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : accordionEl.id;\n        this._accordionEl = accordionEl;\n        this._items = items;\n        this._options = { ...Default, ...options };\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Accordion',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._items.length && !this._initialized) {\n            // show accordion item based on click\n            this._items.forEach((item) => {\n                if (item.active) {\n                    this.open(item.id);\n                }\n\n                const clickHandler = () => {\n                    this.toggle(item.id);\n                };\n\n                item.triggerEl.addEventListener('click', clickHandler);\n\n                // Store the clickHandler in a property of the item for removal later\n                item.clickHandler = clickHandler;\n            });\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._items.length && this._initialized) {\n            this._items.forEach((item) => {\n                item.triggerEl.removeEventListener('click', item.clickHandler);\n\n                // Clean up by deleting the clickHandler property from the item\n                delete item.clickHandler;\n            });\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Accordion', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    getItem(id: string) {\n        return this._items.filter((item) => item.id === id)[0];\n    }\n\n    open(id: string) {\n        const item = this.getItem(id);\n\n        // don't hide other accordions if always open\n        if (!this._options.alwaysOpen) {\n            this._items.map((i) => {\n                if (i !== item) {\n                    i.triggerEl.classList.remove(\n                        ...this._options.activeClasses.split(' ')\n                    );\n                    i.triggerEl.classList.add(\n                        ...this._options.inactiveClasses.split(' ')\n                    );\n                    i.targetEl.classList.add('hidden');\n                    i.triggerEl.setAttribute('aria-expanded', 'false');\n                    i.active = false;\n\n                    // rotate icon if set\n                    if (i.iconEl) {\n                        i.iconEl.classList.add('rotate-180');\n                    }\n                }\n            });\n        }\n\n        // show active item\n        item.triggerEl.classList.add(...this._options.activeClasses.split(' '));\n        item.triggerEl.classList.remove(\n            ...this._options.inactiveClasses.split(' ')\n        );\n        item.triggerEl.setAttribute('aria-expanded', 'true');\n        item.targetEl.classList.remove('hidden');\n        item.active = true;\n\n        // rotate icon if set\n        if (item.iconEl) {\n            item.iconEl.classList.remove('rotate-180');\n        }\n\n        // callback function\n        this._options.onOpen(this, item);\n    }\n\n    toggle(id: string) {\n        const item = this.getItem(id);\n\n        if (item.active) {\n            this.close(id);\n        } else {\n            this.open(id);\n        }\n\n        // callback function\n        this._options.onToggle(this, item);\n    }\n\n    close(id: string) {\n        const item = this.getItem(id);\n\n        item.triggerEl.classList.remove(\n            ...this._options.activeClasses.split(' ')\n        );\n        item.triggerEl.classList.add(\n            ...this._options.inactiveClasses.split(' ')\n        );\n        item.targetEl.classList.add('hidden');\n        item.triggerEl.setAttribute('aria-expanded', 'false');\n        item.active = false;\n\n        // rotate icon if set\n        if (item.iconEl) {\n            item.iconEl.classList.add('rotate-180');\n        }\n\n        // callback function\n        this._options.onClose(this, item);\n    }\n\n    updateOnOpen(callback: () => void) {\n        this._options.onOpen = callback;\n    }\n\n    updateOnClose(callback: () => void) {\n        this._options.onClose = callback;\n    }\n\n    updateOnToggle(callback: () => void) {\n        this._options.onToggle = callback;\n    }\n}\n\nexport function initAccordions() {\n    document.querySelectorAll('[data-accordion]').forEach(($accordionEl) => {\n        const alwaysOpen = $accordionEl.getAttribute('data-accordion');\n        const activeClasses = $accordionEl.getAttribute('data-active-classes');\n        const inactiveClasses = $accordionEl.getAttribute(\n            'data-inactive-classes'\n        );\n\n        const items = [] as AccordionItem[];\n        $accordionEl\n            .querySelectorAll('[data-accordion-target]')\n            .forEach(($triggerEl) => {\n                // Consider only items that directly belong to $accordionEl\n                // (to make nested accordions work).\n                if ($triggerEl.closest('[data-accordion]') === $accordionEl) {\n                    const item = {\n                        id: $triggerEl.getAttribute('data-accordion-target'),\n                        triggerEl: $triggerEl,\n                        targetEl: document.querySelector(\n                            $triggerEl.getAttribute('data-accordion-target')\n                        ),\n                        iconEl: $triggerEl.querySelector(\n                            '[data-accordion-icon]'\n                        ),\n                        active:\n                            $triggerEl.getAttribute('aria-expanded') === 'true'\n                                ? true\n                                : false,\n                    } as AccordionItem;\n                    items.push(item);\n                }\n            });\n\n        new Accordion($accordionEl as HTMLElement, items, {\n            alwaysOpen: alwaysOpen === 'open' ? true : false,\n            activeClasses: activeClasses\n                ? activeClasses\n                : Default.activeClasses,\n            inactiveClasses: inactiveClasses\n                ? inactiveClasses\n                : Default.inactiveClasses,\n        } as AccordionOptions);\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Accordion = Accordion;\n    window.initAccordions = initAccordions;\n}\n\nexport default Accordion;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type {\n    CarouselOptions,\n    CarouselItem,\n    IndicatorItem,\n    RotationItems,\n} from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { CarouselInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: CarouselOptions = {\n    defaultPosition: 0,\n    indicators: {\n        items: [],\n        activeClasses: 'bg-white dark:bg-gray-800',\n        inactiveClasses:\n            'bg-white/50 dark:bg-gray-800/50 hover:bg-white dark:hover:bg-gray-800',\n    },\n    interval: 3000,\n    onNext: () => {},\n    onPrev: () => {},\n    onChange: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Carousel implements CarouselInterface {\n    _instanceId: string;\n    _carouselEl: HTMLElement;\n    _items: CarouselItem[];\n    _indicators: IndicatorItem[];\n    _activeItem: CarouselItem;\n    _intervalDuration: number;\n    _intervalInstance: number;\n    _options: CarouselOptions;\n    _initialized: boolean;\n\n    constructor(\n        carouselEl: HTMLElement | null = null,\n        items: CarouselItem[] = [],\n        options: CarouselOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : carouselEl.id;\n        this._carouselEl = carouselEl;\n        this._items = items;\n        this._options = {\n            ...Default,\n            ...options,\n            indicators: { ...Default.indicators, ...options.indicators },\n        };\n        this._activeItem = this.getItem(this._options.defaultPosition);\n        this._indicators = this._options.indicators.items;\n        this._intervalDuration = this._options.interval;\n        this._intervalInstance = null;\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Carousel',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    /**\n     * initialize carousel and items based on active one\n     */\n    init() {\n        if (this._items.length && !this._initialized) {\n            this._items.map((item: CarouselItem) => {\n                item.el.classList.add(\n                    'absolute',\n                    'inset-0',\n                    'transition-transform',\n                    'transform'\n                );\n            });\n\n            // if no active item is set then first position is default\n            if (this.getActiveItem()) {\n                this.slideTo(this.getActiveItem().position);\n            } else {\n                this.slideTo(0);\n            }\n\n            this._indicators.map((indicator, position) => {\n                indicator.el.addEventListener('click', () => {\n                    this.slideTo(position);\n                });\n            });\n\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._initialized) {\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Carousel', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    getItem(position: number) {\n        return this._items[position];\n    }\n\n    /**\n     * Slide to the element based on id\n     * @param {*} position\n     */\n    slideTo(position: number) {\n        const nextItem: CarouselItem = this._items[position];\n        const rotationItems: RotationItems = {\n            left:\n                nextItem.position === 0\n                    ? this._items[this._items.length - 1]\n                    : this._items[nextItem.position - 1],\n            middle: nextItem,\n            right:\n                nextItem.position === this._items.length - 1\n                    ? this._items[0]\n                    : this._items[nextItem.position + 1],\n        };\n        this._rotate(rotationItems);\n        this._setActiveItem(nextItem);\n        if (this._intervalInstance) {\n            this.pause();\n            this.cycle();\n        }\n\n        this._options.onChange(this);\n    }\n\n    /**\n     * Based on the currently active item it will go to the next position\n     */\n    next() {\n        const activeItem = this.getActiveItem();\n        let nextItem = null;\n\n        // check if last item\n        if (activeItem.position === this._items.length - 1) {\n            nextItem = this._items[0];\n        } else {\n            nextItem = this._items[activeItem.position + 1];\n        }\n\n        this.slideTo(nextItem.position);\n\n        // callback function\n        this._options.onNext(this);\n    }\n\n    /**\n     * Based on the currently active item it will go to the previous position\n     */\n    prev() {\n        const activeItem = this.getActiveItem();\n        let prevItem = null;\n\n        // check if first item\n        if (activeItem.position === 0) {\n            prevItem = this._items[this._items.length - 1];\n        } else {\n            prevItem = this._items[activeItem.position - 1];\n        }\n\n        this.slideTo(prevItem.position);\n\n        // callback function\n        this._options.onPrev(this);\n    }\n\n    /**\n     * This method applies the transform classes based on the left, middle, and right rotation carousel items\n     * @param {*} rotationItems\n     */\n    _rotate(rotationItems: RotationItems) {\n        // reset\n        this._items.map((item: CarouselItem) => {\n            item.el.classList.add('hidden');\n        });\n\n        // Handling the case when there is only one item\n        if (this._items.length === 1) {\n            rotationItems.middle.el.classList.remove(\n                '-translate-x-full',\n                'translate-x-full',\n                'translate-x-0',\n                'hidden',\n                'z-10'\n            );\n            rotationItems.middle.el.classList.add('translate-x-0', 'z-20');\n            return;\n        }\n\n        // left item (previously active)\n        rotationItems.left.el.classList.remove(\n            '-translate-x-full',\n            'translate-x-full',\n            'translate-x-0',\n            'hidden',\n            'z-20'\n        );\n\n        rotationItems.left.el.classList.add('-translate-x-full', 'z-10');\n\n        // currently active item\n        rotationItems.middle.el.classList.remove(\n            '-translate-x-full',\n            'translate-x-full',\n            'translate-x-0',\n            'hidden',\n            'z-10'\n        );\n        rotationItems.middle.el.classList.add('translate-x-0', 'z-30');\n\n        // right item (upcoming active)\n        rotationItems.right.el.classList.remove(\n            '-translate-x-full',\n            'translate-x-full',\n            'translate-x-0',\n            'hidden',\n            'z-30'\n        );\n        rotationItems.right.el.classList.add('translate-x-full', 'z-20');\n    }\n\n    /**\n     * Set an interval to cycle through the carousel items\n     */\n    cycle() {\n        if (typeof window !== 'undefined') {\n            this._intervalInstance = window.setInterval(() => {\n                this.next();\n            }, this._intervalDuration);\n        }\n    }\n\n    /**\n     * Clears the cycling interval\n     */\n    pause() {\n        clearInterval(this._intervalInstance);\n    }\n\n    /**\n     * Get the currently active item\n     */\n    getActiveItem() {\n        return this._activeItem;\n    }\n\n    /**\n     * Set the currently active item and data attribute\n     * @param {*} position\n     */\n    _setActiveItem(item: CarouselItem) {\n        this._activeItem = item;\n        const position = item.position;\n\n        // update the indicators if available\n        if (this._indicators.length) {\n            this._indicators.map((indicator) => {\n                indicator.el.setAttribute('aria-current', 'false');\n                indicator.el.classList.remove(\n                    ...this._options.indicators.activeClasses.split(' ')\n                );\n                indicator.el.classList.add(\n                    ...this._options.indicators.inactiveClasses.split(' ')\n                );\n            });\n            this._indicators[position].el.classList.add(\n                ...this._options.indicators.activeClasses.split(' ')\n            );\n            this._indicators[position].el.classList.remove(\n                ...this._options.indicators.inactiveClasses.split(' ')\n            );\n            this._indicators[position].el.setAttribute('aria-current', 'true');\n        }\n    }\n\n    updateOnNext(callback: () => void) {\n        this._options.onNext = callback;\n    }\n\n    updateOnPrev(callback: () => void) {\n        this._options.onPrev = callback;\n    }\n\n    updateOnChange(callback: () => void) {\n        this._options.onChange = callback;\n    }\n}\n\nexport function initCarousels() {\n    document.querySelectorAll('[data-carousel]').forEach(($carouselEl) => {\n        const interval = $carouselEl.getAttribute('data-carousel-interval');\n        const slide =\n            $carouselEl.getAttribute('data-carousel') === 'slide'\n                ? true\n                : false;\n\n        const items: CarouselItem[] = [];\n        let defaultPosition = 0;\n        if ($carouselEl.querySelectorAll('[data-carousel-item]').length) {\n            Array.from(\n                $carouselEl.querySelectorAll('[data-carousel-item]')\n            ).map(($carouselItemEl: HTMLElement, position: number) => {\n                items.push({\n                    position: position,\n                    el: $carouselItemEl,\n                });\n\n                if (\n                    $carouselItemEl.getAttribute('data-carousel-item') ===\n                    'active'\n                ) {\n                    defaultPosition = position;\n                }\n            });\n        }\n\n        const indicators: IndicatorItem[] = [];\n        if ($carouselEl.querySelectorAll('[data-carousel-slide-to]').length) {\n            Array.from(\n                $carouselEl.querySelectorAll('[data-carousel-slide-to]')\n            ).map(($indicatorEl: HTMLElement) => {\n                indicators.push({\n                    position: parseInt(\n                        $indicatorEl.getAttribute('data-carousel-slide-to')\n                    ),\n                    el: $indicatorEl,\n                });\n            });\n        }\n\n        const carousel = new Carousel($carouselEl as HTMLElement, items, {\n            defaultPosition: defaultPosition,\n            indicators: {\n                items: indicators,\n            },\n            interval: interval ? interval : Default.interval,\n        } as CarouselOptions);\n\n        if (slide) {\n            carousel.cycle();\n        }\n\n        // check for controls\n        const carouselNextEl = $carouselEl.querySelector(\n            '[data-carousel-next]'\n        );\n        const carouselPrevEl = $carouselEl.querySelector(\n            '[data-carousel-prev]'\n        );\n\n        if (carouselNextEl) {\n            carouselNextEl.addEventListener('click', () => {\n                carousel.next();\n            });\n        }\n\n        if (carouselPrevEl) {\n            carouselPrevEl.addEventListener('click', () => {\n                carousel.prev();\n            });\n        }\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Carousel = Carousel;\n    window.initCarousels = initCarousels;\n}\n\nexport default Carousel;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { CopyClipboardOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { CopyClipboardInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: CopyClipboardOptions = {\n    htmlEntities: false,\n    contentType: 'input',\n    onCopy: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass CopyClipboard implements CopyClipboardInterface {\n    _instanceId: string;\n    _triggerEl: HTMLElement | null;\n    _targetEl: HTMLInputElement | null;\n    _options: CopyClipboardOptions;\n    _initialized: boolean;\n    _triggerElClickHandler: EventListenerOrEventListenerObject;\n    _inputHandler: EventListenerOrEventListenerObject;\n\n    constructor(\n        triggerEl: HTMLElement | null = null,\n        targetEl: HTMLInputElement | null = null,\n        options: CopyClipboardOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n\n        this._triggerEl = triggerEl;\n        this._targetEl = targetEl;\n        this._options = { ...Default, ...options };\n        this._initialized = false;\n\n        this.init();\n        instances.addInstance(\n            'CopyClipboard',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._targetEl && this._triggerEl && !this._initialized) {\n            this._triggerElClickHandler = () => {\n                this.copy();\n            };\n\n            // clicking on the trigger element should copy the value of the target element\n            if (this._triggerEl) {\n                this._triggerEl.addEventListener(\n                    'click',\n                    this._triggerElClickHandler\n                );\n            }\n\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._triggerEl && this._targetEl && this._initialized) {\n            if (this._triggerEl) {\n                this._triggerEl.removeEventListener(\n                    'click',\n                    this._triggerElClickHandler\n                );\n            }\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('CopyClipboard', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    getTargetValue() {\n        if (this._options.contentType === 'input') {\n            return this._targetEl.value;\n        }\n\n        if (this._options.contentType === 'innerHTML') {\n            return this._targetEl.innerHTML;\n        }\n\n        if (this._options.contentType === 'textContent') {\n            return this._targetEl.textContent.replace(/\\s+/g, ' ').trim();\n        }\n    }\n\n    copy() {\n        let textToCopy = this.getTargetValue();\n\n        // Check if HTMLEntities option is enabled\n        if (this._options.htmlEntities) {\n            // Encode the text using HTML entities\n            textToCopy = this.decodeHTML(textToCopy);\n        }\n\n        // Create a temporary textarea element\n        const tempTextArea = document.createElement('textarea');\n        tempTextArea.value = textToCopy;\n        document.body.appendChild(tempTextArea);\n\n        // Select the text inside the textarea and copy it to the clipboard\n        tempTextArea.select();\n        document.execCommand('copy');\n\n        // Remove the temporary textarea\n        document.body.removeChild(tempTextArea);\n\n        // Callback function\n        this._options.onCopy(this);\n\n        return textToCopy;\n    }\n\n    // Function to encode text into HTML entities\n    decodeHTML(html: string) {\n        const textarea = document.createElement('textarea');\n        textarea.innerHTML = html;\n        return textarea.textContent;\n    }\n\n    updateOnCopyCallback(callback: () => void) {\n        this._options.onCopy = callback;\n    }\n}\n\nexport function initCopyClipboards() {\n    document\n        .querySelectorAll('[data-copy-to-clipboard-target]')\n        .forEach(($triggerEl) => {\n            const targetId = $triggerEl.getAttribute(\n                'data-copy-to-clipboard-target'\n            );\n            const $targetEl = document.getElementById(targetId);\n            const contentType = $triggerEl.getAttribute(\n                'data-copy-to-clipboard-content-type'\n            );\n            const htmlEntities = $triggerEl.getAttribute(\n                'data-copy-to-clipboard-html-entities'\n            );\n\n            // check if the target element exists\n            if ($targetEl) {\n                if (\n                    !instances.instanceExists(\n                        'CopyClipboard',\n                        $targetEl.getAttribute('id')\n                    )\n                ) {\n                    new CopyClipboard(\n                        $triggerEl as HTMLElement,\n                        $targetEl as HTMLInputElement,\n                        {\n                            htmlEntities:\n                                htmlEntities && htmlEntities === 'true'\n                                    ? true\n                                    : Default.htmlEntities,\n                            contentType: contentType\n                                ? contentType\n                                : Default.contentType,\n                        } as CopyClipboardOptions\n                    );\n                }\n            } else {\n                console.error(\n                    `The target element with id \"${targetId}\" does not exist. Please check the data-copy-to-clipboard-target attribute.`\n                );\n            }\n        });\n}\n\nif (typeof window !== 'undefined') {\n    window.CopyClipboard = CopyClipboard;\n    window.initClipboards = initCopyClipboards;\n}\n\nexport default CopyClipboard;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { CollapseOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { CollapseInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: CollapseOptions = {\n    onCollapse: () => {},\n    onExpand: () => {},\n    onToggle: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Collapse implements CollapseInterface {\n    _instanceId: string;\n    _targetEl: HTMLElement | null;\n    _triggerEl: HTMLElement | null;\n    _options: CollapseOptions;\n    _visible: boolean;\n    _initialized: boolean;\n    _clickHandler: EventListenerOrEventListenerObject;\n\n    constructor(\n        targetEl: HTMLElement | null = null,\n        triggerEl: HTMLElement | null = null,\n        options: CollapseOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n        this._targetEl = targetEl;\n        this._triggerEl = triggerEl;\n        this._options = { ...Default, ...options };\n        this._visible = false;\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Collapse',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._triggerEl && this._targetEl && !this._initialized) {\n            if (this._triggerEl.hasAttribute('aria-expanded')) {\n                this._visible =\n                    this._triggerEl.getAttribute('aria-expanded') === 'true';\n            } else {\n                // fix until v2 not to break previous single collapses which became dismiss\n                this._visible = !this._targetEl.classList.contains('hidden');\n            }\n\n            this._clickHandler = () => {\n                this.toggle();\n            };\n\n            this._triggerEl.addEventListener('click', this._clickHandler);\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._triggerEl && this._initialized) {\n            this._triggerEl.removeEventListener('click', this._clickHandler);\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Collapse', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    collapse() {\n        this._targetEl.classList.add('hidden');\n        if (this._triggerEl) {\n            this._triggerEl.setAttribute('aria-expanded', 'false');\n        }\n        this._visible = false;\n\n        // callback function\n        this._options.onCollapse(this);\n    }\n\n    expand() {\n        this._targetEl.classList.remove('hidden');\n        if (this._triggerEl) {\n            this._triggerEl.setAttribute('aria-expanded', 'true');\n        }\n        this._visible = true;\n\n        // callback function\n        this._options.onExpand(this);\n    }\n\n    toggle() {\n        if (this._visible) {\n            this.collapse();\n        } else {\n            this.expand();\n        }\n        // callback function\n        this._options.onToggle(this);\n    }\n\n    updateOnCollapse(callback: () => void) {\n        this._options.onCollapse = callback;\n    }\n\n    updateOnExpand(callback: () => void) {\n        this._options.onExpand = callback;\n    }\n\n    updateOnToggle(callback: () => void) {\n        this._options.onToggle = callback;\n    }\n}\n\nexport function initCollapses() {\n    document\n        .querySelectorAll('[data-collapse-toggle]')\n        .forEach(($triggerEl) => {\n            const targetId = $triggerEl.getAttribute('data-collapse-toggle');\n            const $targetEl = document.getElementById(targetId);\n\n            // check if the target element exists\n            if ($targetEl) {\n                if (\n                    !instances.instanceExists(\n                        'Collapse',\n                        $targetEl.getAttribute('id')\n                    )\n                ) {\n                    new Collapse(\n                        $targetEl as HTMLElement,\n                        $triggerEl as HTMLElement\n                    );\n                } else {\n                    // if instance exists already for the same target element then create a new one with a different trigger element\n                    new Collapse(\n                        $targetEl as HTMLElement,\n                        $triggerEl as HTMLElement,\n                        {},\n                        {\n                            id:\n                                $targetEl.getAttribute('id') +\n                                '_' +\n                                instances._generateRandomId(),\n                        }\n                    );\n                }\n            } else {\n                console.error(\n                    `The target element with id \"${targetId}\" does not exist. Please check the data-collapse-toggle attribute.`\n                );\n            }\n        });\n}\n\nif (typeof window !== 'undefined') {\n    window.Collapse = Collapse;\n    window.initCollapses = initCollapses;\n}\n\nexport default Collapse;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { DialOptions, DialTriggerType } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { DialInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: DialOptions = {\n    triggerType: 'hover',\n    onShow: () => {},\n    onHide: () => {},\n    onToggle: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Dial implements DialInterface {\n    _instanceId: string;\n    _parentEl: HTMLElement;\n    _triggerEl: HTMLElement;\n    _targetEl: HTMLElement;\n    _options: DialOptions;\n    _visible: boolean;\n    _initialized: boolean;\n    _showEventHandler: EventListenerOrEventListenerObject;\n    _hideEventHandler: EventListenerOrEventListenerObject;\n\n    constructor(\n        parentEl: HTMLElement | null = null,\n        triggerEl: HTMLElement | null = null,\n        targetEl: HTMLElement | null = null,\n        options: DialOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n        this._parentEl = parentEl;\n        this._triggerEl = triggerEl;\n        this._targetEl = targetEl;\n        this._options = { ...Default, ...options };\n        this._visible = false;\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Dial',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._triggerEl && this._targetEl && !this._initialized) {\n            const triggerEventTypes = this._getTriggerEventTypes(\n                this._options.triggerType\n            );\n\n            this._showEventHandler = () => {\n                this.show();\n            };\n\n            triggerEventTypes.showEvents.forEach((ev: string) => {\n                this._triggerEl.addEventListener(ev, this._showEventHandler);\n                this._targetEl.addEventListener(ev, this._showEventHandler);\n            });\n\n            this._hideEventHandler = () => {\n                if (!this._parentEl.matches(':hover')) {\n                    this.hide();\n                }\n            };\n\n            triggerEventTypes.hideEvents.forEach((ev: string) => {\n                this._parentEl.addEventListener(ev, this._hideEventHandler);\n            });\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._initialized) {\n            const triggerEventTypes = this._getTriggerEventTypes(\n                this._options.triggerType\n            );\n\n            triggerEventTypes.showEvents.forEach((ev: string) => {\n                this._triggerEl.removeEventListener(ev, this._showEventHandler);\n                this._targetEl.removeEventListener(ev, this._showEventHandler);\n            });\n\n            triggerEventTypes.hideEvents.forEach((ev: string) => {\n                this._parentEl.removeEventListener(ev, this._hideEventHandler);\n            });\n\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Dial', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    hide() {\n        this._targetEl.classList.add('hidden');\n        if (this._triggerEl) {\n            this._triggerEl.setAttribute('aria-expanded', 'false');\n        }\n        this._visible = false;\n\n        // callback function\n        this._options.onHide(this);\n    }\n\n    show() {\n        this._targetEl.classList.remove('hidden');\n        if (this._triggerEl) {\n            this._triggerEl.setAttribute('aria-expanded', 'true');\n        }\n        this._visible = true;\n\n        // callback function\n        this._options.onShow(this);\n    }\n\n    toggle() {\n        if (this._visible) {\n            this.hide();\n        } else {\n            this.show();\n        }\n    }\n\n    isHidden() {\n        return !this._visible;\n    }\n\n    isVisible() {\n        return this._visible;\n    }\n\n    _getTriggerEventTypes(triggerType: DialTriggerType) {\n        switch (triggerType) {\n            case 'hover':\n                return {\n                    showEvents: ['mouseenter', 'focus'],\n                    hideEvents: ['mouseleave', 'blur'],\n                };\n            case 'click':\n                return {\n                    showEvents: ['click', 'focus'],\n                    hideEvents: ['focusout', 'blur'],\n                };\n            case 'none':\n                return {\n                    showEvents: [],\n                    hideEvents: [],\n                };\n            default:\n                return {\n                    showEvents: ['mouseenter', 'focus'],\n                    hideEvents: ['mouseleave', 'blur'],\n                };\n        }\n    }\n\n    updateOnShow(callback: () => void) {\n        this._options.onShow = callback;\n    }\n\n    updateOnHide(callback: () => void) {\n        this._options.onHide = callback;\n    }\n\n    updateOnToggle(callback: () => void) {\n        this._options.onToggle = callback;\n    }\n}\n\nexport function initDials() {\n    document.querySelectorAll('[data-dial-init]').forEach(($parentEl) => {\n        const $triggerEl = $parentEl.querySelector('[data-dial-toggle]');\n\n        if ($triggerEl) {\n            const dialId = $triggerEl.getAttribute('data-dial-toggle');\n            const $dialEl = document.getElementById(dialId);\n\n            if ($dialEl) {\n                const triggerType =\n                    $triggerEl.getAttribute('data-dial-trigger');\n                new Dial(\n                    $parentEl as HTMLElement,\n                    $triggerEl as HTMLElement,\n                    $dialEl as HTMLElement,\n                    {\n                        triggerType: triggerType\n                            ? triggerType\n                            : Default.triggerType,\n                    } as DialOptions\n                );\n            } else {\n                console.error(\n                    `Dial with id ${dialId} does not exist. Are you sure that the data-dial-toggle attribute points to the correct modal id?`\n                );\n            }\n        } else {\n            console.error(\n                `Dial with id ${$parentEl.id} does not have a trigger element. Are you sure that the data-dial-toggle attribute exists?`\n            );\n        }\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Dial = Dial;\n    window.initDials = initDials;\n}\n\nexport default Dial;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { DismissOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { DismissInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: DismissOptions = {\n    transition: 'transition-opacity',\n    duration: 300,\n    timing: 'ease-out',\n    onHide: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Dismiss implements DismissInterface {\n    _instanceId: string;\n    _targetEl: HTMLElement | null;\n    _triggerEl: HTMLElement | null;\n    _options: DismissOptions;\n    _initialized: boolean;\n    _clickHandler: EventListenerOrEventListenerObject;\n\n    constructor(\n        targetEl: HTMLElement | null = null,\n        triggerEl: HTMLElement | null = null,\n        options: DismissOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n        this._targetEl = targetEl;\n        this._triggerEl = triggerEl;\n        this._options = { ...Default, ...options };\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Dismiss',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._triggerEl && this._targetEl && !this._initialized) {\n            this._clickHandler = () => {\n                this.hide();\n            };\n            this._triggerEl.addEventListener('click', this._clickHandler);\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._triggerEl && this._initialized) {\n            this._triggerEl.removeEventListener('click', this._clickHandler);\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Dismiss', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    hide() {\n        this._targetEl.classList.add(\n            this._options.transition,\n            `duration-${this._options.duration}`,\n            this._options.timing,\n            'opacity-0'\n        );\n        setTimeout(() => {\n            this._targetEl.classList.add('hidden');\n        }, this._options.duration);\n\n        // callback function\n        this._options.onHide(this, this._targetEl);\n    }\n\n    updateOnHide(callback: () => void) {\n        this._options.onHide = callback;\n    }\n}\n\nexport function initDismisses() {\n    document.querySelectorAll('[data-dismiss-target]').forEach(($triggerEl) => {\n        const targetId = $triggerEl.getAttribute('data-dismiss-target');\n        const $dismissEl = document.querySelector(targetId);\n\n        if ($dismissEl) {\n            new Dismiss($dismissEl as HTMLElement, $triggerEl as HTMLElement);\n        } else {\n            console.error(\n                `The dismiss element with id \"${targetId}\" does not exist. Please check the data-dismiss-target attribute.`\n            );\n        }\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Dismiss = Dismiss;\n    window.initDismisses = initDismisses;\n}\n\nexport default Dismiss;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { DrawerOptions, PlacementClasses } from './types';\nimport type { InstanceOptions, EventListenerInstance } from '../../dom/types';\nimport { DrawerInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: DrawerOptions = {\n    placement: 'left',\n    bodyScrolling: false,\n    backdrop: true,\n    edge: false,\n    edgeOffset: 'bottom-[60px]',\n    backdropClasses: 'bg-gray-900/50 dark:bg-gray-900/80 fixed inset-0 z-30',\n    onShow: () => {},\n    onHide: () => {},\n    onToggle: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Drawer implements DrawerInterface {\n    _instanceId: string;\n    _targetEl: HTMLElement;\n    _triggerEl: HTMLElement;\n    _options: DrawerOptions;\n    _visible: boolean;\n    _eventListenerInstances: EventListenerInstance[] = [];\n    _handleEscapeKey: EventListenerOrEventListenerObject;\n    _initialized: boolean;\n\n    constructor(\n        targetEl: HTMLElement | null = null,\n        options: DrawerOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n        this._targetEl = targetEl;\n        this._options = { ...Default, ...options };\n        this._visible = false;\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Drawer',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        // set initial accessibility attributes\n        if (this._targetEl && !this._initialized) {\n            this._targetEl.setAttribute('aria-hidden', 'true');\n            this._targetEl.classList.add('transition-transform');\n\n            // set base placement classes\n            this._getPlacementClasses(this._options.placement).base.map((c) => {\n                this._targetEl.classList.add(c);\n            });\n\n            this._handleEscapeKey = (event: KeyboardEvent) => {\n                if (event.key === 'Escape') {\n                    // if 'Escape' key is pressed\n                    if (this.isVisible()) {\n                        // if the Drawer is visible\n                        this.hide(); // hide the Drawer\n                    }\n                }\n            };\n\n            // add keyboard event listener to document\n            document.addEventListener('keydown', this._handleEscapeKey);\n\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._initialized) {\n            this.removeAllEventListenerInstances();\n            this._destroyBackdropEl();\n\n            // Remove the keyboard event listener\n            document.removeEventListener('keydown', this._handleEscapeKey);\n\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Drawer', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    hide() {\n        // based on the edge option show placement classes\n        if (this._options.edge) {\n            this._getPlacementClasses(\n                this._options.placement + '-edge'\n            ).active.map((c) => {\n                this._targetEl.classList.remove(c);\n            });\n            this._getPlacementClasses(\n                this._options.placement + '-edge'\n            ).inactive.map((c) => {\n                this._targetEl.classList.add(c);\n            });\n        } else {\n            this._getPlacementClasses(this._options.placement).active.map(\n                (c) => {\n                    this._targetEl.classList.remove(c);\n                }\n            );\n            this._getPlacementClasses(this._options.placement).inactive.map(\n                (c) => {\n                    this._targetEl.classList.add(c);\n                }\n            );\n        }\n\n        // set accessibility attributes\n        this._targetEl.setAttribute('aria-hidden', 'true');\n        this._targetEl.removeAttribute('aria-modal');\n        this._targetEl.removeAttribute('role');\n\n        // enable body scroll\n        if (!this._options.bodyScrolling) {\n            document.body.classList.remove('overflow-hidden');\n        }\n\n        // destroy backdrop\n        if (this._options.backdrop) {\n            this._destroyBackdropEl();\n        }\n\n        this._visible = false;\n\n        // callback function\n        this._options.onHide(this);\n    }\n\n    show() {\n        if (this._options.edge) {\n            this._getPlacementClasses(\n                this._options.placement + '-edge'\n            ).active.map((c) => {\n                this._targetEl.classList.add(c);\n            });\n            this._getPlacementClasses(\n                this._options.placement + '-edge'\n            ).inactive.map((c) => {\n                this._targetEl.classList.remove(c);\n            });\n        } else {\n            this._getPlacementClasses(this._options.placement).active.map(\n                (c) => {\n                    this._targetEl.classList.add(c);\n                }\n            );\n            this._getPlacementClasses(this._options.placement).inactive.map(\n                (c) => {\n                    this._targetEl.classList.remove(c);\n                }\n            );\n        }\n\n        // set accessibility attributes\n        this._targetEl.setAttribute('aria-modal', 'true');\n        this._targetEl.setAttribute('role', 'dialog');\n        this._targetEl.removeAttribute('aria-hidden');\n\n        // disable body scroll\n        if (!this._options.bodyScrolling) {\n            document.body.classList.add('overflow-hidden');\n        }\n\n        // show backdrop\n        if (this._options.backdrop) {\n            this._createBackdrop();\n        }\n\n        this._visible = true;\n\n        // callback function\n        this._options.onShow(this);\n    }\n\n    toggle() {\n        if (this.isVisible()) {\n            this.hide();\n        } else {\n            this.show();\n        }\n    }\n\n    _createBackdrop() {\n        if (!this._visible) {\n            const backdropEl = document.createElement('div');\n            backdropEl.setAttribute('drawer-backdrop', '');\n            backdropEl.classList.add(\n                ...this._options.backdropClasses.split(' ')\n            );\n            document.querySelector('body').append(backdropEl);\n            backdropEl.addEventListener('click', () => {\n                this.hide();\n            });\n        }\n    }\n\n    _destroyBackdropEl() {\n        if (\n            this._visible &&\n            document.querySelector('[drawer-backdrop]') !== null\n        ) {\n            document.querySelector('[drawer-backdrop]').remove();\n        }\n    }\n\n    _getPlacementClasses(placement: string): PlacementClasses {\n        switch (placement) {\n            case 'top':\n                return {\n                    base: ['top-0', 'left-0', 'right-0'],\n                    active: ['transform-none'],\n                    inactive: ['-translate-y-full'],\n                };\n            case 'right':\n                return {\n                    base: ['right-0', 'top-0'],\n                    active: ['transform-none'],\n                    inactive: ['translate-x-full'],\n                };\n            case 'bottom':\n                return {\n                    base: ['bottom-0', 'left-0', 'right-0'],\n                    active: ['transform-none'],\n                    inactive: ['translate-y-full'],\n                };\n            case 'left':\n                return {\n                    base: ['left-0', 'top-0'],\n                    active: ['transform-none'],\n                    inactive: ['-translate-x-full'],\n                };\n            case 'bottom-edge':\n                return {\n                    base: ['left-0', 'top-0'],\n                    active: ['transform-none'],\n                    inactive: ['translate-y-full', this._options.edgeOffset],\n                };\n            default:\n                return {\n                    base: ['left-0', 'top-0'],\n                    active: ['transform-none'],\n                    inactive: ['-translate-x-full'],\n                };\n        }\n    }\n\n    isHidden() {\n        return !this._visible;\n    }\n\n    isVisible() {\n        return this._visible;\n    }\n\n    addEventListenerInstance(\n        element: HTMLElement,\n        type: string,\n        handler: EventListenerOrEventListenerObject\n    ) {\n        this._eventListenerInstances.push({\n            element: element,\n            type: type,\n            handler: handler,\n        });\n    }\n\n    removeAllEventListenerInstances() {\n        this._eventListenerInstances.map((eventListenerInstance) => {\n            eventListenerInstance.element.removeEventListener(\n                eventListenerInstance.type,\n                eventListenerInstance.handler\n            );\n        });\n        this._eventListenerInstances = [];\n    }\n\n    getAllEventListenerInstances() {\n        return this._eventListenerInstances;\n    }\n\n    updateOnShow(callback: () => void) {\n        this._options.onShow = callback;\n    }\n\n    updateOnHide(callback: () => void) {\n        this._options.onHide = callback;\n    }\n\n    updateOnToggle(callback: () => void) {\n        this._options.onToggle = callback;\n    }\n}\n\nexport function initDrawers() {\n    document.querySelectorAll('[data-drawer-target]').forEach(($triggerEl) => {\n        // mandatory\n        const drawerId = $triggerEl.getAttribute('data-drawer-target');\n        const $drawerEl = document.getElementById(drawerId);\n\n        if ($drawerEl) {\n            const placement = $triggerEl.getAttribute('data-drawer-placement');\n            const bodyScrolling = $triggerEl.getAttribute(\n                'data-drawer-body-scrolling'\n            );\n            const backdrop = $triggerEl.getAttribute('data-drawer-backdrop');\n            const edge = $triggerEl.getAttribute('data-drawer-edge');\n            const edgeOffset = $triggerEl.getAttribute(\n                'data-drawer-edge-offset'\n            );\n\n            new Drawer($drawerEl, {\n                placement: placement ? placement : Default.placement,\n                bodyScrolling: bodyScrolling\n                    ? bodyScrolling === 'true'\n                        ? true\n                        : false\n                    : Default.bodyScrolling,\n                backdrop: backdrop\n                    ? backdrop === 'true'\n                        ? true\n                        : false\n                    : Default.backdrop,\n                edge: edge ? (edge === 'true' ? true : false) : Default.edge,\n                edgeOffset: edgeOffset ? edgeOffset : Default.edgeOffset,\n            } as DrawerOptions);\n        } else {\n            console.error(\n                `Drawer with id ${drawerId} not found. Are you sure that the data-drawer-target attribute points to the correct drawer id?`\n            );\n        }\n    });\n\n    document.querySelectorAll('[data-drawer-toggle]').forEach(($triggerEl) => {\n        const drawerId = $triggerEl.getAttribute('data-drawer-toggle');\n        const $drawerEl = document.getElementById(drawerId);\n\n        if ($drawerEl) {\n            const drawer: DrawerInterface = instances.getInstance(\n                'Drawer',\n                drawerId\n            );\n\n            if (drawer) {\n                const toggleDrawer = () => {\n                    drawer.toggle();\n                };\n                $triggerEl.addEventListener('click', toggleDrawer);\n                drawer.addEventListenerInstance(\n                    $triggerEl as HTMLElement,\n                    'click',\n                    toggleDrawer\n                );\n            } else {\n                console.error(\n                    `Drawer with id ${drawerId} has not been initialized. Please initialize it using the data-drawer-target attribute.`\n                );\n            }\n        } else {\n            console.error(\n                `Drawer with id ${drawerId} not found. Are you sure that the data-drawer-target attribute points to the correct drawer id?`\n            );\n        }\n    });\n\n    document\n        .querySelectorAll('[data-drawer-dismiss], [data-drawer-hide]')\n        .forEach(($triggerEl) => {\n            const drawerId = $triggerEl.getAttribute('data-drawer-dismiss')\n                ? $triggerEl.getAttribute('data-drawer-dismiss')\n                : $triggerEl.getAttribute('data-drawer-hide');\n            const $drawerEl = document.getElementById(drawerId);\n\n            if ($drawerEl) {\n                const drawer: DrawerInterface = instances.getInstance(\n                    'Drawer',\n                    drawerId\n                );\n\n                if (drawer) {\n                    const hideDrawer = () => {\n                        drawer.hide();\n                    };\n                    $triggerEl.addEventListener('click', hideDrawer);\n                    drawer.addEventListenerInstance(\n                        $triggerEl as HTMLElement,\n                        'click',\n                        hideDrawer\n                    );\n                } else {\n                    console.error(\n                        `Drawer with id ${drawerId} has not been initialized. Please initialize it using the data-drawer-target attribute.`\n                    );\n                }\n            } else {\n                console.error(\n                    `Drawer with id ${drawerId} not found. Are you sure that the data-drawer-target attribute points to the correct drawer id`\n                );\n            }\n        });\n\n    document.querySelectorAll('[data-drawer-show]').forEach(($triggerEl) => {\n        const drawerId = $triggerEl.getAttribute('data-drawer-show');\n        const $drawerEl = document.getElementById(drawerId);\n\n        if ($drawerEl) {\n            const drawer: DrawerInterface = instances.getInstance(\n                'Drawer',\n                drawerId\n            );\n\n            if (drawer) {\n                const showDrawer = () => {\n                    drawer.show();\n                };\n                $triggerEl.addEventListener('click', showDrawer);\n                drawer.addEventListenerInstance(\n                    $triggerEl as HTMLElement,\n                    'click',\n                    showDrawer\n                );\n            } else {\n                console.error(\n                    `Drawer with id ${drawerId} has not been initialized. Please initialize it using the data-drawer-target attribute.`\n                );\n            }\n        } else {\n            console.error(\n                `Drawer with id ${drawerId} not found. Are you sure that the data-drawer-target attribute points to the correct drawer id?`\n            );\n        }\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Drawer = Drawer;\n    window.initDrawers = initDrawers;\n}\n\nexport default Drawer;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport { createPopper } from '@popperjs/core';\nimport type {\n    Options as PopperOptions,\n    Instance as PopperInstance,\n} from '@popperjs/core';\nimport type { DropdownOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { DropdownInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: DropdownOptions = {\n    placement: 'bottom',\n    triggerType: 'click',\n    offsetSkidding: 0,\n    offsetDistance: 10,\n    delay: 300,\n    ignoreClickOutsideClass: false,\n    onShow: () => {},\n    onHide: () => {},\n    onToggle: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Dropdown implements DropdownInterface {\n    _instanceId: string;\n    _targetEl: HTMLElement;\n    _triggerEl: HTMLElement;\n    _options: DropdownOptions;\n    _visible: boolean;\n    _popperInstance: PopperInstance;\n    _initialized: boolean;\n    _clickOutsideEventListener: EventListenerOrEventListenerObject;\n    _hoverShowTriggerElHandler: EventListenerOrEventListenerObject;\n    _hoverShowTargetElHandler: EventListenerOrEventListenerObject;\n    _hoverHideHandler: EventListenerOrEventListenerObject;\n    _clickHandler: EventListenerOrEventListenerObject;\n\n    constructor(\n        targetElement: HTMLElement | null = null,\n        triggerElement: HTMLElement | null = null,\n        options: DropdownOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetElement.id;\n        this._targetEl = targetElement;\n        this._triggerEl = triggerElement;\n        this._options = { ...Default, ...options };\n        this._popperInstance = null;\n        this._visible = false;\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Dropdown',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._triggerEl && this._targetEl && !this._initialized) {\n            this._popperInstance = this._createPopperInstance();\n            this._setupEventListeners();\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        const triggerEvents = this._getTriggerEvents();\n\n        // Remove click event listeners for trigger element\n        if (this._options.triggerType === 'click') {\n            triggerEvents.showEvents.forEach((ev) => {\n                this._triggerEl.removeEventListener(ev, this._clickHandler);\n            });\n        }\n\n        // Remove hover event listeners for trigger and target elements\n        if (this._options.triggerType === 'hover') {\n            triggerEvents.showEvents.forEach((ev) => {\n                this._triggerEl.removeEventListener(\n                    ev,\n                    this._hoverShowTriggerElHandler\n                );\n                this._targetEl.removeEventListener(\n                    ev,\n                    this._hoverShowTargetElHandler\n                );\n            });\n\n            triggerEvents.hideEvents.forEach((ev) => {\n                this._triggerEl.removeEventListener(ev, this._hoverHideHandler);\n                this._targetEl.removeEventListener(ev, this._hoverHideHandler);\n            });\n        }\n\n        this._popperInstance.destroy();\n        this._initialized = false;\n    }\n\n    removeInstance() {\n        instances.removeInstance('Dropdown', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    _setupEventListeners() {\n        const triggerEvents = this._getTriggerEvents();\n\n        this._clickHandler = () => {\n            this.toggle();\n        };\n\n        // click event handling for trigger element\n        if (this._options.triggerType === 'click') {\n            triggerEvents.showEvents.forEach((ev) => {\n                this._triggerEl.addEventListener(ev, this._clickHandler);\n            });\n        }\n\n        this._hoverShowTriggerElHandler = (ev) => {\n            if (ev.type === 'click') {\n                this.toggle();\n            } else {\n                setTimeout(() => {\n                    this.show();\n                }, this._options.delay);\n            }\n        };\n        this._hoverShowTargetElHandler = () => {\n            this.show();\n        };\n\n        this._hoverHideHandler = () => {\n            setTimeout(() => {\n                if (!this._targetEl.matches(':hover')) {\n                    this.hide();\n                }\n            }, this._options.delay);\n        };\n\n        // hover event handling for trigger element\n        if (this._options.triggerType === 'hover') {\n            triggerEvents.showEvents.forEach((ev) => {\n                this._triggerEl.addEventListener(\n                    ev,\n                    this._hoverShowTriggerElHandler\n                );\n                this._targetEl.addEventListener(\n                    ev,\n                    this._hoverShowTargetElHandler\n                );\n            });\n\n            triggerEvents.hideEvents.forEach((ev) => {\n                this._triggerEl.addEventListener(ev, this._hoverHideHandler);\n                this._targetEl.addEventListener(ev, this._hoverHideHandler);\n            });\n        }\n    }\n\n    _createPopperInstance() {\n        return createPopper(this._triggerEl, this._targetEl, {\n            placement: this._options.placement,\n            modifiers: [\n                {\n                    name: 'offset',\n                    options: {\n                        offset: [\n                            this._options.offsetSkidding,\n                            this._options.offsetDistance,\n                        ],\n                    },\n                },\n            ],\n        });\n    }\n\n    _setupClickOutsideListener() {\n        this._clickOutsideEventListener = (ev: MouseEvent) => {\n            this._handleClickOutside(ev, this._targetEl);\n        };\n        document.body.addEventListener(\n            'click',\n            this._clickOutsideEventListener,\n            true\n        );\n    }\n\n    _removeClickOutsideListener() {\n        document.body.removeEventListener(\n            'click',\n            this._clickOutsideEventListener,\n            true\n        );\n    }\n\n    _handleClickOutside(ev: Event, targetEl: HTMLElement) {\n        const clickedEl = ev.target as Node;\n\n        // Ignore clicks on the trigger element (ie. a datepicker input)\n        const ignoreClickOutsideClass = this._options.ignoreClickOutsideClass;\n\n        let isIgnored = false;\n        if (ignoreClickOutsideClass) {\n            const ignoredClickOutsideEls = document.querySelectorAll(\n                `.${ignoreClickOutsideClass}`\n            );\n            ignoredClickOutsideEls.forEach((el) => {\n                if (el.contains(clickedEl)) {\n                    isIgnored = true;\n                    return;\n                }\n            });\n        }\n\n        // Ignore clicks on the target element (ie. dropdown itself)\n        if (\n            clickedEl !== targetEl &&\n            !targetEl.contains(clickedEl) &&\n            !this._triggerEl.contains(clickedEl) &&\n            !isIgnored &&\n            this.isVisible()\n        ) {\n            this.hide();\n        }\n    }\n\n    _getTriggerEvents() {\n        switch (this._options.triggerType) {\n            case 'hover':\n                return {\n                    showEvents: ['mouseenter', 'click'],\n                    hideEvents: ['mouseleave'],\n                };\n            case 'click':\n                return {\n                    showEvents: ['click'],\n                    hideEvents: [],\n                };\n            case 'none':\n                return {\n                    showEvents: [],\n                    hideEvents: [],\n                };\n            default:\n                return {\n                    showEvents: ['click'],\n                    hideEvents: [],\n                };\n        }\n    }\n\n    toggle() {\n        if (this.isVisible()) {\n            this.hide();\n        } else {\n            this.show();\n        }\n        this._options.onToggle(this);\n    }\n\n    isVisible() {\n        return this._visible;\n    }\n\n    show() {\n        this._targetEl.classList.remove('hidden');\n        this._targetEl.classList.add('block');\n\n        // Enable the event listeners\n        this._popperInstance.setOptions((options: PopperOptions) => ({\n            ...options,\n            modifiers: [\n                ...options.modifiers,\n                { name: 'eventListeners', enabled: true },\n            ],\n        }));\n\n        this._setupClickOutsideListener();\n\n        // Update its position\n        this._popperInstance.update();\n        this._visible = true;\n\n        // callback function\n        this._options.onShow(this);\n    }\n\n    hide() {\n        this._targetEl.classList.remove('block');\n        this._targetEl.classList.add('hidden');\n\n        // Disable the event listeners\n        this._popperInstance.setOptions((options: PopperOptions) => ({\n            ...options,\n            modifiers: [\n                ...options.modifiers,\n                { name: 'eventListeners', enabled: false },\n            ],\n        }));\n\n        this._visible = false;\n\n        this._removeClickOutsideListener();\n\n        // callback function\n        this._options.onHide(this);\n    }\n\n    updateOnShow(callback: () => void) {\n        this._options.onShow = callback;\n    }\n\n    updateOnHide(callback: () => void) {\n        this._options.onHide = callback;\n    }\n\n    updateOnToggle(callback: () => void) {\n        this._options.onToggle = callback;\n    }\n}\n\nexport function initDropdowns() {\n    document\n        .querySelectorAll('[data-dropdown-toggle]')\n        .forEach(($triggerEl) => {\n            const dropdownId = $triggerEl.getAttribute('data-dropdown-toggle');\n            const $dropdownEl = document.getElementById(dropdownId);\n\n            if ($dropdownEl) {\n                const placement = $triggerEl.getAttribute(\n                    'data-dropdown-placement'\n                );\n                const offsetSkidding = $triggerEl.getAttribute(\n                    'data-dropdown-offset-skidding'\n                );\n                const offsetDistance = $triggerEl.getAttribute(\n                    'data-dropdown-offset-distance'\n                );\n                const triggerType = $triggerEl.getAttribute(\n                    'data-dropdown-trigger'\n                );\n                const delay = $triggerEl.getAttribute('data-dropdown-delay');\n                const ignoreClickOutsideClass = $triggerEl.getAttribute(\n                    'data-dropdown-ignore-click-outside-class'\n                );\n\n                new Dropdown(\n                    $dropdownEl as HTMLElement,\n                    $triggerEl as HTMLElement,\n                    {\n                        placement: placement ? placement : Default.placement,\n                        triggerType: triggerType\n                            ? triggerType\n                            : Default.triggerType,\n                        offsetSkidding: offsetSkidding\n                            ? parseInt(offsetSkidding)\n                            : Default.offsetSkidding,\n                        offsetDistance: offsetDistance\n                            ? parseInt(offsetDistance)\n                            : Default.offsetDistance,\n                        delay: delay ? parseInt(delay) : Default.delay,\n                        ignoreClickOutsideClass: ignoreClickOutsideClass\n                            ? ignoreClickOutsideClass\n                            : Default.ignoreClickOutsideClass,\n                    } as DropdownOptions\n                );\n            } else {\n                console.error(\n                    `The dropdown element with id \"${dropdownId}\" does not exist. Please check the data-dropdown-toggle attribute.`\n                );\n            }\n        });\n}\n\nif (typeof window !== 'undefined') {\n    window.Dropdown = Dropdown;\n    window.initDropdowns = initDropdowns;\n}\n\nexport default Dropdown;\n", "import { initAccordions } from './accordion';\nimport { initCarousels } from './carousel';\nimport { initCopyClipboards } from './clipboard';\nimport { initCollapses } from './collapse';\nimport { initDials } from './dial';\nimport { initDismisses } from './dismiss';\nimport { initDrawers } from './drawer';\nimport { initDropdowns } from './dropdown';\nimport { initInputCounters } from './input-counter';\nimport { initModals } from './modal';\nimport { initPopovers } from './popover';\nimport { initTabs } from './tabs';\nimport { initTooltips } from './tooltip';\n\nexport function initFlowbite() {\n    initAccordions();\n    initCollapses();\n    initCarousels();\n    initDismisses();\n    initDropdowns();\n    initModals();\n    initDrawers();\n    initTabs();\n    initTooltips();\n    initPopovers();\n    initDials();\n    initInputCounters();\n    initCopyClipboards();\n}\n\nif (typeof window !== 'undefined') {\n    window.initFlowbite = initFlowbite;\n}\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { InputCounterOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { InputCounterInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: InputCounterOptions = {\n    minValue: null,\n    maxValue: null,\n    onIncrement: () => {},\n    onDecrement: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass InputCounter implements InputCounterInterface {\n    _instanceId: string;\n    _targetEl: HTMLInputElement | null;\n    _incrementEl: HTMLElement | null;\n    _decrementEl: HTMLElement | null;\n    _options: InputCounterOptions;\n    _initialized: boolean;\n    _incrementClickHandler: EventListenerOrEventListenerObject;\n    _decrementClickHandler: EventListenerOrEventListenerObject;\n    _inputHandler: EventListenerOrEventListenerObject;\n\n    constructor(\n        targetEl: HTMLInputElement | null = null,\n        incrementEl: HTMLElement | null = null,\n        decrementEl: HTMLElement | null = null,\n        options: InputCounterOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n\n        this._targetEl = targetEl;\n        this._incrementEl = incrementEl;\n        this._decrementEl = decrementEl;\n        this._options = { ...Default, ...options };\n        this._initialized = false;\n\n        this.init();\n        instances.addInstance(\n            'InputCounter',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._targetEl && !this._initialized) {\n            this._inputHandler = (event) => {\n                {\n                    const target = event.target as HTMLInputElement;\n\n                    // check if the value is numeric\n                    if (!/^\\d*$/.test(target.value)) {\n                        // Regex to check if the value is numeric\n                        target.value = target.value.replace(/[^\\d]/g, ''); // Remove non-numeric characters\n                    }\n\n                    // check for max value\n                    if (\n                        this._options.maxValue !== null &&\n                        parseInt(target.value) > this._options.maxValue\n                    ) {\n                        target.value = this._options.maxValue.toString();\n                    }\n\n                    // check for min value\n                    if (\n                        this._options.minValue !== null &&\n                        parseInt(target.value) < this._options.minValue\n                    ) {\n                        target.value = this._options.minValue.toString();\n                    }\n                }\n            };\n\n            this._incrementClickHandler = () => {\n                this.increment();\n            };\n\n            this._decrementClickHandler = () => {\n                this.decrement();\n            };\n\n            // Add event listener to restrict input to numeric values only\n            this._targetEl.addEventListener('input', this._inputHandler);\n\n            if (this._incrementEl) {\n                this._incrementEl.addEventListener(\n                    'click',\n                    this._incrementClickHandler\n                );\n            }\n\n            if (this._decrementEl) {\n                this._decrementEl.addEventListener(\n                    'click',\n                    this._decrementClickHandler\n                );\n            }\n\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._targetEl && this._initialized) {\n            this._targetEl.removeEventListener('input', this._inputHandler);\n\n            if (this._incrementEl) {\n                this._incrementEl.removeEventListener(\n                    'click',\n                    this._incrementClickHandler\n                );\n            }\n            if (this._decrementEl) {\n                this._decrementEl.removeEventListener(\n                    'click',\n                    this._decrementClickHandler\n                );\n            }\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('InputCounter', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    getCurrentValue() {\n        return parseInt(this._targetEl.value) || 0;\n    }\n\n    increment() {\n        // don't increment if the value is already at the maximum value\n        if (\n            this._options.maxValue !== null &&\n            this.getCurrentValue() >= this._options.maxValue\n        ) {\n            return;\n        }\n\n        this._targetEl.value = (this.getCurrentValue() + 1).toString();\n        this._options.onIncrement(this);\n    }\n\n    decrement() {\n        // don't decrement if the value is already at the minimum value\n        if (\n            this._options.minValue !== null &&\n            this.getCurrentValue() <= this._options.minValue\n        ) {\n            return;\n        }\n\n        this._targetEl.value = (this.getCurrentValue() - 1).toString();\n        this._options.onDecrement(this);\n    }\n\n    updateOnIncrement(callback: () => void) {\n        this._options.onIncrement = callback;\n    }\n\n    updateOnDecrement(callback: () => void) {\n        this._options.onDecrement = callback;\n    }\n}\n\nexport function initInputCounters() {\n    document.querySelectorAll('[data-input-counter]').forEach(($targetEl) => {\n        const targetId = $targetEl.id;\n\n        const $incrementEl = document.querySelector(\n            '[data-input-counter-increment=\"' + targetId + '\"]'\n        );\n\n        const $decrementEl = document.querySelector(\n            '[data-input-counter-decrement=\"' + targetId + '\"]'\n        );\n\n        const minValue = $targetEl.getAttribute('data-input-counter-min');\n        const maxValue = $targetEl.getAttribute('data-input-counter-max');\n\n        // check if the target element exists\n        if ($targetEl) {\n            if (\n                !instances.instanceExists(\n                    'InputCounter',\n                    $targetEl.getAttribute('id')\n                )\n            ) {\n                new InputCounter(\n                    $targetEl as HTMLInputElement,\n                    $incrementEl ? ($incrementEl as HTMLElement) : null,\n                    $decrementEl ? ($decrementEl as HTMLElement) : null,\n                    {\n                        minValue: minValue ? parseInt(minValue) : null,\n                        maxValue: maxValue ? parseInt(maxValue) : null,\n                    } as InputCounterOptions\n                );\n            }\n        } else {\n            console.error(\n                `The target element with id \"${targetId}\" does not exist. Please check the data-input-counter attribute.`\n            );\n        }\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.InputCounter = InputCounter;\n    window.initInputCounters = initInputCounters;\n}\n\nexport default InputCounter;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { ModalOptions } from './types';\nimport type { InstanceOptions, EventListenerInstance } from '../../dom/types';\nimport { ModalInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: ModalOptions = {\n    placement: 'center',\n    backdropClasses: 'bg-gray-900/50 dark:bg-gray-900/80 fixed inset-0 z-40',\n    backdrop: 'dynamic',\n    closable: true,\n    onHide: () => {},\n    onShow: () => {},\n    onToggle: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Modal implements ModalInterface {\n    _instanceId: string;\n    _targetEl: HTMLElement | null;\n    _options: ModalOptions;\n    _isHidden: boolean;\n    _backdropEl: HTMLElement | null;\n    _clickOutsideEventListener: EventListenerOrEventListenerObject;\n    _keydownEventListener: EventListenerOrEventListenerObject;\n    _eventListenerInstances: EventListenerInstance[] = [];\n    _initialized: boolean;\n\n    constructor(\n        targetEl: HTMLElement | null = null,\n        options: ModalOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n        this._targetEl = targetEl;\n        this._options = { ...Default, ...options };\n        this._isHidden = true;\n        this._backdropEl = null;\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Modal',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._targetEl && !this._initialized) {\n            this._getPlacementClasses().map((c) => {\n                this._targetEl.classList.add(c);\n            });\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._initialized) {\n            this.removeAllEventListenerInstances();\n            this._destroyBackdropEl();\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Modal', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    _createBackdrop() {\n        if (this._isHidden) {\n            const backdropEl = document.createElement('div');\n            backdropEl.setAttribute('modal-backdrop', '');\n            backdropEl.classList.add(\n                ...this._options.backdropClasses.split(' ')\n            );\n            document.querySelector('body').append(backdropEl);\n            this._backdropEl = backdropEl;\n        }\n    }\n\n    _destroyBackdropEl() {\n        if (!this._isHidden) {\n            document.querySelector('[modal-backdrop]').remove();\n        }\n    }\n\n    _setupModalCloseEventListeners() {\n        if (this._options.backdrop === 'dynamic') {\n            this._clickOutsideEventListener = (ev: MouseEvent) => {\n                this._handleOutsideClick(ev.target);\n            };\n            this._targetEl.addEventListener(\n                'click',\n                this._clickOutsideEventListener,\n                true\n            );\n        }\n\n        this._keydownEventListener = (ev: KeyboardEvent) => {\n            if (ev.key === 'Escape') {\n                this.hide();\n            }\n        };\n        document.body.addEventListener(\n            'keydown',\n            this._keydownEventListener,\n            true\n        );\n    }\n\n    _removeModalCloseEventListeners() {\n        if (this._options.backdrop === 'dynamic') {\n            this._targetEl.removeEventListener(\n                'click',\n                this._clickOutsideEventListener,\n                true\n            );\n        }\n        document.body.removeEventListener(\n            'keydown',\n            this._keydownEventListener,\n            true\n        );\n    }\n\n    _handleOutsideClick(target: EventTarget) {\n        if (\n            target === this._targetEl ||\n            (target === this._backdropEl && this.isVisible())\n        ) {\n            this.hide();\n        }\n    }\n\n    _getPlacementClasses() {\n        switch (this._options.placement) {\n            // top\n            case 'top-left':\n                return ['justify-start', 'items-start'];\n            case 'top-center':\n                return ['justify-center', 'items-start'];\n            case 'top-right':\n                return ['justify-end', 'items-start'];\n\n            // center\n            case 'center-left':\n                return ['justify-start', 'items-center'];\n            case 'center':\n                return ['justify-center', 'items-center'];\n            case 'center-right':\n                return ['justify-end', 'items-center'];\n\n            // bottom\n            case 'bottom-left':\n                return ['justify-start', 'items-end'];\n            case 'bottom-center':\n                return ['justify-center', 'items-end'];\n            case 'bottom-right':\n                return ['justify-end', 'items-end'];\n\n            default:\n                return ['justify-center', 'items-center'];\n        }\n    }\n\n    toggle() {\n        if (this._isHidden) {\n            this.show();\n        } else {\n            this.hide();\n        }\n\n        // callback function\n        this._options.onToggle(this);\n    }\n\n    show() {\n        if (this.isHidden) {\n            this._targetEl.classList.add('flex');\n            this._targetEl.classList.remove('hidden');\n            this._targetEl.setAttribute('aria-modal', 'true');\n            this._targetEl.setAttribute('role', 'dialog');\n            this._targetEl.removeAttribute('aria-hidden');\n            this._createBackdrop();\n            this._isHidden = false;\n\n            // Add keyboard event listener to the document\n            if (this._options.closable) {\n                this._setupModalCloseEventListeners();\n            }\n\n            // prevent body scroll\n            document.body.classList.add('overflow-hidden');\n\n            // callback function\n            this._options.onShow(this);\n        }\n    }\n\n    hide() {\n        if (this.isVisible) {\n            this._targetEl.classList.add('hidden');\n            this._targetEl.classList.remove('flex');\n            this._targetEl.setAttribute('aria-hidden', 'true');\n            this._targetEl.removeAttribute('aria-modal');\n            this._targetEl.removeAttribute('role');\n            this._destroyBackdropEl();\n            this._isHidden = true;\n\n            // re-apply body scroll\n            document.body.classList.remove('overflow-hidden');\n\n            if (this._options.closable) {\n                this._removeModalCloseEventListeners();\n            }\n\n            // callback function\n            this._options.onHide(this);\n        }\n    }\n\n    isVisible() {\n        return !this._isHidden;\n    }\n\n    isHidden() {\n        return this._isHidden;\n    }\n\n    addEventListenerInstance(\n        element: HTMLElement,\n        type: string,\n        handler: EventListenerOrEventListenerObject\n    ) {\n        this._eventListenerInstances.push({\n            element: element,\n            type: type,\n            handler: handler,\n        });\n    }\n\n    removeAllEventListenerInstances() {\n        this._eventListenerInstances.map((eventListenerInstance) => {\n            eventListenerInstance.element.removeEventListener(\n                eventListenerInstance.type,\n                eventListenerInstance.handler\n            );\n        });\n        this._eventListenerInstances = [];\n    }\n\n    getAllEventListenerInstances() {\n        return this._eventListenerInstances;\n    }\n\n    updateOnShow(callback: () => void) {\n        this._options.onShow = callback;\n    }\n\n    updateOnHide(callback: () => void) {\n        this._options.onHide = callback;\n    }\n\n    updateOnToggle(callback: () => void) {\n        this._options.onToggle = callback;\n    }\n}\n\nexport function initModals() {\n    // initiate modal based on data-modal-target\n    document.querySelectorAll('[data-modal-target]').forEach(($triggerEl) => {\n        const modalId = $triggerEl.getAttribute('data-modal-target');\n        const $modalEl = document.getElementById(modalId);\n\n        if ($modalEl) {\n            const placement = $modalEl.getAttribute('data-modal-placement');\n            const backdrop = $modalEl.getAttribute('data-modal-backdrop');\n            new Modal(\n                $modalEl as HTMLElement,\n                {\n                    placement: placement ? placement : Default.placement,\n                    backdrop: backdrop ? backdrop : Default.backdrop,\n                } as ModalOptions\n            );\n        } else {\n            console.error(\n                `Modal with id ${modalId} does not exist. Are you sure that the data-modal-target attribute points to the correct modal id?.`\n            );\n        }\n    });\n\n    // toggle modal visibility\n    document.querySelectorAll('[data-modal-toggle]').forEach(($triggerEl) => {\n        const modalId = $triggerEl.getAttribute('data-modal-toggle');\n        const $modalEl = document.getElementById(modalId);\n\n        if ($modalEl) {\n            const modal: ModalInterface = instances.getInstance(\n                'Modal',\n                modalId\n            );\n\n            if (modal) {\n                const toggleModal = () => {\n                    modal.toggle();\n                };\n                $triggerEl.addEventListener('click', toggleModal);\n                modal.addEventListenerInstance(\n                    $triggerEl as HTMLElement,\n                    'click',\n                    toggleModal\n                );\n            } else {\n                console.error(\n                    `Modal with id ${modalId} has not been initialized. Please initialize it using the data-modal-target attribute.`\n                );\n            }\n        } else {\n            console.error(\n                `Modal with id ${modalId} does not exist. Are you sure that the data-modal-toggle attribute points to the correct modal id?`\n            );\n        }\n    });\n\n    // show modal on click if exists based on id\n    document.querySelectorAll('[data-modal-show]').forEach(($triggerEl) => {\n        const modalId = $triggerEl.getAttribute('data-modal-show');\n        const $modalEl = document.getElementById(modalId);\n\n        if ($modalEl) {\n            const modal: ModalInterface = instances.getInstance(\n                'Modal',\n                modalId\n            );\n\n            if (modal) {\n                const showModal = () => {\n                    modal.show();\n                };\n                $triggerEl.addEventListener('click', showModal);\n                modal.addEventListenerInstance(\n                    $triggerEl as HTMLElement,\n                    'click',\n                    showModal\n                );\n            } else {\n                console.error(\n                    `Modal with id ${modalId} has not been initialized. Please initialize it using the data-modal-target attribute.`\n                );\n            }\n        } else {\n            console.error(\n                `Modal with id ${modalId} does not exist. Are you sure that the data-modal-show attribute points to the correct modal id?`\n            );\n        }\n    });\n\n    // hide modal on click if exists based on id\n    document.querySelectorAll('[data-modal-hide]').forEach(($triggerEl) => {\n        const modalId = $triggerEl.getAttribute('data-modal-hide');\n        const $modalEl = document.getElementById(modalId);\n\n        if ($modalEl) {\n            const modal: ModalInterface = instances.getInstance(\n                'Modal',\n                modalId\n            );\n\n            if (modal) {\n                const hideModal = () => {\n                    modal.hide();\n                };\n                $triggerEl.addEventListener('click', hideModal);\n                modal.addEventListenerInstance(\n                    $triggerEl as HTMLElement,\n                    'click',\n                    hideModal\n                );\n            } else {\n                console.error(\n                    `Modal with id ${modalId} has not been initialized. Please initialize it using the data-modal-target attribute.`\n                );\n            }\n        } else {\n            console.error(\n                `Modal with id ${modalId} does not exist. Are you sure that the data-modal-hide attribute points to the correct modal id?`\n            );\n        }\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Modal = Modal;\n    window.initModals = initModals;\n}\n\nexport default Modal;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport { createPopper } from '@popperjs/core';\nimport type {\n    Options as PopperOptions,\n    Instance as PopperInstance,\n} from '@popperjs/core';\nimport type { PopoverOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { PopoverInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: PopoverOptions = {\n    placement: 'top',\n    offset: 10,\n    triggerType: 'hover',\n    onShow: () => {},\n    onHide: () => {},\n    onToggle: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Popover implements PopoverInterface {\n    _instanceId: string;\n    _targetEl: HTMLElement;\n    _triggerEl: HTMLElement;\n    _options: PopoverOptions;\n    _popperInstance: PopperInstance;\n    _clickOutsideEventListener: EventListenerOrEventListenerObject;\n    _keydownEventListener: EventListenerOrEventListenerObject;\n    _visible: boolean;\n    _initialized: boolean;\n    _showHandler: EventListenerOrEventListenerObject;\n    _hideHandler: EventListenerOrEventListenerObject;\n\n    constructor(\n        targetEl: HTMLElement | null = null,\n        triggerEl: HTMLElement | null = null,\n        options: PopoverOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n        this._targetEl = targetEl;\n        this._triggerEl = triggerEl;\n        this._options = { ...Default, ...options };\n        this._popperInstance = null;\n        this._visible = false;\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Popover',\n            this,\n            instanceOptions.id ? instanceOptions.id : this._targetEl.id,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._triggerEl && this._targetEl && !this._initialized) {\n            this._setupEventListeners();\n            this._popperInstance = this._createPopperInstance();\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._initialized) {\n            // remove event listeners associated with the trigger element and target element\n            const triggerEvents = this._getTriggerEvents();\n\n            triggerEvents.showEvents.forEach((ev) => {\n                this._triggerEl.removeEventListener(ev, this._showHandler);\n                this._targetEl.removeEventListener(ev, this._showHandler);\n            });\n\n            triggerEvents.hideEvents.forEach((ev) => {\n                this._triggerEl.removeEventListener(ev, this._hideHandler);\n                this._targetEl.removeEventListener(ev, this._hideHandler);\n            });\n\n            // remove event listeners for keydown\n            this._removeKeydownListener();\n\n            // remove event listeners for click outside\n            this._removeClickOutsideListener();\n\n            // destroy the Popper instance if you have one (assuming this._popperInstance is the Popper instance)\n            if (this._popperInstance) {\n                this._popperInstance.destroy();\n            }\n\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Popover', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    _setupEventListeners() {\n        const triggerEvents = this._getTriggerEvents();\n\n        this._showHandler = () => {\n            this.show();\n        };\n\n        this._hideHandler = () => {\n            setTimeout(() => {\n                if (!this._targetEl.matches(':hover')) {\n                    this.hide();\n                }\n            }, 100);\n        };\n\n        triggerEvents.showEvents.forEach((ev) => {\n            this._triggerEl.addEventListener(ev, this._showHandler);\n            this._targetEl.addEventListener(ev, this._showHandler);\n        });\n\n        triggerEvents.hideEvents.forEach((ev) => {\n            this._triggerEl.addEventListener(ev, this._hideHandler);\n            this._targetEl.addEventListener(ev, this._hideHandler);\n        });\n    }\n\n    _createPopperInstance() {\n        return createPopper(this._triggerEl, this._targetEl, {\n            placement: this._options.placement,\n            modifiers: [\n                {\n                    name: 'offset',\n                    options: {\n                        offset: [0, this._options.offset],\n                    },\n                },\n            ],\n        });\n    }\n\n    _getTriggerEvents() {\n        switch (this._options.triggerType) {\n            case 'hover':\n                return {\n                    showEvents: ['mouseenter', 'focus'],\n                    hideEvents: ['mouseleave', 'blur'],\n                };\n            case 'click':\n                return {\n                    showEvents: ['click', 'focus'],\n                    hideEvents: ['focusout', 'blur'],\n                };\n            case 'none':\n                return {\n                    showEvents: [],\n                    hideEvents: [],\n                };\n            default:\n                return {\n                    showEvents: ['mouseenter', 'focus'],\n                    hideEvents: ['mouseleave', 'blur'],\n                };\n        }\n    }\n\n    _setupKeydownListener() {\n        this._keydownEventListener = (ev: KeyboardEvent) => {\n            if (ev.key === 'Escape') {\n                this.hide();\n            }\n        };\n        document.body.addEventListener(\n            'keydown',\n            this._keydownEventListener,\n            true\n        );\n    }\n\n    _removeKeydownListener() {\n        document.body.removeEventListener(\n            'keydown',\n            this._keydownEventListener,\n            true\n        );\n    }\n\n    _setupClickOutsideListener() {\n        this._clickOutsideEventListener = (ev: MouseEvent) => {\n            this._handleClickOutside(ev, this._targetEl);\n        };\n        document.body.addEventListener(\n            'click',\n            this._clickOutsideEventListener,\n            true\n        );\n    }\n\n    _removeClickOutsideListener() {\n        document.body.removeEventListener(\n            'click',\n            this._clickOutsideEventListener,\n            true\n        );\n    }\n\n    _handleClickOutside(ev: Event, targetEl: HTMLElement) {\n        const clickedEl = ev.target as Node;\n        if (\n            clickedEl !== targetEl &&\n            !targetEl.contains(clickedEl) &&\n            !this._triggerEl.contains(clickedEl) &&\n            this.isVisible()\n        ) {\n            this.hide();\n        }\n    }\n\n    isVisible() {\n        return this._visible;\n    }\n\n    toggle() {\n        if (this.isVisible()) {\n            this.hide();\n        } else {\n            this.show();\n        }\n        this._options.onToggle(this);\n    }\n\n    show() {\n        this._targetEl.classList.remove('opacity-0', 'invisible');\n        this._targetEl.classList.add('opacity-100', 'visible');\n\n        // Enable the event listeners\n        this._popperInstance.setOptions((options: PopperOptions) => ({\n            ...options,\n            modifiers: [\n                ...options.modifiers,\n                { name: 'eventListeners', enabled: true },\n            ],\n        }));\n\n        // handle click outside\n        this._setupClickOutsideListener();\n\n        // handle esc keydown\n        this._setupKeydownListener();\n\n        // Update its position\n        this._popperInstance.update();\n\n        // set visibility to true\n        this._visible = true;\n\n        // callback function\n        this._options.onShow(this);\n    }\n\n    hide() {\n        this._targetEl.classList.remove('opacity-100', 'visible');\n        this._targetEl.classList.add('opacity-0', 'invisible');\n\n        // Disable the event listeners\n        this._popperInstance.setOptions((options: PopperOptions) => ({\n            ...options,\n            modifiers: [\n                ...options.modifiers,\n                { name: 'eventListeners', enabled: false },\n            ],\n        }));\n\n        // handle click outside\n        this._removeClickOutsideListener();\n\n        // handle esc keydown\n        this._removeKeydownListener();\n\n        // set visibility to false\n        this._visible = false;\n\n        // callback function\n        this._options.onHide(this);\n    }\n\n    updateOnShow(callback: () => void) {\n        this._options.onShow = callback;\n    }\n\n    updateOnHide(callback: () => void) {\n        this._options.onHide = callback;\n    }\n\n    updateOnToggle(callback: () => void) {\n        this._options.onToggle = callback;\n    }\n}\n\nexport function initPopovers() {\n    document.querySelectorAll('[data-popover-target]').forEach(($triggerEl) => {\n        const popoverID = $triggerEl.getAttribute('data-popover-target');\n        const $popoverEl = document.getElementById(popoverID);\n\n        if ($popoverEl) {\n            const triggerType = $triggerEl.getAttribute('data-popover-trigger');\n            const placement = $triggerEl.getAttribute('data-popover-placement');\n            const offset = $triggerEl.getAttribute('data-popover-offset');\n\n            new Popover(\n                $popoverEl as HTMLElement,\n                $triggerEl as HTMLElement,\n                {\n                    placement: placement ? placement : Default.placement,\n                    offset: offset ? parseInt(offset) : Default.offset,\n                    triggerType: triggerType\n                        ? triggerType\n                        : Default.triggerType,\n                } as PopoverOptions\n            );\n        } else {\n            console.error(\n                `The popover element with id \"${popoverID}\" does not exist. Please check the data-popover-target attribute.`\n            );\n        }\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Popover = Popover;\n    window.initPopovers = initPopovers;\n}\n\nexport default Popover;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport type { TabItem, TabsOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { TabsInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: TabsOptions = {\n    defaultTabId: null,\n    activeClasses:\n        'text-blue-600 hover:text-blue-600 dark:text-blue-500 dark:hover:text-blue-500 border-blue-600 dark:border-blue-500',\n    inactiveClasses:\n        'dark:border-transparent text-gray-500 hover:text-gray-600 dark:text-gray-400 border-gray-100 hover:border-gray-300 dark:border-gray-700 dark:hover:text-gray-300',\n    onShow: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Tabs implements TabsInterface {\n    _instanceId: string;\n    _tabsEl: HTMLElement;\n    _items: TabItem[];\n    _activeTab: TabItem;\n    _options: TabsOptions;\n    _initialized: boolean;\n\n    constructor(\n        tabsEl: HTMLElement | null = null,\n        items: TabItem[] = [],\n        options: TabsOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id ? instanceOptions.id : tabsEl.id;\n        this._tabsEl = tabsEl;\n        this._items = items;\n        this._activeTab = options ? this.getTab(options.defaultTabId) : null;\n        this._options = { ...Default, ...options };\n        this._initialized = false;\n        this.init();\n        instances.addInstance('Tabs', this, this._tabsEl.id, true);\n        instances.addInstance(\n            'Tabs',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._items.length && !this._initialized) {\n            // set the first tab as active if not set by explicitly\n            if (!this._activeTab) {\n                this.setActiveTab(this._items[0]);\n            }\n\n            // force show the first default tab\n            this.show(this._activeTab.id, true);\n\n            // show tab content based on click\n            this._items.map((tab) => {\n                tab.triggerEl.addEventListener('click', (event) => {\n                    event.preventDefault();\n                    this.show(tab.id);\n                });\n            });\n        }\n    }\n\n    destroy() {\n        if (this._initialized) {\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        this.destroy();\n        instances.removeInstance('Tabs', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    getActiveTab() {\n        return this._activeTab;\n    }\n\n    setActiveTab(tab: TabItem) {\n        this._activeTab = tab;\n    }\n\n    getTab(id: string) {\n        return this._items.filter((t) => t.id === id)[0];\n    }\n\n    show(id: string, forceShow = false) {\n        const tab = this.getTab(id);\n\n        // don't do anything if already active\n        if (tab === this._activeTab && !forceShow) {\n            return;\n        }\n\n        // hide other tabs\n        this._items.map((t: TabItem) => {\n            if (t !== tab) {\n                t.triggerEl.classList.remove(\n                    ...this._options.activeClasses.split(' ')\n                );\n                t.triggerEl.classList.add(\n                    ...this._options.inactiveClasses.split(' ')\n                );\n                t.targetEl.classList.add('hidden');\n                t.triggerEl.setAttribute('aria-selected', 'false');\n            }\n        });\n\n        // show active tab\n        tab.triggerEl.classList.add(...this._options.activeClasses.split(' '));\n        tab.triggerEl.classList.remove(\n            ...this._options.inactiveClasses.split(' ')\n        );\n        tab.triggerEl.setAttribute('aria-selected', 'true');\n        tab.targetEl.classList.remove('hidden');\n\n        this.setActiveTab(tab);\n\n        // callback function\n        this._options.onShow(this, tab);\n    }\n\n    updateOnShow(callback: () => void) {\n        this._options.onShow = callback;\n    }\n}\n\nexport function initTabs() {\n    document.querySelectorAll('[data-tabs-toggle]').forEach(($parentEl) => {\n        const tabItems: TabItem[] = [];\n        const activeClasses = $parentEl.getAttribute(\n            'data-tabs-active-classes'\n        );\n        const inactiveClasses = $parentEl.getAttribute(\n            'data-tabs-inactive-classes'\n        );\n        let defaultTabId = null;\n        $parentEl\n            .querySelectorAll('[role=\"tab\"]')\n            .forEach(($triggerEl: HTMLElement) => {\n                const isActive =\n                    $triggerEl.getAttribute('aria-selected') === 'true';\n                const tab: TabItem = {\n                    id: $triggerEl.getAttribute('data-tabs-target'),\n                    triggerEl: $triggerEl,\n                    targetEl: document.querySelector(\n                        $triggerEl.getAttribute('data-tabs-target')\n                    ),\n                };\n                tabItems.push(tab);\n\n                if (isActive) {\n                    defaultTabId = tab.id;\n                }\n            });\n\n        new Tabs($parentEl as HTMLElement, tabItems, {\n            defaultTabId: defaultTabId,\n            activeClasses: activeClasses\n                ? activeClasses\n                : Default.activeClasses,\n            inactiveClasses: inactiveClasses\n                ? inactiveClasses\n                : Default.inactiveClasses,\n        } as TabsOptions);\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Tabs = Tabs;\n    window.initTabs = initTabs;\n}\n\nexport default Tabs;\n", "/* eslint-disable @typescript-eslint/no-empty-function */\nimport { createPopper } from '@popperjs/core';\nimport type {\n    Options as PopperOptions,\n    Instance as PopperInstance,\n} from '@popperjs/core';\nimport type { TooltipOptions } from './types';\nimport type { InstanceOptions } from '../../dom/types';\nimport { TooltipInterface } from './interface';\nimport instances from '../../dom/instances';\n\nconst Default: TooltipOptions = {\n    placement: 'top',\n    triggerType: 'hover',\n    onShow: () => {},\n    onHide: () => {},\n    onToggle: () => {},\n};\n\nconst DefaultInstanceOptions: InstanceOptions = {\n    id: null,\n    override: true,\n};\n\nclass Tooltip implements TooltipInterface {\n    _instanceId: string;\n    _targetEl: HTMLElement | null;\n    _triggerEl: HTMLElement | null;\n    _options: TooltipOptions;\n    _popperInstance: PopperInstance;\n    _clickOutsideEventListener: EventListenerOrEventListenerObject;\n    _keydownEventListener: EventListenerOrEventListenerObject;\n    _visible: boolean;\n    _initialized: boolean;\n    _showHandler: EventListenerOrEventListenerObject;\n    _hideHandler: EventListenerOrEventListenerObject;\n\n    constructor(\n        targetEl: HTMLElement | null = null,\n        triggerEl: HTMLElement | null = null,\n        options: TooltipOptions = Default,\n        instanceOptions: InstanceOptions = DefaultInstanceOptions\n    ) {\n        this._instanceId = instanceOptions.id\n            ? instanceOptions.id\n            : targetEl.id;\n        this._targetEl = targetEl;\n        this._triggerEl = triggerEl;\n        this._options = { ...Default, ...options };\n        this._popperInstance = null;\n        this._visible = false;\n        this._initialized = false;\n        this.init();\n        instances.addInstance(\n            'Tooltip',\n            this,\n            this._instanceId,\n            instanceOptions.override\n        );\n    }\n\n    init() {\n        if (this._triggerEl && this._targetEl && !this._initialized) {\n            this._setupEventListeners();\n            this._popperInstance = this._createPopperInstance();\n            this._initialized = true;\n        }\n    }\n\n    destroy() {\n        if (this._initialized) {\n            // remove event listeners associated with the trigger element\n            const triggerEvents = this._getTriggerEvents();\n\n            triggerEvents.showEvents.forEach((ev) => {\n                this._triggerEl.removeEventListener(ev, this._showHandler);\n            });\n\n            triggerEvents.hideEvents.forEach((ev) => {\n                this._triggerEl.removeEventListener(ev, this._hideHandler);\n            });\n\n            // remove event listeners for keydown\n            this._removeKeydownListener();\n\n            // remove event listeners for click outside\n            this._removeClickOutsideListener();\n\n            // destroy the Popper instance if you have one (assuming this._popperInstance is the Popper instance)\n            if (this._popperInstance) {\n                this._popperInstance.destroy();\n            }\n            this._initialized = false;\n        }\n    }\n\n    removeInstance() {\n        instances.removeInstance('Tooltip', this._instanceId);\n    }\n\n    destroyAndRemoveInstance() {\n        this.destroy();\n        this.removeInstance();\n    }\n\n    _setupEventListeners() {\n        const triggerEvents = this._getTriggerEvents();\n\n        this._showHandler = () => {\n            this.show();\n        };\n\n        this._hideHandler = () => {\n            this.hide();\n        };\n\n        triggerEvents.showEvents.forEach((ev) => {\n            this._triggerEl.addEventListener(ev, this._showHandler);\n        });\n\n        triggerEvents.hideEvents.forEach((ev) => {\n            this._triggerEl.addEventListener(ev, this._hideHandler);\n        });\n    }\n\n    _createPopperInstance() {\n        return createPopper(this._triggerEl, this._targetEl, {\n            placement: this._options.placement,\n            modifiers: [\n                {\n                    name: 'offset',\n                    options: {\n                        offset: [0, 8],\n                    },\n                },\n            ],\n        });\n    }\n\n    _getTriggerEvents() {\n        switch (this._options.triggerType) {\n            case 'hover':\n                return {\n                    showEvents: ['mouseenter', 'focus'],\n                    hideEvents: ['mouseleave', 'blur'],\n                };\n            case 'click':\n                return {\n                    showEvents: ['click', 'focus'],\n                    hideEvents: ['focusout', 'blur'],\n                };\n            case 'none':\n                return {\n                    showEvents: [],\n                    hideEvents: [],\n                };\n            default:\n                return {\n                    showEvents: ['mouseenter', 'focus'],\n                    hideEvents: ['mouseleave', 'blur'],\n                };\n        }\n    }\n\n    _setupKeydownListener() {\n        this._keydownEventListener = (ev: KeyboardEvent) => {\n            if (ev.key === 'Escape') {\n                this.hide();\n            }\n        };\n        document.body.addEventListener(\n            'keydown',\n            this._keydownEventListener,\n            true\n        );\n    }\n\n    _removeKeydownListener() {\n        document.body.removeEventListener(\n            'keydown',\n            this._keydownEventListener,\n            true\n        );\n    }\n\n    _setupClickOutsideListener() {\n        this._clickOutsideEventListener = (ev: MouseEvent) => {\n            this._handleClickOutside(ev, this._targetEl);\n        };\n        document.body.addEventListener(\n            'click',\n            this._clickOutsideEventListener,\n            true\n        );\n    }\n\n    _removeClickOutsideListener() {\n        document.body.removeEventListener(\n            'click',\n            this._clickOutsideEventListener,\n            true\n        );\n    }\n\n    _handleClickOutside(ev: Event, targetEl: HTMLElement) {\n        const clickedEl = ev.target as Node;\n        if (\n            clickedEl !== targetEl &&\n            !targetEl.contains(clickedEl) &&\n            !this._triggerEl.contains(clickedEl) &&\n            this.isVisible()\n        ) {\n            this.hide();\n        }\n    }\n\n    isVisible() {\n        return this._visible;\n    }\n\n    toggle() {\n        if (this.isVisible()) {\n            this.hide();\n        } else {\n            this.show();\n        }\n    }\n\n    show() {\n        this._targetEl.classList.remove('opacity-0', 'invisible');\n        this._targetEl.classList.add('opacity-100', 'visible');\n\n        // Enable the event listeners\n        this._popperInstance.setOptions((options: PopperOptions) => ({\n            ...options,\n            modifiers: [\n                ...options.modifiers,\n                { name: 'eventListeners', enabled: true },\n            ],\n        }));\n\n        // handle click outside\n        this._setupClickOutsideListener();\n\n        // handle esc keydown\n        this._setupKeydownListener();\n\n        // Update its position\n        this._popperInstance.update();\n\n        // set visibility\n        this._visible = true;\n\n        // callback function\n        this._options.onShow(this);\n    }\n\n    hide() {\n        this._targetEl.classList.remove('opacity-100', 'visible');\n        this._targetEl.classList.add('opacity-0', 'invisible');\n\n        // Disable the event listeners\n        this._popperInstance.setOptions((options: PopperOptions) => ({\n            ...options,\n            modifiers: [\n                ...options.modifiers,\n                { name: 'eventListeners', enabled: false },\n            ],\n        }));\n\n        // handle click outside\n        this._removeClickOutsideListener();\n\n        // handle esc keydown\n        this._removeKeydownListener();\n\n        // set visibility\n        this._visible = false;\n\n        // callback function\n        this._options.onHide(this);\n    }\n\n    updateOnShow(callback: () => void) {\n        this._options.onShow = callback;\n    }\n\n    updateOnHide(callback: () => void) {\n        this._options.onHide = callback;\n    }\n\n    updateOnToggle(callback: () => void) {\n        this._options.onToggle = callback;\n    }\n}\n\nexport function initTooltips() {\n    document.querySelectorAll('[data-tooltip-target]').forEach(($triggerEl) => {\n        const tooltipId = $triggerEl.getAttribute('data-tooltip-target');\n        const $tooltipEl = document.getElementById(tooltipId);\n\n        if ($tooltipEl) {\n            const triggerType = $triggerEl.getAttribute('data-tooltip-trigger');\n            const placement = $triggerEl.getAttribute('data-tooltip-placement');\n\n            new Tooltip(\n                $tooltipEl as HTMLElement,\n                $triggerEl as HTMLElement,\n                {\n                    placement: placement ? placement : Default.placement,\n                    triggerType: triggerType\n                        ? triggerType\n                        : Default.triggerType,\n                } as TooltipOptions\n            );\n        } else {\n            console.error(\n                `The tooltip element with id \"${tooltipId}\" does not exist. Please check the data-tooltip-target attribute.`\n            );\n        }\n    });\n}\n\nif (typeof window !== 'undefined') {\n    window.Tooltip = Tooltip;\n    window.initTooltips = initTooltips;\n}\n\nexport default Tooltip;\n", "class Events {\n    private _eventType: string;\n    private _eventFunctions: EventListener[];\n\n    constructor(eventType: string, eventFunctions: EventListener[] = []) {\n        this._eventType = eventType;\n        this._eventFunctions = eventFunctions;\n    }\n\n    init() {\n        this._eventFunctions.forEach((eventFunction) => {\n            if (typeof window !== 'undefined') {\n                window.addEventListener(this._eventType, eventFunction);\n            }\n        });\n    }\n}\n\nexport default Events;\n", "import { AccordionInterface } from '../components/accordion/interface';\nimport { CarouselInterface } from '../components/carousel/interface';\nimport { CollapseInterface } from '../components/collapse/interface';\nimport { DialInterface } from '../components/dial/interface';\nimport { DismissInterface } from '../components/dismiss/interface';\nimport { DrawerInterface } from '../components/drawer/interface';\nimport { DropdownInterface } from '../components/dropdown/interface';\nimport { ModalInterface } from '../components/modal/interface';\nimport { PopoverInterface } from '../components/popover/interface';\nimport { TabsInterface } from '../components/tabs/interface';\nimport { TooltipInterface } from '../components/tooltip/interface';\nimport { InputCounterInterface } from '../components/input-counter/interface';\nimport { CopyClipboardInterface } from '../components/clipboard/interface';\n\nclass Instances {\n    private _instances: {\n        Accordion: { [id: string]: AccordionInterface };\n        Carousel: { [id: string]: CarouselInterface };\n        Collapse: { [id: string]: CollapseInterface };\n        Dial: { [id: string]: DialInterface };\n        Dismiss: { [id: string]: DismissInterface };\n        Drawer: { [id: string]: DrawerInterface };\n        Dropdown: { [id: string]: DropdownInterface };\n        Modal: { [id: string]: ModalInterface };\n        Popover: { [id: string]: PopoverInterface };\n        Tabs: { [id: string]: TabsInterface };\n        Tooltip: { [id: string]: TooltipInterface };\n        InputCounter: { [id: string]: InputCounterInterface };\n        CopyClipboard: { [id: string]: CopyClipboardInterface };\n    };\n\n    constructor() {\n        this._instances = {\n            Accordion: {},\n            Carousel: {},\n            Collapse: {},\n            Dial: {},\n            Dismiss: {},\n            Drawer: {},\n            Dropdown: {},\n            Modal: {},\n            Popover: {},\n            Tabs: {},\n            Tooltip: {},\n            InputCounter: {},\n            CopyClipboard: {},\n        };\n    }\n\n    addInstance(\n        component: keyof Instances['_instances'],\n        instance: any,\n        id?: string,\n        override = false\n    ) {\n        if (!this._instances[component]) {\n            console.warn(`Flowbite: Component ${component} does not exist.`);\n            return false;\n        }\n\n        if (this._instances[component][id] && !override) {\n            console.warn(`Flowbite: Instance with ID ${id} already exists.`);\n            return;\n        }\n\n        if (override && this._instances[component][id]) {\n            this._instances[component][id].destroyAndRemoveInstance();\n        }\n\n        this._instances[component][id ? id : this._generateRandomId()] =\n            instance;\n    }\n\n    getAllInstances() {\n        return this._instances;\n    }\n\n    getInstances(component: keyof Instances['_instances']) {\n        if (!this._instances[component]) {\n            console.warn(`Flowbite: Component ${component} does not exist.`);\n            return false;\n        }\n        return this._instances[component];\n    }\n\n    getInstance(component: keyof Instances['_instances'], id: string) {\n        if (!this._componentAndInstanceCheck(component, id)) {\n            return;\n        }\n\n        if (!this._instances[component][id]) {\n            console.warn(`Flowbite: Instance with ID ${id} does not exist.`);\n            return;\n        }\n        return this._instances[component][id] as any;\n    }\n\n    destroyAndRemoveInstance(\n        component: keyof Instances['_instances'],\n        id: string\n    ) {\n        if (!this._componentAndInstanceCheck(component, id)) {\n            return;\n        }\n        this.destroyInstanceObject(component, id);\n        this.removeInstance(component, id);\n    }\n\n    removeInstance(component: keyof Instances['_instances'], id: string) {\n        if (!this._componentAndInstanceCheck(component, id)) {\n            return;\n        }\n        delete this._instances[component][id];\n    }\n\n    destroyInstanceObject(\n        component: keyof Instances['_instances'],\n        id: string\n    ) {\n        if (!this._componentAndInstanceCheck(component, id)) {\n            return;\n        }\n        this._instances[component][id].destroy();\n    }\n\n    instanceExists(component: keyof Instances['_instances'], id: string) {\n        if (!this._instances[component]) {\n            return false;\n        }\n\n        if (!this._instances[component][id]) {\n            return false;\n        }\n\n        return true;\n    }\n\n    _generateRandomId() {\n        return Math.random().toString(36).substr(2, 9);\n    }\n\n    private _componentAndInstanceCheck(\n        component: keyof Instances['_instances'],\n        id: string\n    ) {\n        if (!this._instances[component]) {\n            console.warn(`Flowbite: Component ${component} does not exist.`);\n            return false;\n        }\n\n        if (!this._instances[component][id]) {\n            console.warn(`Flowbite: Instance with ID ${id} does not exist.`);\n            return false;\n        }\n\n        return true;\n    }\n}\n\nconst instances = new Instances();\n\nexport default instances;\n\nif (typeof window !== 'undefined') {\n    window.FlowbiteInstances = instances;\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\t// no module.id needed\n\t\t// no module.loaded needed\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// Return the exports of the module\n\treturn module.exports;\n}\n\n", "// define getter functions for harmony exports\n__webpack_require__.d = function(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__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }", "// define __esModule on exports\n__webpack_require__.r = function(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};", "// core components\nimport Accordion from './components/accordion';\nimport Carousel from './components/carousel';\nimport Collapse from './components/collapse';\nimport Dial from './components/dial';\nimport Dismiss from './components/dismiss';\nimport Drawer from './components/drawer';\nimport Dropdown from './components/dropdown';\nimport Modal from './components/modal';\nimport Popover from './components/popover';\nimport Tabs from './components/tabs';\nimport Tooltip from './components/tooltip';\nimport InputCounter from './components/input-counter';\nimport CopyClipboard from './components/clipboard';\nimport { initFlowbite } from './components/index';\nimport Events from './dom/events';\n\n// Since turbo maintainers refuse to add this event, we'll add it ourselves\n// https://discuss.hotwired.dev/t/event-to-know-a-turbo-stream-has-been-rendered/1554/10\nconst afterRenderEvent = new Event('turbo:after-stream-render');\naddEventListener('turbo:before-stream-render', (event: CustomEvent) => {\n    const originalRender = event.detail.render;\n\n    event.detail.render = function (streamElement: Element) {\n        originalRender(streamElement);\n        document.dispatchEvent(afterRenderEvent);\n    };\n});\n\nconst turboLoadEvents = new Events('turbo:load', [initFlowbite]);\nturboLoadEvents.init();\n\nconst turboFrameLoadEvents = new Events('turbo:frame-load', [initFlowbite]);\nturboFrameLoadEvents.init();\n\nconst turboStreamLoadEvents = new Events('turbo:after-stream-render', [\n    initFlowbite,\n]);\nturboStreamLoadEvents.init();\n\nexport default {\n    Accordion,\n    Carousel,\n    Collapse,\n    Dial,\n    Drawer,\n    Dismiss,\n    Dropdown,\n    Modal,\n    Popover,\n    Tabs,\n    Tooltip,\n    InputCounter,\n    CopyClipboard,\n    Events,\n};\n", "/*!\n * jQuery JavaScript Library v3.6.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2022-08-26T17:52Z\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\n\tversion = \"3.6.1\",\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\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\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}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\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\t// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[ i ] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|\" +\n\t\t\"ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\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: http://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]\n\t\t// 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\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": 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\t\"needsContext\": 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\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\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// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = 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 ) + \"\\\\\" +\n\t\t\t\tch.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// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\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 = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( ( target[ j++ ] = els[ i++ ] ) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( 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, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\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\tresults.push( 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, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\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\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( 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 ] ) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\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 ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\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 ) || rcombinators.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\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 = nid.replace( rcssescape, fcssescape );\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( rtrim, \"$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 (see Issue #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 Sizzle\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 * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split( \"|\" ),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[ i ] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( ( cur = cur.nextSibling ) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\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\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"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\tvar name = elem.nodeName.toLowerCase();\n\t\treturn ( name === \"input\" || name === \"button\" ) && elem.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\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\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 Sizzle 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// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, 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\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\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 ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\n\t} );\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert( function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute( \"className\" );\n\t} );\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert( function( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.getElementsByTagName( \"*\" ).length;\n\t} );\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\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\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\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\" ] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[ \"CLASS\" ] = support.getElementsByClassName && 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\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll( \"[msallowcapture^='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\t\trbuggyQSA.push( \":checked\" );\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll( \"[name=d]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll( \"*,:x\" );\n\t\t\trbuggyQSA.push( \",.*:\" );\n\t\t} );\n\t}\n\n\tif ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector ) ) ) ) {\n\n\t\tassert( function( el ) {\n\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t} );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( \"|\" ) );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t) );\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( ( b = b.parentNode ) ) {\n\t\t\t\t\tif ( b === a ) {\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\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( 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\tcontains( 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\tcontains( 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( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\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 eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( ( cur = cur.parentNode ) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[ i ] === bp[ i ] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[ i ], bp[ i ] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\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 eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( 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// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\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 Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.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 contains( context, elem );\n};\n\nSizzle.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 (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\nSizzle.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 */\nSizzle.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\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( 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\tresults.splice( 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\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\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\t\"ATTR\": 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 ] ||\n\t\t\t\tmatch[ 5 ] || \"\" ).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\t\"CHILD\": 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\tSizzle.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\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tSizzle.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": 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\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = 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 elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.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\t/* eslint-disable max-len */\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t\t/* eslint-enable max-len */\n\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": 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, uniqueCache, 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\tcache = uniqueCache[ 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\tuniqueCache[ 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\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || ( node[ expando ] = {} );\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ 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\tnode.nodeName.toLowerCase() === 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\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( outerCache[ node.uniqueID ] = {} );\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ 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\t\"PSEUDO\": function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://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\tSizzle.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 Sizzle 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( 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\t\"not\": 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( rtrim, \"$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 (issue #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\t\"has\": markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\t\"contains\": markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( 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// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": 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\tSizzle.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\t\"target\": 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\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn ( nodeName === \"input\" && !!elem.checked ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\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\t\"empty\": function( elem ) {\n\n\t\t\t// http://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\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[ \"empty\" ]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear 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\t\"first\": createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\t\"last\": createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\t\"eq\": createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\t\"even\": 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\t\"odd\": 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\t\"lt\": createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\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\t\"gt\": 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\ntokenize = Sizzle.tokenize = function( 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 = rcombinators.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( rtrim, \" \" )\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\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\n\t\t\t// Cache the tokens\n\t\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, uniqueCache, 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\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ 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\tuniqueCache[ 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\tSizzle( 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,\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 || multipleContexts(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\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\t\tmatcherOut = matcher ?\n\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\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( 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( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\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 (issue #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// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrim, \"$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: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\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\tresults.push( 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\tSizzle.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\ncompile = Sizzle.compile = function( 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(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\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 Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( 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\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.replace( runescape, funescape ), context ) || [] )[ 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 ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext\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// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\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\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute( \"href\" ) === \"#\";\n} ) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert( function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n} ) ) {\n\taddHandle( \"value\", function( elem, _name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t} );\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert( function( el ) {\n\treturn el.getAttribute( \"disabled\" ) == null;\n} ) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\t\tnull;\n\t\t}\n\t} );\n}\n\nreturn Sizzle;\n\n} )( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\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\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\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 Sizzle\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.stackTrace );\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 stack, 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.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = 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\njQuery.Deferred.exceptionHook = function( error, stack ) {\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, error.stack, stack );\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\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\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\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\", returnTrue );\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, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\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 notAsync, 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\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\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\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\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\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\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 the\n\t\t\t\t// 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.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\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\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\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, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\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\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\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// Reenable 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 Sizzle here for performance reasons: 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\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( 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 = \"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\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\t// trim whitespace for custom property (issue gh-4926)\n\t\tif ( isCustomProp ) {\n\n\t\t\t// rtrim 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\" );\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\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\tif ( box === \"margin\" ) {\n\t\t\tdelta += 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;\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\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": 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\n\n\nsupport.focusin = \"onfocusin\" in window;\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\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\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\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.mouseenter( fnOver ).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", "/**\n * sifter.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n(function(root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.Sifter = factory();\n\t}\n}(this, function() {\n\n\t/**\n\t * Textually searches arrays and hashes of objects\n\t * by property (or multiple properties). Designed\n\t * specifically for autocomplete.\n\t *\n\t * @constructor\n\t * @param {array|object} items\n\t * @param {object} items\n\t */\n\tvar Sifter = function(items, settings) {\n\t\tthis.items = items;\n\t\tthis.settings = settings || {diacritics: true};\n\t};\n\n\t/**\n\t * Splits a search string into an array of individual\n\t * regexps to be used to match results.\n\t *\n\t * @param {string} query\n\t * @returns {array}\n\t */\n\tSifter.prototype.tokenize = function(query) {\n\t\tquery = trim(String(query || '').toLowerCase());\n\t\tif (!query || !query.length) return [];\n\n\t\tvar i, n, regex, letter;\n\t\tvar tokens = [];\n\t\tvar words = query.split(/ +/);\n\n\t\tfor (i = 0, n = words.length; i < n; i++) {\n\t\t\tregex = escape_regex(words[i]);\n\t\t\tif (this.settings.diacritics) {\n\t\t\t\tfor (letter in DIACRITICS) {\n\t\t\t\t\tif (DIACRITICS.hasOwnProperty(letter)) {\n\t\t\t\t\t\tregex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttokens.push({\n\t\t\t\tstring : words[i],\n\t\t\t\tregex  : new RegExp(regex, 'i')\n\t\t\t});\n\t\t}\n\n\t\treturn tokens;\n\t};\n\n\t/**\n\t * Iterates over arrays and hashes.\n\t *\n\t * ```\n\t * this.iterator(this.items, function(item, id) {\n\t *    // invoked for each item\n\t * });\n\t * ```\n\t *\n\t * @param {array|object} object\n\t */\n\tSifter.prototype.iterator = function(object, callback) {\n\t\tvar iterator;\n\t\tif (is_array(object)) {\n\t\t\titerator = Array.prototype.forEach || function(callback) {\n\t\t\t\tfor (var i = 0, n = this.length; i < n; i++) {\n\t\t\t\t\tcallback(this[i], i, this);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\titerator = function(callback) {\n\t\t\t\tfor (var key in this) {\n\t\t\t\t\tif (this.hasOwnProperty(key)) {\n\t\t\t\t\t\tcallback(this[key], key, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\titerator.apply(object, [callback]);\n\t};\n\n\t/**\n\t * Returns a function to be used to score individual results.\n\t *\n\t * Good matches will have a higher score than poor matches.\n\t * If an item is not a match, 0 will be returned by the function.\n\t *\n\t * @param {object|string} search\n\t * @param {object} options (optional)\n\t * @returns {function}\n\t */\n\tSifter.prototype.getScoreFunction = function(search, options) {\n\t\tvar self, fields, tokens, token_count, nesting;\n\n\t\tself        = this;\n\t\tsearch      = self.prepareSearch(search, options);\n\t\ttokens      = search.tokens;\n\t\tfields      = search.options.fields;\n\t\ttoken_count = tokens.length;\n\t\tnesting     = search.options.nesting;\n\n\t\t/**\n\t\t * Calculates how close of a match the\n\t\t * given value is against a search token.\n\t\t *\n\t\t * @param {mixed} value\n\t\t * @param {object} token\n\t\t * @return {number}\n\t\t */\n\t\tvar scoreValue = function(value, token) {\n\t\t\tvar score, pos;\n\n\t\t\tif (!value) return 0;\n\t\t\tvalue = String(value || '');\n\t\t\tpos = value.search(token.regex);\n\t\t\tif (pos === -1) return 0;\n\t\t\tscore = token.string.length / value.length;\n\t\t\tif (pos === 0) score += 0.5;\n\t\t\treturn score;\n\t\t};\n\n\t\t/**\n\t\t * Calculates the score of an object\n\t\t * against the search query.\n\t\t *\n\t\t * @param {object} token\n\t\t * @param {object} data\n\t\t * @return {number}\n\t\t */\n\t\tvar scoreObject = (function() {\n\t\t\tvar field_count = fields.length;\n\t\t\tif (!field_count) {\n\t\t\t\treturn function() { return 0; };\n\t\t\t}\n\t\t\tif (field_count === 1) {\n\t\t\t\treturn function(token, data) {\n\t\t\t\t\treturn scoreValue(getattr(data, fields[0], nesting), token);\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn function(token, data) {\n\t\t\t\tfor (var i = 0, sum = 0; i < field_count; i++) {\n\t\t\t\t\tsum += scoreValue(getattr(data, fields[i], nesting), token);\n\t\t\t\t}\n\t\t\t\treturn sum / field_count;\n\t\t\t};\n\t\t})();\n\n\t\tif (!token_count) {\n\t\t\treturn function() { return 0; };\n\t\t}\n\t\tif (token_count === 1) {\n\t\t\treturn function(data) {\n\t\t\t\treturn scoreObject(tokens[0], data);\n\t\t\t};\n\t\t}\n\n\t\tif (search.options.conjunction === 'and') {\n\t\t\treturn function(data) {\n\t\t\t\tvar score;\n\t\t\t\tfor (var i = 0, sum = 0; i < token_count; i++) {\n\t\t\t\t\tscore = scoreObject(tokens[i], data);\n\t\t\t\t\tif (score <= 0) return 0;\n\t\t\t\t\tsum += score;\n\t\t\t\t}\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(data) {\n\t\t\t\tfor (var i = 0, sum = 0; i < token_count; i++) {\n\t\t\t\t\tsum += scoreObject(tokens[i], data);\n\t\t\t\t}\n\t\t\t\treturn sum / token_count;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Returns a function that can be used to compare two\n\t * results, for sorting purposes. If no sorting should\n\t * be performed, `null` will be returned.\n\t *\n\t * @param {string|object} search\n\t * @param {object} options\n\t * @return function(a,b)\n\t */\n\tSifter.prototype.getSortFunction = function(search, options) {\n\t\tvar i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort;\n\n\t\tself   = this;\n\t\tsearch = self.prepareSearch(search, options);\n\t\tsort   = (!search.query && options.sort_empty) || options.sort;\n\n\t\t/**\n\t\t * Fetches the specified sort field value\n\t\t * from a search result item.\n\t\t *\n\t\t * @param  {string} name\n\t\t * @param  {object} result\n\t\t * @return {mixed}\n\t\t */\n\t\tget_field = function(name, result) {\n\t\t\tif (name === '$score') return result.score;\n\t\t\treturn getattr(self.items[result.id], name, options.nesting);\n\t\t};\n\n\t\t// parse options\n\t\tfields = [];\n\t\tif (sort) {\n\t\t\tfor (i = 0, n = sort.length; i < n; i++) {\n\t\t\t\tif (search.query || sort[i].field !== '$score') {\n\t\t\t\t\tfields.push(sort[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// the \"$score\" field is implied to be the primary\n\t\t// sort field, unless it's manually specified\n\t\tif (search.query) {\n\t\t\timplicit_score = true;\n\t\t\tfor (i = 0, n = fields.length; i < n; i++) {\n\t\t\t\tif (fields[i].field === '$score') {\n\t\t\t\t\timplicit_score = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (implicit_score) {\n\t\t\t\tfields.unshift({field: '$score', direction: 'desc'});\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0, n = fields.length; i < n; i++) {\n\t\t\t\tif (fields[i].field === '$score') {\n\t\t\t\t\tfields.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmultipliers = [];\n\t\tfor (i = 0, n = fields.length; i < n; i++) {\n\t\t\tmultipliers.push(fields[i].direction === 'desc' ? -1 : 1);\n\t\t}\n\n\t\t// build function\n\t\tfields_count = fields.length;\n\t\tif (!fields_count) {\n\t\t\treturn null;\n\t\t} else if (fields_count === 1) {\n\t\t\tfield = fields[0].field;\n\t\t\tmultiplier = multipliers[0];\n\t\t\treturn function(a, b) {\n\t\t\t\treturn multiplier * cmp(\n\t\t\t\t\tget_field(field, a),\n\t\t\t\t\tget_field(field, b)\n\t\t\t\t);\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(a, b) {\n\t\t\t\tvar i, result, a_value, b_value, field;\n\t\t\t\tfor (i = 0; i < fields_count; i++) {\n\t\t\t\t\tfield = fields[i].field;\n\t\t\t\t\tresult = multipliers[i] * cmp(\n\t\t\t\t\t\tget_field(field, a),\n\t\t\t\t\t\tget_field(field, b)\n\t\t\t\t\t);\n\t\t\t\t\tif (result) return result;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t};\n\t\t}\n\t};\n\n\t/**\n\t * Parses a search query and returns an object\n\t * with tokens and fields ready to be populated\n\t * with results.\n\t *\n\t * @param {string} query\n\t * @param {object} options\n\t * @returns {object}\n\t */\n\tSifter.prototype.prepareSearch = function(query, options) {\n\t\tif (typeof query === 'object') return query;\n\n\t\toptions = extend({}, options);\n\n\t\tvar option_fields     = options.fields;\n\t\tvar option_sort       = options.sort;\n\t\tvar option_sort_empty = options.sort_empty;\n\n\t\tif (option_fields && !is_array(option_fields)) options.fields = [option_fields];\n\t\tif (option_sort && !is_array(option_sort)) options.sort = [option_sort];\n\t\tif (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty];\n\n\t\treturn {\n\t\t\toptions : options,\n\t\t\tquery   : String(query || '').toLowerCase(),\n\t\t\ttokens  : this.tokenize(query),\n\t\t\ttotal   : 0,\n\t\t\titems   : []\n\t\t};\n\t};\n\n\t/**\n\t * Searches through all items and returns a sorted array of matches.\n\t *\n\t * The `options` parameter can contain:\n\t *\n\t *   - fields {string|array}\n\t *   - sort {array}\n\t *   - score {function}\n\t *   - filter {bool}\n\t *   - limit {integer}\n\t *\n\t * Returns an object containing:\n\t *\n\t *   - options {object}\n\t *   - query {string}\n\t *   - tokens {array}\n\t *   - total {int}\n\t *   - items {array}\n\t *\n\t * @param {string} query\n\t * @param {object} options\n\t * @returns {object}\n\t */\n\tSifter.prototype.search = function(query, options) {\n\t\tvar self = this, value, score, search, calculateScore;\n\t\tvar fn_sort;\n\t\tvar fn_score;\n\n\t\tsearch  = this.prepareSearch(query, options);\n\t\toptions = search.options;\n\t\tquery   = search.query;\n\n\t\t// generate result scoring function\n\t\tfn_score = options.score || self.getScoreFunction(search);\n\n\t\t// perform search and sort\n\t\tif (query.length) {\n\t\t\tself.iterator(self.items, function(item, id) {\n\t\t\t\tscore = fn_score(item);\n\t\t\t\tif (options.filter === false || score > 0) {\n\t\t\t\t\tsearch.items.push({'score': score, 'id': id});\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tself.iterator(self.items, function(item, id) {\n\t\t\t\tsearch.items.push({'score': 1, 'id': id});\n\t\t\t});\n\t\t}\n\n\t\tfn_sort = self.getSortFunction(search, options);\n\t\tif (fn_sort) search.items.sort(fn_sort);\n\n\t\t// apply limits\n\t\tsearch.total = search.items.length;\n\t\tif (typeof options.limit === 'number') {\n\t\t\tsearch.items = search.items.slice(0, options.limit);\n\t\t}\n\n\t\treturn search;\n\t};\n\n\t// utilities\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\tvar cmp = function(a, b) {\n\t\tif (typeof a === 'number' && typeof b === 'number') {\n\t\t\treturn a > b ? 1 : (a < b ? -1 : 0);\n\t\t}\n\t\ta = asciifold(String(a || ''));\n\t\tb = asciifold(String(b || ''));\n\t\tif (a > b) return 1;\n\t\tif (b > a) return -1;\n\t\treturn 0;\n\t};\n\n\tvar extend = function(a, b) {\n\t\tvar i, n, k, object;\n\t\tfor (i = 1, n = arguments.length; i < n; i++) {\n\t\t\tobject = arguments[i];\n\t\t\tif (!object) continue;\n\t\t\tfor (k in object) {\n\t\t\t\tif (object.hasOwnProperty(k)) {\n\t\t\t\t\ta[k] = object[k];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn a;\n\t};\n\n\t/**\n\t * A property getter resolving dot-notation\n\t * @param  {Object}  obj     The root object to fetch property on\n\t * @param  {String}  name    The optionally dotted property name to fetch\n\t * @param  {Boolean} nesting Handle nesting or not\n\t * @return {Object}          The resolved property value\n\t */\n\tvar getattr = function(obj, name, nesting) {\n\t    if (!obj || !name) return;\n\t    if (!nesting) return obj[name];\n\t    var names = name.split(\".\");\n\t    while(names.length && (obj = obj[names.shift()]));\n\t    return obj;\n\t};\n\n\tvar trim = function(str) {\n\t\treturn (str + '').replace(/^\\s+|\\s+$|/g, '');\n\t};\n\n\tvar escape_regex = function(str) {\n\t\treturn (str + '').replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n\t};\n\n\tvar is_array = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function(object) {\n\t\treturn Object.prototype.toString.call(object) === '[object Array]';\n\t};\n\n\tvar DIACRITICS = {\n\t\t'a': '[a\u1E00\u1E01\u0102\u0103\u00C2\u00E2\u01CD\u01CE\u023A\u2C65\u0226\u0227\u1EA0\u1EA1\u00C4\u00E4\u00C0\u00E0\u00C1\u00E1\u0100\u0101\u00C3\u00E3\u00C5\u00E5\u0105\u0104\u00C3\u0105\u0104]',\n\t\t'b': '[b\u2422\u03B2\u0392B\u0E3F\uD800\uDF01\u16D2]',\n\t\t'c': '[c\u0106\u0107\u0108\u0109\u010C\u010D\u010A\u010BC\u0304c\u0304\u00C7\u00E7\u1E08\u1E09\u023B\u023C\u0187\u0188\u0255\u1D04\uFF23\uFF43]',\n\t\t'd': '[d\u010E\u010F\u1E0A\u1E0B\u1E10\u1E11\u1E0C\u1E0D\u1E12\u1E13\u1E0E\u1E0F\u0110\u0111D\u0326d\u0326\u0189\u0256\u018A\u0257\u018B\u018C\u1D6D\u1D81\u1D91\u0221\u1D05\uFF24\uFF44\u00F0]',\n\t\t'e': '[e\u00C9\u00E9\u00C8\u00E8\u00CA\u00EA\u1E18\u1E19\u011A\u011B\u0114\u0115\u1EBC\u1EBD\u1E1A\u1E1B\u1EBA\u1EBB\u0116\u0117\u00CB\u00EB\u0112\u0113\u0228\u0229\u0118\u0119\u1D92\u0246\u0247\u0204\u0205\u1EBE\u1EBF\u1EC0\u1EC1\u1EC4\u1EC5\u1EC2\u1EC3\u1E1C\u1E1D\u1E16\u1E17\u1E14\u1E15\u0206\u0207\u1EB8\u1EB9\u1EC6\u1EC7\u2C78\u1D07\uFF25\uFF45\u0258\u01DD\u018F\u0190\u03B5]',\n\t\t'f': '[f\u0191\u0192\u1E1E\u1E1F]',\n\t\t'g': '[g\u0262\u20B2\u01E4\u01E5\u011C\u011D\u011E\u011F\u0122\u0123\u0193\u0260\u0120\u0121]',\n\t\t'h': '[h\u0124\u0125\u0126\u0127\u1E28\u1E29\u1E96\u1E96\u1E24\u1E25\u1E22\u1E23\u0266\u02B0\u01F6\u0195]',\n\t\t'i': '[i\u00CD\u00ED\u00CC\u00EC\u012C\u012D\u00CE\u00EE\u01CF\u01D0\u00CF\u00EF\u1E2E\u1E2F\u0128\u0129\u012E\u012F\u012A\u012B\u1EC8\u1EC9\u0208\u0209\u020A\u020B\u1ECA\u1ECB\u1E2C\u1E2D\u0197\u0268\u0268\u0306\u1D7B\u1D96\u0130iI\u0131\u026A\uFF29\uFF49]',\n\t\t'j': '[j\u0237\u0134\u0135\u0248\u0249\u029D\u025F\u02B2]',\n\t\t'k': '[k\u0198\u0199\uA740\uA741\u1E30\u1E31\u01E8\u01E9\u1E32\u1E33\u1E34\u1E35\u03BA\u03F0\u20AD]',\n\t\t'l': '[l\u0141\u0142\u013D\u013E\u013B\u013C\u0139\u013A\u1E36\u1E37\u1E38\u1E39\u1E3C\u1E3D\u1E3A\u1E3B\u013F\u0140\u023D\u019A\u2C60\u2C61\u2C62\u026B\u026C\u1D85\u026D\u0234\u029F\uFF2C\uFF4C]',\n\t\t'n': '[n\u0143\u0144\u01F8\u01F9\u0147\u0148\u00D1\u00F1\u1E44\u1E45\u0145\u0146\u1E46\u1E47\u1E4A\u1E4B\u1E48\u1E49N\u0308n\u0308\u019D\u0272\u0220\u019E\u1D70\u1D87\u0273\u0235\u0274\uFF2E\uFF4E\u014A\u014B]',\n\t\t'o': '[o\u00D8\u00F8\u00D6\u00F6\u00D3\u00F3\u00D2\u00F2\u00D4\u00F4\u01D1\u01D2\u0150\u0151\u014E\u014F\u022E\u022F\u1ECC\u1ECD\u019F\u0275\u01A0\u01A1\u1ECE\u1ECF\u014C\u014D\u00D5\u00F5\u01EA\u01EB\u020C\u020D\u0555\u0585]',\n\t\t'p': '[p\u1E54\u1E55\u1E56\u1E57\u2C63\u1D7D\u01A4\u01A5\u1D71]',\n\t\t'q': '[q\uA756\uA757\u02A0\u024A\u024B\uA758\uA759q\u0303]',\n\t\t'r': '[r\u0154\u0155\u024C\u024D\u0158\u0159\u0156\u0157\u1E58\u1E59\u0210\u0211\u0212\u0213\u1E5A\u1E5B\u2C64\u027D]',\n\t\t's': '[s\u015A\u015B\u1E60\u1E61\u1E62\u1E63\uA7A8\uA7A9\u015C\u015D\u0160\u0161\u015E\u015F\u0218\u0219S\u0308s\u0308]',\n\t\t't': '[t\u0164\u0165\u1E6A\u1E6B\u0162\u0163\u1E6C\u1E6D\u01AE\u0288\u021A\u021B\u1E70\u1E71\u1E6E\u1E6F\u01AC\u01AD]',\n\t\t'u': '[u\u016C\u016D\u0244\u0289\u1EE4\u1EE5\u00DC\u00FC\u00DA\u00FA\u00D9\u00F9\u00DB\u00FB\u01D3\u01D4\u0170\u0171\u016C\u016D\u01AF\u01B0\u1EE6\u1EE7\u016A\u016B\u0168\u0169\u0172\u0173\u0214\u0215\u222A]',\n\t\t'v': '[v\u1E7C\u1E7D\u1E7E\u1E7F\u01B2\u028B\uA75E\uA75F\u2C71\u028B]',\n\t\t'w': '[w\u1E82\u1E83\u1E80\u1E81\u0174\u0175\u1E84\u1E85\u1E86\u1E87\u1E88\u1E89]',\n\t\t'x': '[x\u1E8C\u1E8D\u1E8A\u1E8B\u03C7]',\n\t\t'y': '[y\u00DD\u00FD\u1EF2\u1EF3\u0176\u0177\u0178\u00FF\u1EF8\u1EF9\u1E8E\u1E8F\u1EF4\u1EF5\u024E\u024F\u01B3\u01B4]',\n\t\t'z': '[z\u0179\u017A\u1E90\u1E91\u017D\u017E\u017B\u017C\u1E92\u1E93\u1E94\u1E95\u01B5\u01B6]'\n\t};\n\n\tvar asciifold = (function() {\n\t\tvar i, n, k, chunk;\n\t\tvar foreignletters = '';\n\t\tvar lookup = {};\n\t\tfor (k in DIACRITICS) {\n\t\t\tif (DIACRITICS.hasOwnProperty(k)) {\n\t\t\t\tchunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);\n\t\t\t\tforeignletters += chunk;\n\t\t\t\tfor (i = 0, n = chunk.length; i < n; i++) {\n\t\t\t\t\tlookup[chunk.charAt(i)] = k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar regexp = new RegExp('[' +  foreignletters + ']', 'g');\n\t\treturn function(str) {\n\t\t\treturn str.replace(regexp, function(foreignletter) {\n\t\t\t\treturn lookup[foreignletter];\n\t\t\t}).toLowerCase();\n\t\t};\n\t})();\n\n\n\t// export\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n\treturn Sifter;\n}));\n\n", "/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n(function(root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.MicroPlugin = factory();\n\t}\n}(this, function() {\n\tvar MicroPlugin = {};\n\n\tMicroPlugin.mixin = function(Interface) {\n\t\tInterface.plugins = {};\n\n\t\t/**\n\t\t * Initializes the listed plugins (with options).\n\t\t * Acceptable formats:\n\t\t *\n\t\t * List (without options):\n\t\t *   ['a', 'b', 'c']\n\t\t *\n\t\t * List (with options):\n\t\t *   [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n\t\t *\n\t\t * Hash (with options):\n\t\t *   {'a': { ... }, 'b': { ... }, 'c': { ... }}\n\t\t *\n\t\t * @param {mixed} plugins\n\t\t */\n\t\tInterface.prototype.initializePlugins = function(plugins) {\n\t\t\tvar i, n, key;\n\t\t\tvar self  = this;\n\t\t\tvar queue = [];\n\n\t\t\tself.plugins = {\n\t\t\t\tnames     : [],\n\t\t\t\tsettings  : {},\n\t\t\t\trequested : {},\n\t\t\t\tloaded    : {}\n\t\t\t};\n\n\t\t\tif (utils.isArray(plugins)) {\n\t\t\t\tfor (i = 0, n = plugins.length; i < n; i++) {\n\t\t\t\t\tif (typeof plugins[i] === 'string') {\n\t\t\t\t\t\tqueue.push(plugins[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.plugins.settings[plugins[i].name] = plugins[i].options;\n\t\t\t\t\t\tqueue.push(plugins[i].name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (plugins) {\n\t\t\t\tfor (key in plugins) {\n\t\t\t\t\tif (plugins.hasOwnProperty(key)) {\n\t\t\t\t\t\tself.plugins.settings[key] = plugins[key];\n\t\t\t\t\t\tqueue.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twhile (queue.length) {\n\t\t\t\tself.require(queue.shift());\n\t\t\t}\n\t\t};\n\n\t\tInterface.prototype.loadPlugin = function(name) {\n\t\t\tvar self    = this;\n\t\t\tvar plugins = self.plugins;\n\t\t\tvar plugin  = Interface.plugins[name];\n\n\t\t\tif (!Interface.plugins.hasOwnProperty(name)) {\n\t\t\t\tthrow new Error('Unable to find \"' +  name + '\" plugin');\n\t\t\t}\n\n\t\t\tplugins.requested[name] = true;\n\t\t\tplugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n\t\t\tplugins.names.push(name);\n\t\t};\n\n\t\t/**\n\t\t * Initializes a plugin.\n\t\t *\n\t\t * @param {string} name\n\t\t */\n\t\tInterface.prototype.require = function(name) {\n\t\t\tvar self = this;\n\t\t\tvar plugins = self.plugins;\n\n\t\t\tif (!self.plugins.loaded.hasOwnProperty(name)) {\n\t\t\t\tif (plugins.requested[name]) {\n\t\t\t\t\tthrow new Error('Plugin has circular dependency (\"' + name + '\")');\n\t\t\t\t}\n\t\t\t\tself.loadPlugin(name);\n\t\t\t}\n\n\t\t\treturn plugins.loaded[name];\n\t\t};\n\n\t\t/**\n\t\t * Registers a plugin.\n\t\t *\n\t\t * @param {string} name\n\t\t * @param {function} fn\n\t\t */\n\t\tInterface.define = function(name, fn) {\n\t\t\tInterface.plugins[name] = {\n\t\t\t\t'name' : name,\n\t\t\t\t'fn'   : fn\n\t\t\t};\n\t\t};\n\t};\n\n\tvar utils = {\n\t\tisArray: Array.isArray || function(vArg) {\n\t\t\treturn Object.prototype.toString.call(vArg) === '[object Array]';\n\t\t}\n\t};\n\n\treturn MicroPlugin;\n}));", "/**\n * selectize.js (v0.12.6)\n * Copyright (c) 2013\u20132015 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. 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 under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\n/*jshint curly:false */\n/*jshint browser:true */\n\n(function(root, factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(['jquery','sifter','microplugin'], factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory(require('jquery'), require('sifter'), require('microplugin'));\n\t} else {\n\t\troot.Selectize = factory(root.jQuery, root.Sifter, root.MicroPlugin);\n\t}\n}(this, function($, Sifter, MicroPlugin) {\n\t'use strict';\n\n\tvar highlight = function($element, pattern) {\n\t\tif (typeof pattern === 'string' && !pattern.length) return;\n\t\tvar regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern;\n\t\n\t\tvar highlight = function(node) {\n\t\t\tvar skip = 0;\n\t\t\t// Wrap matching part of text node with highlighting <span>, e.g.\n\t\t\t// Soccer  ->  <span class=\"highlight\">Soc</span>cer  for regex = /soc/i\n\t\t\tif (node.nodeType === 3) {\n\t\t\t\tvar pos = node.data.search(regex);\n\t\t\t\tif (pos >= 0 && node.data.length > 0) {\n\t\t\t\t\tvar match = node.data.match(regex);\n\t\t\t\t\tvar spannode = document.createElement('span');\n\t\t\t\t\tspannode.className = 'highlight';\n\t\t\t\t\tvar middlebit = node.splitText(pos);\n\t\t\t\t\tvar endbit = middlebit.splitText(match[0].length);\n\t\t\t\t\tvar middleclone = middlebit.cloneNode(true);\n\t\t\t\t\tspannode.appendChild(middleclone);\n\t\t\t\t\tmiddlebit.parentNode.replaceChild(spannode, middlebit);\n\t\t\t\t\tskip = 1;\n\t\t\t\t}\n\t\t\t} \n\t\t\t// Recurse element node, looking for child text nodes to highlight, unless element \n\t\t\t// is childless, <script>, <style>, or already highlighted: <span class=\"hightlight\">\n\t\t\telse if (node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && ( node.className !== 'highlight' || node.tagName !== 'SPAN' )) {\n\t\t\t\tfor (var i = 0; i < node.childNodes.length; ++i) {\n\t\t\t\t\ti += highlight(node.childNodes[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn skip;\n\t\t};\n\t\n\t\treturn $element.each(function() {\n\t\t\thighlight(this);\n\t\t});\n\t};\n\t\n\t/**\n\t * removeHighlight fn copied from highlight v5 and\n\t * edited to remove with() and pass js strict mode\n\t */\n\t$.fn.removeHighlight = function() {\n\t\treturn this.find(\"span.highlight\").each(function() {\n\t\t\tthis.parentNode.firstChild.nodeName;\n\t\t\tvar parent = this.parentNode;\n\t\t\tparent.replaceChild(this.firstChild, this);\n\t\t\tparent.normalize();\n\t\t}).end();\n\t};\n\t\n\t\n\tvar MicroEvent = function() {};\n\tMicroEvent.prototype = {\n\t\ton: function(event, fct){\n\t\t\tthis._events = this._events || {};\n\t\t\tthis._events[event] = this._events[event] || [];\n\t\t\tthis._events[event].push(fct);\n\t\t},\n\t\toff: function(event, fct){\n\t\t\tvar n = arguments.length;\n\t\t\tif (n === 0) return delete this._events;\n\t\t\tif (n === 1) return delete this._events[event];\n\t\n\t\t\tthis._events = this._events || {};\n\t\t\tif (event in this._events === false) return;\n\t\t\tthis._events[event].splice(this._events[event].indexOf(fct), 1);\n\t\t},\n\t\ttrigger: function(event /* , args... */){\n\t\t\tthis._events = this._events || {};\n\t\t\tif (event in this._events === false) return;\n\t\t\tfor (var i = 0; i < this._events[event].length; i++){\n\t\t\t\tthis._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));\n\t\t\t}\n\t\t}\n\t};\n\t\n\t/**\n\t * Mixin will delegate all MicroEvent.js function in the destination object.\n\t *\n\t * - MicroEvent.mixin(Foobar) will make Foobar able to use MicroEvent\n\t *\n\t * @param {object} the object which will support MicroEvent\n\t */\n\tMicroEvent.mixin = function(destObject){\n\t\tvar props = ['on', 'off', 'trigger'];\n\t\tfor (var i = 0; i < props.length; i++){\n\t\t\tdestObject.prototype[props[i]] = MicroEvent.prototype[props[i]];\n\t\t}\n\t};\n\t\n\tvar IS_MAC        = /Mac/.test(navigator.userAgent);\n\t\n\tvar KEY_A         = 65;\n\tvar KEY_COMMA     = 188;\n\tvar KEY_RETURN    = 13;\n\tvar KEY_ESC       = 27;\n\tvar KEY_LEFT      = 37;\n\tvar KEY_UP        = 38;\n\tvar KEY_P         = 80;\n\tvar KEY_RIGHT     = 39;\n\tvar KEY_DOWN      = 40;\n\tvar KEY_N         = 78;\n\tvar KEY_BACKSPACE = 8;\n\tvar KEY_DELETE    = 46;\n\tvar KEY_SHIFT     = 16;\n\tvar KEY_CMD       = IS_MAC ? 91 : 17;\n\tvar KEY_CTRL      = IS_MAC ? 18 : 17;\n\tvar KEY_TAB       = 9;\n\t\n\tvar TAG_SELECT    = 1;\n\tvar TAG_INPUT     = 2;\n\t\n\t// for now, android support in general is too spotty to support validity\n\tvar SUPPORTS_VALIDITY_API = !/android/i.test(window.navigator.userAgent) && !!document.createElement('input').validity;\n\t\n\t\n\tvar isset = function(object) {\n\t\treturn typeof object !== 'undefined';\n\t};\n\t\n\t/**\n\t * Converts a scalar to its best string representation\n\t * for hash keys and HTML attribute values.\n\t *\n\t * Transformations:\n\t *   'str'     -> 'str'\n\t *   null      -> ''\n\t *   undefined -> ''\n\t *   true      -> '1'\n\t *   false     -> '0'\n\t *   0         -> '0'\n\t *   1         -> '1'\n\t *\n\t * @param {string} value\n\t * @returns {string|null}\n\t */\n\tvar hash_key = function(value) {\n\t\tif (typeof value === 'undefined' || value === null) return null;\n\t\tif (typeof value === 'boolean') return value ? '1' : '0';\n\t\treturn value + '';\n\t};\n\t\n\t/**\n\t * Escapes a string for use within HTML.\n\t *\n\t * @param {string} str\n\t * @returns {string}\n\t */\n\tvar escape_html = function(str) {\n\t\treturn (str + '')\n\t\t\t.replace(/&/g, '&amp;')\n\t\t\t.replace(/</g, '&lt;')\n\t\t\t.replace(/>/g, '&gt;')\n\t\t\t.replace(/\"/g, '&quot;');\n\t};\n\t\n\t/**\n\t * Escapes \"$\" characters in replacement strings.\n\t *\n\t * @param {string} str\n\t * @returns {string}\n\t */\n\tvar escape_replace = function(str) {\n\t\treturn (str + '').replace(/\\$/g, '$$$$');\n\t};\n\t\n\tvar hook = {};\n\t\n\t/**\n\t * Wraps `method` on `self` so that `fn`\n\t * is invoked before the original method.\n\t *\n\t * @param {object} self\n\t * @param {string} method\n\t * @param {function} fn\n\t */\n\thook.before = function(self, method, fn) {\n\t\tvar original = self[method];\n\t\tself[method] = function() {\n\t\t\tfn.apply(self, arguments);\n\t\t\treturn original.apply(self, arguments);\n\t\t};\n\t};\n\t\n\t/**\n\t * Wraps `method` on `self` so that `fn`\n\t * is invoked after the original method.\n\t *\n\t * @param {object} self\n\t * @param {string} method\n\t * @param {function} fn\n\t */\n\thook.after = function(self, method, fn) {\n\t\tvar original = self[method];\n\t\tself[method] = function() {\n\t\t\tvar result = original.apply(self, arguments);\n\t\t\tfn.apply(self, arguments);\n\t\t\treturn result;\n\t\t};\n\t};\n\t\n\t/**\n\t * Wraps `fn` so that it can only be invoked once.\n\t *\n\t * @param {function} fn\n\t * @returns {function}\n\t */\n\tvar once = function(fn) {\n\t\tvar called = false;\n\t\treturn function() {\n\t\t\tif (called) return;\n\t\t\tcalled = true;\n\t\t\tfn.apply(this, arguments);\n\t\t};\n\t};\n\t\n\t/**\n\t * Wraps `fn` so that it can only be called once\n\t * every `delay` milliseconds (invoked on the falling edge).\n\t *\n\t * @param {function} fn\n\t * @param {int} delay\n\t * @returns {function}\n\t */\n\tvar debounce = function(fn, delay) {\n\t\tvar timeout;\n\t\treturn function() {\n\t\t\tvar self = this;\n\t\t\tvar args = arguments;\n\t\t\twindow.clearTimeout(timeout);\n\t\t\ttimeout = window.setTimeout(function() {\n\t\t\t\tfn.apply(self, args);\n\t\t\t}, delay);\n\t\t};\n\t};\n\t\n\t/**\n\t * Debounce all fired events types listed in `types`\n\t * while executing the provided `fn`.\n\t *\n\t * @param {object} self\n\t * @param {array} types\n\t * @param {function} fn\n\t */\n\tvar debounce_events = function(self, types, fn) {\n\t\tvar type;\n\t\tvar trigger = self.trigger;\n\t\tvar event_args = {};\n\t\n\t\t// override trigger method\n\t\tself.trigger = function() {\n\t\t\tvar type = arguments[0];\n\t\t\tif (types.indexOf(type) !== -1) {\n\t\t\t\tevent_args[type] = arguments;\n\t\t\t} else {\n\t\t\t\treturn trigger.apply(self, arguments);\n\t\t\t}\n\t\t};\n\t\n\t\t// invoke provided function\n\t\tfn.apply(self, []);\n\t\tself.trigger = trigger;\n\t\n\t\t// trigger queued events\n\t\tfor (type in event_args) {\n\t\t\tif (event_args.hasOwnProperty(type)) {\n\t\t\t\ttrigger.apply(self, event_args[type]);\n\t\t\t}\n\t\t}\n\t};\n\t\n\t/**\n\t * A workaround for http://bugs.jquery.com/ticket/6696\n\t *\n\t * @param {object} $parent - Parent element to listen on.\n\t * @param {string} event - Event name.\n\t * @param {string} selector - Descendant selector to filter by.\n\t * @param {function} fn - Event handler.\n\t */\n\tvar watchChildEvent = function($parent, event, selector, fn) {\n\t\t$parent.on(event, selector, function(e) {\n\t\t\tvar child = e.target;\n\t\t\twhile (child && child.parentNode !== $parent[0]) {\n\t\t\t\tchild = child.parentNode;\n\t\t\t}\n\t\t\te.currentTarget = child;\n\t\t\treturn fn.apply(this, [e]);\n\t\t});\n\t};\n\t\n\t/**\n\t * Determines the current selection within a text input control.\n\t * Returns an object containing:\n\t *   - start\n\t *   - length\n\t *\n\t * @param {object} input\n\t * @returns {object}\n\t */\n\tvar getSelection = function(input) {\n\t\tvar result = {};\n\t\tif ('selectionStart' in input) {\n\t\t\tresult.start = input.selectionStart;\n\t\t\tresult.length = input.selectionEnd - result.start;\n\t\t} else if (document.selection) {\n\t\t\tinput.focus();\n\t\t\tvar sel = document.selection.createRange();\n\t\t\tvar selLen = document.selection.createRange().text.length;\n\t\t\tsel.moveStart('character', -input.value.length);\n\t\t\tresult.start = sel.text.length - selLen;\n\t\t\tresult.length = selLen;\n\t\t}\n\t\treturn result;\n\t};\n\t\n\t/**\n\t * Copies CSS properties from one element to another.\n\t *\n\t * @param {object} $from\n\t * @param {object} $to\n\t * @param {array} properties\n\t */\n\tvar transferStyles = function($from, $to, properties) {\n\t\tvar i, n, styles = {};\n\t\tif (properties) {\n\t\t\tfor (i = 0, n = properties.length; i < n; i++) {\n\t\t\t\tstyles[properties[i]] = $from.css(properties[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tstyles = $from.css();\n\t\t}\n\t\t$to.css(styles);\n\t};\n\t\n\t/**\n\t * Measures the width of a string within a\n\t * parent element (in pixels).\n\t *\n\t * @param {string} str\n\t * @param {object} $parent\n\t * @returns {int}\n\t */\n\tvar measureString = function(str, $parent) {\n\t\tif (!str) {\n\t\t\treturn 0;\n\t\t}\n\t\n\t\tif (!Selectize.$testInput) {\n\t\t\tSelectize.$testInput = $('<span />').css({\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: -99999,\n\t\t\t\tleft: -99999,\n\t\t\t\twidth: 'auto',\n\t\t\t\tpadding: 0,\n\t\t\t\twhiteSpace: 'pre'\n\t\t\t}).appendTo('body');\n\t\t}\n\t\n\t\tSelectize.$testInput.text(str);\n\t\n\t\ttransferStyles($parent, Selectize.$testInput, [\n\t\t\t'letterSpacing',\n\t\t\t'fontSize',\n\t\t\t'fontFamily',\n\t\t\t'fontWeight',\n\t\t\t'textTransform'\n\t\t]);\n\t\n\t\treturn Selectize.$testInput.width();\n\t};\n\t\n\t/**\n\t * Sets up an input to grow horizontally as the user\n\t * types. If the value is changed manually, you can\n\t * trigger the \"update\" handler to resize:\n\t *\n\t * $input.trigger('update');\n\t *\n\t * @param {object} $input\n\t */\n\tvar autoGrow = function($input) {\n\t\tvar currentWidth = null;\n\t\n\t\tvar update = function(e, options) {\n\t\t\tvar value, keyCode, printable, placeholder, width;\n\t\t\tvar shift, character, selection;\n\t\t\te = e || window.event || {};\n\t\t\toptions = options || {};\n\t\n\t\t\tif (e.metaKey || e.altKey) return;\n\t\t\tif (!options.force && $input.data('grow') === false) return;\n\t\n\t\t\tvalue = $input.val();\n\t\t\tif (e.type && e.type.toLowerCase() === 'keydown') {\n\t\t\t\tkeyCode = e.keyCode;\n\t\t\t\tprintable = (\n\t\t\t\t\t(keyCode >= 48 && keyCode <= 57)  || // 0-9\n\t\t\t\t\t(keyCode >= 65 && keyCode <= 90)   || // a-z\n\t\t\t\t\t(keyCode >= 96 && keyCode <= 111)  || // numpad 0-9, numeric operators\n\t\t\t\t\t(keyCode >= 186 && keyCode <= 222) || // semicolon, equal, comma, dash, etc.\n\t\t\t\t\tkeyCode === 32 // space\n\t\t\t\t);\n\t\n\t\t\t\tif (keyCode === KEY_DELETE || keyCode === KEY_BACKSPACE) {\n\t\t\t\t\tselection = getSelection($input[0]);\n\t\t\t\t\tif (selection.length) {\n\t\t\t\t\t\tvalue = value.substring(0, selection.start) + value.substring(selection.start + selection.length);\n\t\t\t\t\t} else if (keyCode === KEY_BACKSPACE && selection.start) {\n\t\t\t\t\t\tvalue = value.substring(0, selection.start - 1) + value.substring(selection.start + 1);\n\t\t\t\t\t} else if (keyCode === KEY_DELETE && typeof selection.start !== 'undefined') {\n\t\t\t\t\t\tvalue = value.substring(0, selection.start) + value.substring(selection.start + 1);\n\t\t\t\t\t}\n\t\t\t\t} else if (printable) {\n\t\t\t\t\tshift = e.shiftKey;\n\t\t\t\t\tcharacter = String.fromCharCode(e.keyCode);\n\t\t\t\t\tif (shift) character = character.toUpperCase();\n\t\t\t\t\telse character = character.toLowerCase();\n\t\t\t\t\tvalue += character;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tplaceholder = $input.attr('placeholder');\n\t\t\tif (!value && placeholder) {\n\t\t\t\tvalue = placeholder;\n\t\t\t}\n\t\n\t\t\twidth = measureString(value, $input) + 4;\n\t\t\tif (width !== currentWidth) {\n\t\t\t\tcurrentWidth = width;\n\t\t\t\t$input.width(width);\n\t\t\t\t$input.triggerHandler('resize');\n\t\t\t}\n\t\t};\n\t\n\t\t$input.on('keydown keyup update blur', update);\n\t\tupdate();\n\t};\n\t\n\tvar domToString = function(d) {\n\t\tvar tmp = document.createElement('div');\n\t\n\t\ttmp.appendChild(d.cloneNode(true));\n\t\n\t\treturn tmp.innerHTML;\n\t};\n\t\n\tvar logError = function(message, options){\n\t\tif(!options) options = {};\n\t\tvar component = \"Selectize\";\n\t\n\t\tconsole.error(component + \": \" + message)\n\t\n\t\tif(options.explanation){\n\t\t\t// console.group is undefined in <IE11\n\t\t\tif(console.group) console.group();\n\t\t\tconsole.error(options.explanation);\n\t\t\tif(console.group) console.groupEnd();\n\t\t}\n\t}\n\t\n\t\n\tvar Selectize = function($input, settings) {\n\t\tvar key, i, n, dir, input, self = this;\n\t\tinput = $input[0];\n\t\tinput.selectize = self;\n\t\n\t\t// detect rtl environment\n\t\tvar computedStyle = window.getComputedStyle && window.getComputedStyle(input, null);\n\t\tdir = computedStyle ? computedStyle.getPropertyValue('direction') : input.currentStyle && input.currentStyle.direction;\n\t\tdir = dir || $input.parents('[dir]:first').attr('dir') || '';\n\t\n\t\t// setup default state\n\t\t$.extend(self, {\n\t\t\torder            : 0,\n\t\t\tsettings         : settings,\n\t\t\t$input           : $input,\n\t\t\ttabIndex         : $input.attr('tabindex') || '',\n\t\t\ttagType          : input.tagName.toLowerCase() === 'select' ? TAG_SELECT : TAG_INPUT,\n\t\t\trtl              : /rtl/i.test(dir),\n\t\n\t\t\teventNS          : '.selectize' + (++Selectize.count),\n\t\t\thighlightedValue : null,\n\t\t\tisBlurring       : false,\n\t\t\tisOpen           : false,\n\t\t\tisDisabled       : false,\n\t\t\tisRequired       : $input.is('[required]'),\n\t\t\tisInvalid        : false,\n\t\t\tisLocked         : false,\n\t\t\tisFocused        : false,\n\t\t\tisInputHidden    : false,\n\t\t\tisSetup          : false,\n\t\t\tisShiftDown      : false,\n\t\t\tisCmdDown        : false,\n\t\t\tisCtrlDown       : false,\n\t\t\tignoreFocus      : false,\n\t\t\tignoreBlur       : false,\n\t\t\tignoreHover      : false,\n\t\t\thasOptions       : false,\n\t\t\tcurrentResults   : null,\n\t\t\tlastValue        : '',\n\t\t\tcaretPos         : 0,\n\t\t\tloading          : 0,\n\t\t\tloadedSearches   : {},\n\t\n\t\t\t$activeOption    : null,\n\t\t\t$activeItems     : [],\n\t\n\t\t\toptgroups        : {},\n\t\t\toptions          : {},\n\t\t\tuserOptions      : {},\n\t\t\titems            : [],\n\t\t\trenderCache      : {},\n\t\t\tonSearchChange   : settings.loadThrottle === null ? self.onSearchChange : debounce(self.onSearchChange, settings.loadThrottle)\n\t\t});\n\t\n\t\t// search system\n\t\tself.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\t\n\t\t// build options table\n\t\tif (self.settings.options) {\n\t\t\tfor (i = 0, n = self.settings.options.length; i < n; i++) {\n\t\t\t\tself.registerOption(self.settings.options[i]);\n\t\t\t}\n\t\t\tdelete self.settings.options;\n\t\t}\n\t\n\t\t// build optgroup table\n\t\tif (self.settings.optgroups) {\n\t\t\tfor (i = 0, n = self.settings.optgroups.length; i < n; i++) {\n\t\t\t\tself.registerOptionGroup(self.settings.optgroups[i]);\n\t\t\t}\n\t\t\tdelete self.settings.optgroups;\n\t\t}\n\t\n\t\t// option-dependent defaults\n\t\tself.settings.mode = self.settings.mode || (self.settings.maxItems === 1 ? 'single' : 'multi');\n\t\tif (typeof self.settings.hideSelected !== 'boolean') {\n\t\t\tself.settings.hideSelected = self.settings.mode === 'multi';\n\t\t}\n\t\n\t\tself.initializePlugins(self.settings.plugins);\n\t\tself.setupCallbacks();\n\t\tself.setupTemplates();\n\t\tself.setup();\n\t};\n\t\n\t// mixins\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\t\n\tMicroEvent.mixin(Selectize);\n\t\n\tif(typeof MicroPlugin !== \"undefined\"){\n\t\tMicroPlugin.mixin(Selectize);\n\t}else{\n\t\tlogError(\"Dependency MicroPlugin is missing\",\n\t\t\t{explanation:\n\t\t\t\t\"Make sure you either: (1) are using the \\\"standalone\\\" \"+\n\t\t\t\t\"version of Selectize, or (2) require MicroPlugin before you \"+\n\t\t\t\t\"load Selectize.\"}\n\t\t);\n\t}\n\t\n\t\n\t// methods\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\t\n\t$.extend(Selectize.prototype, {\n\t\n\t\t/**\n\t\t * Creates all elements and sets up event bindings.\n\t\t */\n\t\tsetup: function() {\n\t\t\tvar self      = this;\n\t\t\tvar settings  = self.settings;\n\t\t\tvar eventNS   = self.eventNS;\n\t\t\tvar $window   = $(window);\n\t\t\tvar $document = $(document);\n\t\t\tvar $input    = self.$input;\n\t\n\t\t\tvar $wrapper;\n\t\t\tvar $control;\n\t\t\tvar $control_input;\n\t\t\tvar $dropdown;\n\t\t\tvar $dropdown_content;\n\t\t\tvar $dropdown_parent;\n\t\t\tvar inputMode;\n\t\t\tvar timeout_blur;\n\t\t\tvar timeout_focus;\n\t\t\tvar classes;\n\t\t\tvar classes_plugins;\n\t\t\tvar inputId;\n\t\n\t\t\tinputMode         = self.settings.mode;\n\t\t\tclasses           = $input.attr('class') || '';\n\t\n\t\t\t$wrapper          = $('<div>').addClass(settings.wrapperClass).addClass(classes).addClass(inputMode);\n\t\t\t$control          = $('<div>').addClass(settings.inputClass).addClass('items').appendTo($wrapper);\n\t\t\t$control_input    = $('<input type=\"text\" autocomplete=\"off\" />').appendTo($control).attr('tabindex', $input.is(':disabled') ? '-1' : self.tabIndex);\n\t\t\t$dropdown_parent  = $(settings.dropdownParent || $wrapper);\n\t\t\t$dropdown         = $('<div>').addClass(settings.dropdownClass).addClass(inputMode).hide().appendTo($dropdown_parent);\n\t\t\t$dropdown_content = $('<div>').addClass(settings.dropdownContentClass).appendTo($dropdown);\n\t\n\t\t\tif(inputId = $input.attr('id')) {\n\t\t\t\t$control_input.attr('id', inputId + '-selectized');\n\t\t\t\t$(\"label[for='\"+inputId+\"']\").attr('for', inputId + '-selectized');\n\t\t\t}\n\t\n\t\t\tif(self.settings.copyClassesToDropdown) {\n\t\t\t\t$dropdown.addClass(classes);\n\t\t\t}\n\t\n\t\t\t$wrapper.css({\n\t\t\t\twidth: $input[0].style.width\n\t\t\t});\n\t\n\t\t\tif (self.plugins.names.length) {\n\t\t\t\tclasses_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\t\t$wrapper.addClass(classes_plugins);\n\t\t\t\t$dropdown.addClass(classes_plugins);\n\t\t\t}\n\t\n\t\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.tagType === TAG_SELECT) {\n\t\t\t\t$input.attr('multiple', 'multiple');\n\t\t\t}\n\t\n\t\t\tif (self.settings.placeholder) {\n\t\t\t\t$control_input.attr('placeholder', settings.placeholder);\n\t\t\t}\n\t\n\t\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\t\tif (!self.settings.splitOn && self.settings.delimiter) {\n\t\t\t\tvar delimiterEscaped = self.settings.delimiter.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\t\tself.settings.splitOn = new RegExp('\\\\s*' + delimiterEscaped + '+\\\\s*');\n\t\t\t}\n\t\n\t\t\tif ($input.attr('autocorrect')) {\n\t\t\t\t$control_input.attr('autocorrect', $input.attr('autocorrect'));\n\t\t\t}\n\t\n\t\t\tif ($input.attr('autocapitalize')) {\n\t\t\t\t$control_input.attr('autocapitalize', $input.attr('autocapitalize'));\n\t\t\t}\n\t\t\t$control_input[0].type = $input[0].type;\n\t\n\t\t\tself.$wrapper          = $wrapper;\n\t\t\tself.$control          = $control;\n\t\t\tself.$control_input    = $control_input;\n\t\t\tself.$dropdown         = $dropdown;\n\t\t\tself.$dropdown_content = $dropdown_content;\n\t\n\t\t\t$dropdown.on('mouseenter mousedown click', '[data-disabled]>[data-selectable]', function(e) { e.stopImmediatePropagation(); });\n\t\t\t$dropdown.on('mouseenter', '[data-selectable]', function() { return self.onOptionHover.apply(self, arguments); });\n\t\t\t$dropdown.on('mousedown click', '[data-selectable]', function() { return self.onOptionSelect.apply(self, arguments); });\n\t\t\twatchChildEvent($control, 'mousedown', '*:not(input)', function() { return self.onItemSelect.apply(self, arguments); });\n\t\t\tautoGrow($control_input);\n\t\n\t\t\t$control.on({\n\t\t\t\tmousedown : function() { return self.onMouseDown.apply(self, arguments); },\n\t\t\t\tclick     : function() { return self.onClick.apply(self, arguments); }\n\t\t\t});\n\t\n\t\t\t$control_input.on({\n\t\t\t\tmousedown : function(e) { e.stopPropagation(); },\n\t\t\t\tkeydown   : function() { return self.onKeyDown.apply(self, arguments); },\n\t\t\t\tkeyup     : function() { return self.onKeyUp.apply(self, arguments); },\n\t\t\t\tkeypress  : function() { return self.onKeyPress.apply(self, arguments); },\n\t\t\t\tresize    : function() { self.positionDropdown.apply(self, []); },\n\t\t\t\tblur      : function() { return self.onBlur.apply(self, arguments); },\n\t\t\t\tfocus     : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); },\n\t\t\t\tpaste     : function() { return self.onPaste.apply(self, arguments); }\n\t\t\t});\n\t\n\t\t\t$document.on('keydown' + eventNS, function(e) {\n\t\t\t\tself.isCmdDown = e[IS_MAC ? 'metaKey' : 'ctrlKey'];\n\t\t\t\tself.isCtrlDown = e[IS_MAC ? 'altKey' : 'ctrlKey'];\n\t\t\t\tself.isShiftDown = e.shiftKey;\n\t\t\t});\n\t\n\t\t\t$document.on('keyup' + eventNS, function(e) {\n\t\t\t\tif (e.keyCode === KEY_CTRL) self.isCtrlDown = false;\n\t\t\t\tif (e.keyCode === KEY_SHIFT) self.isShiftDown = false;\n\t\t\t\tif (e.keyCode === KEY_CMD) self.isCmdDown = false;\n\t\t\t});\n\t\n\t\t\t$document.on('mousedown' + eventNS, function(e) {\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\t// prevent events on the dropdown scrollbar from causing the control to blur\n\t\t\t\t\tif (e.target === self.$dropdown[0] || e.target.parentNode === self.$dropdown[0]) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\t// blur on click outside\n\t\t\t\t\tif (!self.$control.has(e.target).length && e.target !== self.$control[0]) {\n\t\t\t\t\t\tself.blur(e.target);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\n\t\t\t$window.on(['scroll' + eventNS, 'resize' + eventNS].join(' '), function() {\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\tself.positionDropdown.apply(self, arguments);\n\t\t\t\t}\n\t\t\t});\n\t\t\t$window.on('mousemove' + eventNS, function() {\n\t\t\t\tself.ignoreHover = false;\n\t\t\t});\n\t\n\t\t\t// store original children and tab index so that they can be\n\t\t\t// restored when the destroy() method is called.\n\t\t\tthis.revertSettings = {\n\t\t\t\t$children : $input.children().detach(),\n\t\t\t\ttabindex  : $input.attr('tabindex')\n\t\t\t};\n\t\n\t\t\t$input.attr('tabindex', -1).hide().after(self.$wrapper);\n\t\n\t\t\tif ($.isArray(settings.items)) {\n\t\t\t\tself.setValue(settings.items);\n\t\t\t\tdelete settings.items;\n\t\t\t}\n\t\n\t\t\t// feature detect for the validation API\n\t\t\tif (SUPPORTS_VALIDITY_API) {\n\t\t\t\t$input.on('invalid' + eventNS, function(e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tself.isInvalid = true;\n\t\t\t\t\tself.refreshState();\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\tself.updateOriginalInput();\n\t\t\tself.refreshItems();\n\t\t\tself.refreshState();\n\t\t\tself.updatePlaceholder();\n\t\t\tself.isSetup = true;\n\t\n\t\t\tif ($input.is(':disabled')) {\n\t\t\t\tself.disable();\n\t\t\t}\n\t\n\t\t\tself.on('change', this.onChange);\n\t\n\t\t\t$input.data('selectize', self);\n\t\t\t$input.addClass('selectized');\n\t\t\tself.trigger('initialize');\n\t\n\t\t\t// preload options\n\t\t\tif (settings.preload === true) {\n\t\t\t\tself.onSearchChange('');\n\t\t\t}\n\t\n\t\t},\n\t\n\t\t/**\n\t\t * Sets up default rendering functions.\n\t\t */\n\t\tsetupTemplates: function() {\n\t\t\tvar self = this;\n\t\t\tvar field_label = self.settings.labelField;\n\t\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\t\n\t\t\tvar templates = {\n\t\t\t\t'optgroup': function(data) {\n\t\t\t\t\treturn '<div class=\"optgroup\">' + data.html + '</div>';\n\t\t\t\t},\n\t\t\t\t'optgroup_header': function(data, escape) {\n\t\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t\t},\n\t\t\t\t'option': function(data, escape) {\n\t\t\t\t\treturn '<div class=\"option\">' + escape(data[field_label]) + '</div>';\n\t\t\t\t},\n\t\t\t\t'item': function(data, escape) {\n\t\t\t\t\treturn '<div class=\"item\">' + escape(data[field_label]) + '</div>';\n\t\t\t\t},\n\t\t\t\t'option_create': function(data, escape) {\n\t\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>&hellip;</div>';\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tself.settings.render = $.extend({}, templates, self.settings.render);\n\t\t},\n\t\n\t\t/**\n\t\t * Maps fired events to callbacks provided\n\t\t * in the settings used when creating the control.\n\t\t */\n\t\tsetupCallbacks: function() {\n\t\t\tvar key, fn, callbacks = {\n\t\t\t\t'initialize'      : 'onInitialize',\n\t\t\t\t'change'          : 'onChange',\n\t\t\t\t'item_add'        : 'onItemAdd',\n\t\t\t\t'item_remove'     : 'onItemRemove',\n\t\t\t\t'clear'           : 'onClear',\n\t\t\t\t'option_add'      : 'onOptionAdd',\n\t\t\t\t'option_remove'   : 'onOptionRemove',\n\t\t\t\t'option_clear'    : 'onOptionClear',\n\t\t\t\t'optgroup_add'    : 'onOptionGroupAdd',\n\t\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t\t'optgroup_clear'  : 'onOptionGroupClear',\n\t\t\t\t'dropdown_open'   : 'onDropdownOpen',\n\t\t\t\t'dropdown_close'  : 'onDropdownClose',\n\t\t\t\t'type'            : 'onType',\n\t\t\t\t'load'            : 'onLoad',\n\t\t\t\t'focus'           : 'onFocus',\n\t\t\t\t'blur'            : 'onBlur'\n\t\t\t};\n\t\n\t\t\tfor (key in callbacks) {\n\t\t\t\tif (callbacks.hasOwnProperty(key)) {\n\t\t\t\t\tfn = this.settings[callbacks[key]];\n\t\t\t\t\tif (fn) this.on(key, fn);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the main control element\n\t\t * has a click event.\n\t\t *\n\t\t * @param {object} e\n\t\t * @return {boolean}\n\t\t */\n\t\tonClick: function(e) {\n\t\t\tvar self = this;\n\t\n\t\t\t// necessary for mobile webkit devices (manual focus triggering\n\t\t\t// is ignored unless invoked within a click event)\n\t    // also necessary to reopen a dropdown that has been closed by\n\t    // closeAfterSelect\n\t\t\tif (!self.isFocused || !self.isOpen) {\n\t\t\t\tself.focus();\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the main control element\n\t\t * has a mouse down event.\n\t\t *\n\t\t * @param {object} e\n\t\t * @return {boolean}\n\t\t */\n\t\tonMouseDown: function(e) {\n\t\t\tvar self = this;\n\t\t\tvar defaultPrevented = e.isDefaultPrevented();\n\t\t\tvar $target = $(e.target);\n\t\n\t\t\tif (self.isFocused) {\n\t\t\t\t// retain focus by preventing native handling. if the\n\t\t\t\t// event target is the input it should not be modified.\n\t\t\t\t// otherwise, text selection within the input won't work.\n\t\t\t\tif (e.target !== self.$control_input[0]) {\n\t\t\t\t\tif (self.settings.mode === 'single') {\n\t\t\t\t\t\t// toggle dropdown\n\t\t\t\t\t\tself.isOpen ? self.close() : self.open();\n\t\t\t\t\t} else if (!defaultPrevented) {\n\t\t\t\t\t\tself.setActiveItem(null);\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// give control focus\n\t\t\t\tif (!defaultPrevented) {\n\t\t\t\t\twindow.setTimeout(function() {\n\t\t\t\t\t\tself.focus();\n\t\t\t\t\t}, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the value of the control has been changed.\n\t\t * This should propagate the event to the original DOM\n\t\t * input / select element.\n\t\t */\n\t\tonChange: function() {\n\t\t\tthis.$input.trigger('change');\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> paste.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonPaste: function(e) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isFull() || self.isInputHidden || self.isLocked) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// If a regex or string is included, this will split the pasted\n\t\t\t// input and create Items for each separate value\n\t\t\tif (self.settings.splitOn) {\n\t\n\t\t\t\t// Wait for pasted text to be recognized in value\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tvar pastedText = self.$control_input.val();\n\t\t\t\t\tif(!pastedText.match(self.settings.splitOn)){ return }\n\t\n\t\t\t\t\tvar splitInput = $.trim(pastedText).split(self.settings.splitOn);\n\t\t\t\t\tfor (var i = 0, n = splitInput.length; i < n; i++) {\n\t\t\t\t\t\tself.createItem(splitInput[i]);\n\t\t\t\t\t}\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> keypress.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonKeyPress: function(e) {\n\t\t\tif (this.isLocked) return e && e.preventDefault();\n\t\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\t\tif (this.settings.create && this.settings.mode === 'multi' && character === this.settings.delimiter) {\n\t\t\t\tthis.createItem();\n\t\t\t\te.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> keydown.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonKeyDown: function(e) {\n\t\t\tvar isInput = e.target === this.$control_input[0];\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isLocked) {\n\t\t\t\tif (e.keyCode !== KEY_TAB) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tswitch (e.keyCode) {\n\t\t\t\tcase KEY_A:\n\t\t\t\t\tif (self.isCmdDown) {\n\t\t\t\t\t\tself.selectAll();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase KEY_ESC:\n\t\t\t\t\tif (self.isOpen) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_N:\n\t\t\t\t\tif (!e.ctrlKey || e.altKey) break;\n\t\t\t\tcase KEY_DOWN:\n\t\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\t\tself.open();\n\t\t\t\t\t} else if (self.$activeOption) {\n\t\t\t\t\t\tself.ignoreHover = true;\n\t\t\t\t\t\tvar $next = self.getAdjacentOption(self.$activeOption, 1);\n\t\t\t\t\t\tif ($next.length) self.setActiveOption($next, true, true);\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_P:\n\t\t\t\t\tif (!e.ctrlKey || e.altKey) break;\n\t\t\t\tcase KEY_UP:\n\t\t\t\t\tif (self.$activeOption) {\n\t\t\t\t\t\tself.ignoreHover = true;\n\t\t\t\t\t\tvar $prev = self.getAdjacentOption(self.$activeOption, -1);\n\t\t\t\t\t\tif ($prev.length) self.setActiveOption($prev, true, true);\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_RETURN:\n\t\t\t\t\tif (self.isOpen && self.$activeOption) {\n\t\t\t\t\t\tself.onOptionSelect({currentTarget: self.$activeOption});\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_LEFT:\n\t\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_RIGHT:\n\t\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_TAB:\n\t\t\t\t\tif (self.settings.selectOnTab && self.isOpen && self.$activeOption) {\n\t\t\t\t\t\tself.onOptionSelect({currentTarget: self.$activeOption});\n\t\n\t\t\t\t\t\t// Default behaviour is to jump to the next field, we only want this\n\t\t\t\t\t\t// if the current field doesn't accept any more entries\n\t\t\t\t\t\tif (!self.isFull()) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (self.settings.create && self.createItem()) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase KEY_BACKSPACE:\n\t\t\t\tcase KEY_DELETE:\n\t\t\t\t\tself.deleteSelection(e);\n\t\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif ((self.isFull() || self.isInputHidden) && !(IS_MAC ? e.metaKey : e.ctrlKey)) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> keyup.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonKeyUp: function(e) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isLocked) return e && e.preventDefault();\n\t\t\tvar value = self.$control_input.val() || '';\n\t\t\tif (self.lastValue !== value) {\n\t\t\t\tself.lastValue = value;\n\t\t\t\tself.onSearchChange(value);\n\t\t\t\tself.refreshOptions();\n\t\t\t\tself.trigger('type', value);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Invokes the user-provide option provider / loader.\n\t\t *\n\t\t * Note: this function is debounced in the Selectize\n\t\t * constructor (by `settings.loadThrottle` milliseconds)\n\t\t *\n\t\t * @param {string} value\n\t\t */\n\t\tonSearchChange: function(value) {\n\t\t\tvar self = this;\n\t\t\tvar fn = self.settings.load;\n\t\t\tif (!fn) return;\n\t\t\tif (self.loadedSearches.hasOwnProperty(value)) return;\n\t\t\tself.loadedSearches[value] = true;\n\t\t\tself.load(function(callback) {\n\t\t\t\tfn.apply(self, [value, callback]);\n\t\t\t});\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> focus.\n\t\t *\n\t\t * @param {object} e (optional)\n\t\t * @returns {boolean}\n\t\t */\n\t\tonFocus: function(e) {\n\t\t\tvar self = this;\n\t\t\tvar wasFocused = self.isFocused;\n\t\n\t\t\tif (self.isDisabled) {\n\t\t\t\tself.blur();\n\t\t\t\te && e.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tif (self.ignoreFocus) return;\n\t\t\tself.isFocused = true;\n\t\t\tif (self.settings.preload === 'focus') self.onSearchChange('');\n\t\n\t\t\tif (!wasFocused) self.trigger('focus');\n\t\n\t\t\tif (!self.$activeItems.length) {\n\t\t\t\tself.showInput();\n\t\t\t\tself.setActiveItem(null);\n\t\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t\t}\n\t\n\t\t\tself.refreshState();\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered on <input> blur.\n\t\t *\n\t\t * @param {object} e\n\t\t * @param {Element} dest\n\t\t */\n\t\tonBlur: function(e, dest) {\n\t\t\tvar self = this;\n\t\t\tif (!self.isFocused) return;\n\t\t\tself.isFocused = false;\n\t\n\t\t\tif (self.ignoreFocus) {\n\t\t\t\treturn;\n\t\t\t} else if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {\n\t\t\t\t// necessary to prevent IE closing the dropdown when the scrollbar is clicked\n\t\t\t\tself.ignoreBlur = true;\n\t\t\t\tself.onFocus(e);\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tvar deactivate = function() {\n\t\t\t\tself.close();\n\t\t\t\tself.setTextboxValue('');\n\t\t\t\tself.setActiveItem(null);\n\t\t\t\tself.setActiveOption(null);\n\t\t\t\tself.setCaret(self.items.length);\n\t\t\t\tself.refreshState();\n\t\n\t\t\t\t// IE11 bug: element still marked as active\n\t\t\t\tdest && dest.focus && dest.focus();\n\t\n\t\t\t\tself.isBlurring = false;\n\t\t\t\tself.ignoreFocus = false;\n\t\t\t\tself.trigger('blur');\n\t\t\t};\n\t\n\t\t\tself.isBlurring = true;\n\t\t\tself.ignoreFocus = true;\n\t\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\t\tself.createItem(null, false, deactivate);\n\t\t\t} else {\n\t\t\t\tdeactivate();\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the user rolls over\n\t\t * an option in the autocomplete dropdown menu.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonOptionHover: function(e) {\n\t\t\tif (this.ignoreHover) return;\n\t\t\tthis.setActiveOption(e.currentTarget, false);\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the user clicks on an option\n\t\t * in the autocomplete dropdown menu.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonOptionSelect: function(e) {\n\t\t\tvar value, $target, $option, self = this;\n\t\n\t\t\tif (e.preventDefault) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\n\t\t\t$target = $(e.currentTarget);\n\t\t\tif ($target.hasClass('create')) {\n\t\t\t\tself.createItem(null, function() {\n\t\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvalue = $target.attr('data-value');\n\t\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\t\tself.lastQuery = null;\n\t\t\t\t\tself.setTextboxValue('');\n\t\t\t\t\tself.addItem(value);\n\t\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t} else if (!self.settings.hideSelected && e.type && /mouse/.test(e.type)) {\n\t\t\t\t\t\tself.setActiveOption(self.getOption(value));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Triggered when the user clicks on an item\n\t\t * that has been selected.\n\t\t *\n\t\t * @param {object} e\n\t\t * @returns {boolean}\n\t\t */\n\t\tonItemSelect: function(e) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isLocked) return;\n\t\t\tif (self.settings.mode === 'multi') {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.setActiveItem(e.currentTarget, e);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Invokes the provided method that provides\n\t\t * results to a callback---which are then added\n\t\t * as options to the control.\n\t\t *\n\t\t * @param {function} fn\n\t\t */\n\t\tload: function(fn) {\n\t\t\tvar self = this;\n\t\t\tvar $wrapper = self.$wrapper.addClass(self.settings.loadingClass);\n\t\n\t\t\tself.loading++;\n\t\t\tfn.apply(self, [function(results) {\n\t\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\t\tif (results && results.length) {\n\t\t\t\t\tself.addOption(results);\n\t\t\t\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\t\t\t\t}\n\t\t\t\tif (!self.loading) {\n\t\t\t\t\t$wrapper.removeClass(self.settings.loadingClass);\n\t\t\t\t}\n\t\t\t\tself.trigger('load', results);\n\t\t\t}]);\n\t\t},\n\t\n\t\t/**\n\t\t * Sets the input field of the control to the specified value.\n\t\t *\n\t\t * @param {string} value\n\t\t */\n\t\tsetTextboxValue: function(value) {\n\t\t\tvar $input = this.$control_input;\n\t\t\tvar changed = $input.val() !== value;\n\t\t\tif (changed) {\n\t\t\t\t$input.val(value).triggerHandler('update');\n\t\t\t\tthis.lastValue = value;\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Returns the value of the control. If multiple items\n\t\t * can be selected (e.g. <select multiple>), this returns\n\t\t * an array. If only one item can be selected, this\n\t\t * returns a string.\n\t\t *\n\t\t * @returns {mixed}\n\t\t */\n\t\tgetValue: function() {\n\t\t\tif (this.tagType === TAG_SELECT && this.$input.attr('multiple')) {\n\t\t\t\treturn this.items;\n\t\t\t} else {\n\t\t\t\treturn this.items.join(this.settings.delimiter);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Resets the selected items to the given value.\n\t\t *\n\t\t * @param {mixed} value\n\t\t */\n\t\tsetValue: function(value, silent) {\n\t\t\tvar events = silent ? [] : ['change'];\n\t\n\t\t\tdebounce_events(this, events, function() {\n\t\t\t\tthis.clear(silent);\n\t\t\t\tthis.addItems(value, silent);\n\t\t\t});\n\t\t},\n\t\n\t\t/**\n\t\t * Sets the selected item.\n\t\t *\n\t\t * @param {object} $item\n\t\t * @param {object} e (optional)\n\t\t */\n\t\tsetActiveItem: function($item, e) {\n\t\t\tvar self = this;\n\t\t\tvar eventName;\n\t\t\tvar i, idx, begin, end, item, swap;\n\t\t\tvar $last;\n\t\n\t\t\tif (self.settings.mode === 'single') return;\n\t\t\t$item = $($item);\n\t\n\t\t\t// clear the active selection\n\t\t\tif (!$item.length) {\n\t\t\t\t$(self.$activeItems).removeClass('active');\n\t\t\t\tself.$activeItems = [];\n\t\t\t\tif (self.isFocused) {\n\t\t\t\t\tself.showInput();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\t// modify selection\n\t\t\teventName = e && e.type.toLowerCase();\n\t\n\t\t\tif (eventName === 'mousedown' && self.isShiftDown && self.$activeItems.length) {\n\t\t\t\t$last = self.$control.children('.active:last');\n\t\t\t\tbegin = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$last[0]]);\n\t\t\t\tend   = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$item[0]]);\n\t\t\t\tif (begin > end) {\n\t\t\t\t\tswap  = begin;\n\t\t\t\t\tbegin = end;\n\t\t\t\t\tend   = swap;\n\t\t\t\t}\n\t\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\t\titem = self.$control[0].childNodes[i];\n\t\t\t\t\tif (self.$activeItems.indexOf(item) === -1) {\n\t\t\t\t\t\t$(item).addClass('active');\n\t\t\t\t\t\tself.$activeItems.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\te.preventDefault();\n\t\t\t} else if ((eventName === 'mousedown' && self.isCtrlDown) || (eventName === 'keydown' && this.isShiftDown)) {\n\t\t\t\tif ($item.hasClass('active')) {\n\t\t\t\t\tidx = self.$activeItems.indexOf($item[0]);\n\t\t\t\t\tself.$activeItems.splice(idx, 1);\n\t\t\t\t\t$item.removeClass('active');\n\t\t\t\t} else {\n\t\t\t\t\tself.$activeItems.push($item.addClass('active')[0]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$(self.$activeItems).removeClass('active');\n\t\t\t\tself.$activeItems = [$item.addClass('active')[0]];\n\t\t\t}\n\t\n\t\t\t// ensure control has focus\n\t\t\tself.hideInput();\n\t\t\tif (!this.isFocused) {\n\t\t\t\tself.focus();\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Sets the selected item in the dropdown menu\n\t\t * of available options.\n\t\t *\n\t\t * @param {object} $object\n\t\t * @param {boolean} scroll\n\t\t * @param {boolean} animate\n\t\t */\n\t\tsetActiveOption: function($option, scroll, animate) {\n\t\t\tvar height_menu, height_item, y;\n\t\t\tvar scroll_top, scroll_bottom;\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.$activeOption) self.$activeOption.removeClass('active');\n\t\t\tself.$activeOption = null;\n\t\n\t\t\t$option = $($option);\n\t\t\tif (!$option.length) return;\n\t\n\t\t\tself.$activeOption = $option.addClass('active');\n\t\n\t\t\tif (scroll || !isset(scroll)) {\n\t\n\t\t\t\theight_menu   = self.$dropdown_content.height();\n\t\t\t\theight_item   = self.$activeOption.outerHeight(true);\n\t\t\t\tscroll        = self.$dropdown_content.scrollTop() || 0;\n\t\t\t\ty             = self.$activeOption.offset().top - self.$dropdown_content.offset().top + scroll;\n\t\t\t\tscroll_top    = y;\n\t\t\t\tscroll_bottom = y - height_menu + height_item;\n\t\n\t\t\t\tif (y + height_item > height_menu + scroll) {\n\t\t\t\t\tself.$dropdown_content.stop().animate({scrollTop: scroll_bottom}, animate ? self.settings.scrollDuration : 0);\n\t\t\t\t} else if (y < scroll) {\n\t\t\t\t\tself.$dropdown_content.stop().animate({scrollTop: scroll_top}, animate ? self.settings.scrollDuration : 0);\n\t\t\t\t}\n\t\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Selects all items (CTRL + A).\n\t\t */\n\t\tselectAll: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.settings.mode === 'single') return;\n\t\n\t\t\tself.$activeItems = Array.prototype.slice.apply(self.$control.children(':not(input)').addClass('active'));\n\t\t\tif (self.$activeItems.length) {\n\t\t\t\tself.hideInput();\n\t\t\t\tself.close();\n\t\t\t}\n\t\t\tself.focus();\n\t\t},\n\t\n\t\t/**\n\t\t * Hides the input element out of view, while\n\t\t * retaining its focus.\n\t\t */\n\t\thideInput: function() {\n\t\t\tvar self = this;\n\t\n\t\t\tself.setTextboxValue('');\n\t\t\tself.$control_input.css({opacity: 0, position: 'absolute', left: self.rtl ? 10000 : -10000});\n\t\t\tself.isInputHidden = true;\n\t\t},\n\t\n\t\t/**\n\t\t * Restores input visibility.\n\t\t */\n\t\tshowInput: function() {\n\t\t\tthis.$control_input.css({opacity: 1, position: 'relative', left: 0});\n\t\t\tthis.isInputHidden = false;\n\t\t},\n\t\n\t\t/**\n\t\t * Gives the control focus.\n\t\t */\n\t\tfocus: function() {\n\t\t\tvar self = this;\n\t\t\tif (self.isDisabled) return;\n\t\n\t\t\tself.ignoreFocus = true;\n\t\t\tself.$control_input[0].focus();\n\t\t\twindow.setTimeout(function() {\n\t\t\t\tself.ignoreFocus = false;\n\t\t\t\tself.onFocus();\n\t\t\t}, 0);\n\t\t},\n\t\n\t\t/**\n\t\t * Forces the control out of focus.\n\t\t *\n\t\t * @param {Element} dest\n\t\t */\n\t\tblur: function(dest) {\n\t\t\tthis.$control_input[0].blur();\n\t\t\tthis.onBlur(null, dest);\n\t\t},\n\t\n\t\t/**\n\t\t * Returns a function that scores an object\n\t\t * to show how good of a match it is to the\n\t\t * provided query.\n\t\t *\n\t\t * @param {string} query\n\t\t * @param {object} options\n\t\t * @return {function}\n\t\t */\n\t\tgetScoreFunction: function(query) {\n\t\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t\t},\n\t\n\t\t/**\n\t\t * Returns search options for sifter (the system\n\t\t * for scoring and sorting results).\n\t\t *\n\t\t * @see https://github.com/brianreavis/sifter.js\n\t\t * @return {object}\n\t\t */\n\t\tgetSearchOptions: function() {\n\t\t\tvar settings = this.settings;\n\t\t\tvar sort = settings.sortField;\n\t\t\tif (typeof sort === 'string') {\n\t\t\t\tsort = [{field: sort}];\n\t\t\t}\n\t\n\t\t\treturn {\n\t\t\t\tfields      : settings.searchField,\n\t\t\t\tconjunction : settings.searchConjunction,\n\t\t\t\tsort        : sort,\n\t\t\t\tnesting     : settings.nesting\n\t\t\t};\n\t\t},\n\t\n\t\t/**\n\t\t * Searches through available options and returns\n\t\t * a sorted array of matches.\n\t\t *\n\t\t * Returns an object containing:\n\t\t *\n\t\t *   - query {string}\n\t\t *   - tokens {array}\n\t\t *   - total {int}\n\t\t *   - items {array}\n\t\t *\n\t\t * @param {string} query\n\t\t * @returns {object}\n\t\t */\n\t\tsearch: function(query) {\n\t\t\tvar i, value, score, result, calculateScore;\n\t\t\tvar self     = this;\n\t\t\tvar settings = self.settings;\n\t\t\tvar options  = this.getSearchOptions();\n\t\n\t\t\t// validate user-provided result scoring function\n\t\t\tif (settings.score) {\n\t\t\t\tcalculateScore = self.settings.score.apply(this, [query]);\n\t\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\t\tthrow new Error('Selectize \"score\" setting must be a function that returns a function');\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// perform search\n\t\t\tif (query !== self.lastQuery) {\n\t\t\t\tself.lastQuery = query;\n\t\t\t\tresult = self.sifter.search(query, $.extend(options, {score: calculateScore}));\n\t\t\t\tself.currentResults = result;\n\t\t\t} else {\n\t\t\t\tresult = $.extend(true, {}, self.currentResults);\n\t\t\t}\n\t\n\t\t\t// filter out selected items\n\t\t\tif (settings.hideSelected) {\n\t\t\t\tfor (i = result.items.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (self.items.indexOf(hash_key(result.items[i].id)) !== -1) {\n\t\t\t\t\t\tresult.items.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn result;\n\t\t},\n\t\n\t\t/**\n\t\t * Refreshes the list of available options shown\n\t\t * in the autocomplete dropdown menu.\n\t\t *\n\t\t * @param {boolean} triggerDropdown\n\t\t */\n\t\trefreshOptions: function(triggerDropdown) {\n\t\t\tvar i, j, k, n, groups, groups_order, option, option_html, optgroup, optgroups, html, html_children, has_create_option;\n\t\t\tvar $active, $active_before, $create;\n\t\n\t\t\tif (typeof triggerDropdown === 'undefined') {\n\t\t\t\ttriggerDropdown = true;\n\t\t\t}\n\t\n\t\t\tvar self              = this;\n\t\t\tvar query             = $.trim(self.$control_input.val());\n\t\t\tvar results           = self.search(query);\n\t\t\tvar $dropdown_content = self.$dropdown_content;\n\t\t\tvar active_before     = self.$activeOption && hash_key(self.$activeOption.attr('data-value'));\n\t\n\t\t\t// build markup\n\t\t\tn = results.items.length;\n\t\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t\t}\n\t\n\t\t\t// render and group available options individually\n\t\t\tgroups = {};\n\t\t\tgroups_order = [];\n\t\n\t\t\tfor (i = 0; i < n; i++) {\n\t\t\t\toption      = self.options[results.items[i].id];\n\t\t\t\toption_html = self.render('option', option);\n\t\t\t\toptgroup    = option[self.settings.optgroupField] || '';\n\t\t\t\toptgroups   = $.isArray(optgroup) ? optgroup : [optgroup];\n\t\n\t\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\t\toptgroup = optgroups[j];\n\t\t\t\t\tif (!self.optgroups.hasOwnProperty(optgroup)) {\n\t\t\t\t\t\toptgroup = '';\n\t\t\t\t\t}\n\t\t\t\t\tif (!groups.hasOwnProperty(optgroup)) {\n\t\t\t\t\t\tgroups[optgroup] = document.createDocumentFragment();\n\t\t\t\t\t\tgroups_order.push(optgroup);\n\t\t\t\t\t}\n\t\t\t\t\tgroups[optgroup].appendChild(option_html);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// sort optgroups\n\t\t\tif (this.settings.lockOptgroupOrder) {\n\t\t\t\tgroups_order.sort(function(a, b) {\n\t\t\t\t\tvar a_order = self.optgroups[a].$order || 0;\n\t\t\t\t\tvar b_order = self.optgroups[b].$order || 0;\n\t\t\t\t\treturn a_order - b_order;\n\t\t\t\t});\n\t\t\t}\n\t\n\t\t\t// render optgroup headers & join groups\n\t\t\thtml = document.createDocumentFragment();\n\t\t\tfor (i = 0, n = groups_order.length; i < n; i++) {\n\t\t\t\toptgroup = groups_order[i];\n\t\t\t\tif (self.optgroups.hasOwnProperty(optgroup) && groups[optgroup].childNodes.length) {\n\t\t\t\t\t// render the optgroup header and options within it,\n\t\t\t\t\t// then pass it to the wrapper template\n\t\t\t\t\thtml_children = document.createDocumentFragment();\n\t\t\t\t\thtml_children.appendChild(self.render('optgroup_header', self.optgroups[optgroup]));\n\t\t\t\t\thtml_children.appendChild(groups[optgroup]);\n\t\n\t\t\t\t\thtml.appendChild(self.render('optgroup', $.extend({}, self.optgroups[optgroup], {\n\t\t\t\t\t\thtml: domToString(html_children),\n\t\t\t\t\t\tdom:  html_children\n\t\t\t\t\t})));\n\t\t\t\t} else {\n\t\t\t\t\thtml.appendChild(groups[optgroup]);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t$dropdown_content.html(html);\n\t\n\t\t\t// highlight matching terms inline\n\t\t\tif (self.settings.highlight) {\n\t\t\t\t$dropdown_content.removeHighlight();\n\t\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\t\tfor (i = 0, n = results.tokens.length; i < n; i++) {\n\t\t\t\t\t\thighlight($dropdown_content, results.tokens[i].regex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// add \"selected\" class to selected options\n\t\t\tif (!self.settings.hideSelected) {\n\t\t\t\tfor (i = 0, n = self.items.length; i < n; i++) {\n\t\t\t\t\tself.getOption(self.items[i]).addClass('selected');\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// add create option\n\t\t\thas_create_option = self.canCreate(query);\n\t\t\tif (has_create_option) {\n\t\t\t\t$dropdown_content.prepend(self.render('option_create', {input: query}));\n\t\t\t\t$create = $($dropdown_content[0].childNodes[0]);\n\t\t\t}\n\t\n\t\t\t// activate\n\t\t\tself.hasOptions = results.items.length > 0 || has_create_option;\n\t\t\tif (self.hasOptions) {\n\t\t\t\tif (results.items.length > 0) {\n\t\t\t\t\t$active_before = active_before && self.getOption(active_before);\n\t\t\t\t\tif ($active_before && $active_before.length) {\n\t\t\t\t\t\t$active = $active_before;\n\t\t\t\t\t} else if (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\t\t\t$active = self.getOption(self.items[0]);\n\t\t\t\t\t}\n\t\t\t\t\tif (!$active || !$active.length) {\n\t\t\t\t\t\tif ($create && !self.settings.addPrecedence) {\n\t\t\t\t\t\t\t$active = self.getAdjacentOption($create, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$active = $dropdown_content.find('[data-selectable]:first');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$active = $create;\n\t\t\t\t}\n\t\t\t\tself.setActiveOption($active);\n\t\t\t\tif (triggerDropdown && !self.isOpen) { self.open(); }\n\t\t\t} else {\n\t\t\t\tself.setActiveOption(null);\n\t\t\t\tif (triggerDropdown && self.isOpen) { self.close(); }\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Adds an available option. If it already exists,\n\t\t * nothing will happen. Note: this does not refresh\n\t\t * the options list dropdown (use `refreshOptions`\n\t\t * for that).\n\t\t *\n\t\t * Usage:\n\t\t *\n\t\t *   this.addOption(data)\n\t\t *\n\t\t * @param {object|array} data\n\t\t */\n\t\taddOption: function(data) {\n\t\t\tvar i, n, value, self = this;\n\t\n\t\t\tif ($.isArray(data)) {\n\t\t\t\tfor (i = 0, n = data.length; i < n; i++) {\n\t\t\t\t\tself.addOption(data[i]);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tif (value = self.registerOption(data)) {\n\t\t\t\tself.userOptions[value] = true;\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.trigger('option_add', value, data);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Registers an option to the pool of options.\n\t\t *\n\t\t * @param {object} data\n\t\t * @return {boolean|string}\n\t\t */\n\t\tregisterOption: function(data) {\n\t\t\tvar key = hash_key(data[this.settings.valueField]);\n\t\t\tif (typeof key === 'undefined' || key === null || this.options.hasOwnProperty(key)) return false;\n\t\t\tdata.$order = data.$order || ++this.order;\n\t\t\tthis.options[key] = data;\n\t\t\treturn key;\n\t\t},\n\t\n\t\t/**\n\t\t * Registers an option group to the pool of option groups.\n\t\t *\n\t\t * @param {object} data\n\t\t * @return {boolean|string}\n\t\t */\n\t\tregisterOptionGroup: function(data) {\n\t\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\t\t\tif (!key) return false;\n\t\n\t\t\tdata.$order = data.$order || ++this.order;\n\t\t\tthis.optgroups[key] = data;\n\t\t\treturn key;\n\t\t},\n\t\n\t\t/**\n\t\t * Registers a new optgroup for options\n\t\t * to be bucketed into.\n\t\t *\n\t\t * @param {string} id\n\t\t * @param {object} data\n\t\t */\n\t\taddOptionGroup: function(id, data) {\n\t\t\tdata[this.settings.optgroupValueField] = id;\n\t\t\tif (id = this.registerOptionGroup(data)) {\n\t\t\t\tthis.trigger('optgroup_add', id, data);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Removes an existing option group.\n\t\t *\n\t\t * @param {string} id\n\t\t */\n\t\tremoveOptionGroup: function(id) {\n\t\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\t\tdelete this.optgroups[id];\n\t\t\t\tthis.renderCache = {};\n\t\t\t\tthis.trigger('optgroup_remove', id);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Clears all existing option groups.\n\t\t */\n\t\tclearOptionGroups: function() {\n\t\t\tthis.optgroups = {};\n\t\t\tthis.renderCache = {};\n\t\t\tthis.trigger('optgroup_clear');\n\t\t},\n\t\n\t\t/**\n\t\t * Updates an option available for selection. If\n\t\t * it is visible in the selected items or options\n\t\t * dropdown, it will be re-rendered automatically.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {object} data\n\t\t */\n\t\tupdateOption: function(value, data) {\n\t\t\tvar self = this;\n\t\t\tvar $item, $item_new;\n\t\t\tvar value_new, index_item, cache_items, cache_options, order_old;\n\t\n\t\t\tvalue     = hash_key(value);\n\t\t\tvalue_new = hash_key(data[self.settings.valueField]);\n\t\n\t\t\t// sanity checks\n\t\t\tif (value === null) return;\n\t\t\tif (!self.options.hasOwnProperty(value)) return;\n\t\t\tif (typeof value_new !== 'string') throw new Error('Value must be set in option data');\n\t\n\t\t\torder_old = self.options[value].$order;\n\t\n\t\t\t// update references\n\t\t\tif (value_new !== value) {\n\t\t\t\tdelete self.options[value];\n\t\t\t\tindex_item = self.items.indexOf(value);\n\t\t\t\tif (index_item !== -1) {\n\t\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata.$order = data.$order || order_old;\n\t\t\tself.options[value_new] = data;\n\t\n\t\t\t// invalidate render cache\n\t\t\tcache_items = self.renderCache['item'];\n\t\t\tcache_options = self.renderCache['option'];\n\t\n\t\t\tif (cache_items) {\n\t\t\t\tdelete cache_items[value];\n\t\t\t\tdelete cache_items[value_new];\n\t\t\t}\n\t\t\tif (cache_options) {\n\t\t\t\tdelete cache_options[value];\n\t\t\t\tdelete cache_options[value_new];\n\t\t\t}\n\t\n\t\t\t// update the item if it's selected\n\t\t\tif (self.items.indexOf(value_new) !== -1) {\n\t\t\t\t$item = self.getItem(value);\n\t\t\t\t$item_new = $(self.render('item', data));\n\t\t\t\tif ($item.hasClass('active')) $item_new.addClass('active');\n\t\t\t\t$item.replaceWith($item_new);\n\t\t\t}\n\t\n\t\t\t// invalidate last query because we might have updated the sortField\n\t\t\tself.lastQuery = null;\n\t\n\t\t\t// update dropdown contents\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.refreshOptions(false);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Removes a single option.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {boolean} silent\n\t\t */\n\t\tremoveOption: function(value, silent) {\n\t\t\tvar self = this;\n\t\t\tvalue = hash_key(value);\n\t\n\t\t\tvar cache_items = self.renderCache['item'];\n\t\t\tvar cache_options = self.renderCache['option'];\n\t\t\tif (cache_items) delete cache_items[value];\n\t\t\tif (cache_options) delete cache_options[value];\n\t\n\t\t\tdelete self.userOptions[value];\n\t\t\tdelete self.options[value];\n\t\t\tself.lastQuery = null;\n\t\t\tself.trigger('option_remove', value);\n\t\t\tself.removeItem(value, silent);\n\t\t},\n\t\n\t\t/**\n\t\t * Clears all options.\n\t\t */\n\t\tclearOptions: function() {\n\t\t\tvar self = this;\n\t\n\t\t\tself.loadedSearches = {};\n\t\t\tself.userOptions = {};\n\t\t\tself.renderCache = {};\n\t\t\tvar options = self.options;\n\t\t\t$.each(self.options, function(key, value) {\n\t\t\t\tif(self.items.indexOf(key) == -1) {\n\t\t\t\t\tdelete options[key];\n\t\t\t\t}\n\t\t\t});\n\t\t\tself.options = self.sifter.items = options;\n\t\t\tself.lastQuery = null;\n\t\t\tself.trigger('option_clear');\n\t\t},\n\t\n\t\t/**\n\t\t * Returns the jQuery element of the option\n\t\t * matching the given value.\n\t\t *\n\t\t * @param {string} value\n\t\t * @returns {object}\n\t\t */\n\t\tgetOption: function(value) {\n\t\t\treturn this.getElementWithValue(value, this.$dropdown_content.find('[data-selectable]'));\n\t\t},\n\t\n\t\t/**\n\t\t * Returns the jQuery element of the next or\n\t\t * previous selectable option.\n\t\t *\n\t\t * @param {object} $option\n\t\t * @param {int} direction  can be 1 for next or -1 for previous\n\t\t * @return {object}\n\t\t */\n\t\tgetAdjacentOption: function($option, direction) {\n\t\t\tvar $options = this.$dropdown.find('[data-selectable]');\n\t\t\tvar index    = $options.index($option) + direction;\n\t\n\t\t\treturn index >= 0 && index < $options.length ? $options.eq(index) : $();\n\t\t},\n\t\n\t\t/**\n\t\t * Finds the first element with a \"data-value\" attribute\n\t\t * that matches the given value.\n\t\t *\n\t\t * @param {mixed} value\n\t\t * @param {object} $els\n\t\t * @return {object}\n\t\t */\n\t\tgetElementWithValue: function(value, $els) {\n\t\t\tvalue = hash_key(value);\n\t\n\t\t\tif (typeof value !== 'undefined' && value !== null) {\n\t\t\t\tfor (var i = 0, n = $els.length; i < n; i++) {\n\t\t\t\t\tif ($els[i].getAttribute('data-value') === value) {\n\t\t\t\t\t\treturn $($els[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn $();\n\t\t},\n\t\n\t\t/**\n\t\t * Returns the jQuery element of the item\n\t\t * matching the given value.\n\t\t *\n\t\t * @param {string} value\n\t\t * @returns {object}\n\t\t */\n\t\tgetItem: function(value) {\n\t\t\treturn this.getElementWithValue(value, this.$control.children());\n\t\t},\n\t\n\t\t/**\n\t\t * \"Selects\" multiple items at once. Adds them to the list\n\t\t * at the current caret position.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {boolean} silent\n\t\t */\n\t\taddItems: function(values, silent) {\n\t\t\tthis.buffer = document.createDocumentFragment();\n\t\n\t\t\tvar childNodes = this.$control[0].childNodes;\n\t\t\tfor (var i = 0; i < childNodes.length; i++) {\n\t\t\t\tthis.buffer.appendChild(childNodes[i]);\n\t\t\t}\n\t\n\t\t\tvar items = $.isArray(values) ? values : [values];\n\t\t\tfor (var i = 0, n = items.length; i < n; i++) {\n\t\t\t\tthis.isPending = (i < n - 1);\n\t\t\t\tthis.addItem(items[i], silent);\n\t\t\t}\n\t\n\t\t\tvar control = this.$control[0];\n\t\t\tcontrol.insertBefore(this.buffer, control.firstChild);\n\t\n\t\t\tthis.buffer = null;\n\t\t},\n\t\n\t\t/**\n\t\t * \"Selects\" an item. Adds it to the list\n\t\t * at the current caret position.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {boolean} silent\n\t\t */\n\t\taddItem: function(value, silent) {\n\t\t\tvar events = silent ? [] : ['change'];\n\t\n\t\t\tdebounce_events(this, events, function() {\n\t\t\t\tvar $item, $option, $options;\n\t\t\t\tvar self = this;\n\t\t\t\tvar inputMode = self.settings.mode;\n\t\t\t\tvar i, active, value_next, wasFull;\n\t\t\t\tvalue = hash_key(value);\n\t\n\t\t\t\tif (self.items.indexOf(value) !== -1) {\n\t\t\t\t\tif (inputMode === 'single') self.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tif (!self.options.hasOwnProperty(value)) return;\n\t\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\t\n\t\t\t\t$item = $(self.render('item', self.options[value]));\n\t\t\t\twasFull = self.isFull();\n\t\t\t\tself.items.splice(self.caretPos, 0, value);\n\t\t\t\tself.insertAtCaret($item);\n\t\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\t\tself.refreshState();\n\t\t\t\t}\n\t\n\t\t\t\tif (self.isSetup) {\n\t\t\t\t\t$options = self.$dropdown_content.find('[data-selectable]');\n\t\n\t\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\t\tif (!self.isPending) {\n\t\t\t\t\t\t$option = self.getOption(value);\n\t\t\t\t\t\tvalue_next = self.getAdjacentOption($option, 1).attr('data-value');\n\t\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t\t\tif (value_next) {\n\t\t\t\t\t\t\tself.setActiveOption(self.getOption(value_next));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\t\tif (!$options.length || self.isFull()) {\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\t\tself.positionDropdown();\n\t\t\t\t\t}\n\t\n\t\t\t\t\tself.updatePlaceholder();\n\t\t\t\t\tself.trigger('item_add', value, $item);\n\t\n\t\t\t\t\tif (!self.isPending) {\n\t\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\n\t\t/**\n\t\t * Removes the selected item matching\n\t\t * the provided value.\n\t\t *\n\t\t * @param {string} value\n\t\t */\n\t\tremoveItem: function(value, silent) {\n\t\t\tvar self = this;\n\t\t\tvar $item, i, idx;\n\t\n\t\t\t$item = (value instanceof $) ? value : self.getItem(value);\n\t\t\tvalue = hash_key($item.attr('data-value'));\n\t\t\ti = self.items.indexOf(value);\n\t\n\t\t\tif (i !== -1) {\n\t\t\t\t$item.remove();\n\t\t\t\tif ($item.hasClass('active')) {\n\t\t\t\t\tidx = self.$activeItems.indexOf($item[0]);\n\t\t\t\t\tself.$activeItems.splice(idx, 1);\n\t\t\t\t}\n\t\n\t\t\t\tself.items.splice(i, 1);\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\t\t\tself.removeOption(value, silent);\n\t\t\t\t}\n\t\n\t\t\t\tif (i < self.caretPos) {\n\t\t\t\t\tself.setCaret(self.caretPos - 1);\n\t\t\t\t}\n\t\n\t\t\t\tself.refreshState();\n\t\t\t\tself.updatePlaceholder();\n\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\tself.positionDropdown();\n\t\t\t\tself.trigger('item_remove', value, $item);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Invokes the `create` method provided in the\n\t\t * selectize options that should provide the data\n\t\t * for the new item, given the user input.\n\t\t *\n\t\t * Once this completes, it will be added\n\t\t * to the item list.\n\t\t *\n\t\t * @param {string} value\n\t\t * @param {boolean} [triggerDropdown]\n\t\t * @param {function} [callback]\n\t\t * @return {boolean}\n\t\t */\n\t\tcreateItem: function(input, triggerDropdown) {\n\t\t\tvar self  = this;\n\t\t\tvar caret = self.caretPos;\n\t\t\tinput = input || $.trim(self.$control_input.val() || '');\n\t\n\t\t\tvar callback = arguments[arguments.length - 1];\n\t\t\tif (typeof callback !== 'function') callback = function() {};\n\t\n\t\t\tif (typeof triggerDropdown !== 'boolean') {\n\t\t\t\ttriggerDropdown = true;\n\t\t\t}\n\t\n\t\t\tif (!self.canCreate(input)) {\n\t\t\t\tcallback();\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\tself.lock();\n\t\n\t\t\tvar setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) {\n\t\t\t\tvar data = {};\n\t\t\t\tdata[self.settings.labelField] = input;\n\t\t\t\tdata[self.settings.valueField] = input;\n\t\t\t\treturn data;\n\t\t\t};\n\t\n\t\t\tvar create = once(function(data) {\n\t\t\t\tself.unlock();\n\t\n\t\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\t\tif (typeof value !== 'string') return callback();\n\t\n\t\t\t\tself.setTextboxValue('');\n\t\t\t\tself.addOption(data);\n\t\t\t\tself.setCaret(caret);\n\t\t\t\tself.addItem(value);\n\t\t\t\tself.refreshOptions(triggerDropdown && self.settings.mode !== 'single');\n\t\t\t\tcallback(data);\n\t\t\t});\n\t\n\t\t\tvar output = setup.apply(this, [input, create]);\n\t\t\tif (typeof output !== 'undefined') {\n\t\t\t\tcreate(output);\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t},\n\t\n\t\t/**\n\t\t * Re-renders the selected item lists.\n\t\t */\n\t\trefreshItems: function() {\n\t\t\tthis.lastQuery = null;\n\t\n\t\t\tif (this.isSetup) {\n\t\t\t\tthis.addItem(this.items);\n\t\t\t}\n\t\n\t\t\tthis.refreshState();\n\t\t\tthis.updateOriginalInput();\n\t\t},\n\t\n\t\t/**\n\t\t * Updates all state-dependent attributes\n\t\t * and CSS classes.\n\t\t */\n\t\trefreshState: function() {\n\t\t\tthis.refreshValidityState();\n\t\t\tthis.refreshClasses();\n\t\t},\n\t\n\t\t/**\n\t\t * Update the `required` attribute of both input and control input.\n\t\t *\n\t\t * The `required` property needs to be activated on the control input\n\t\t * for the error to be displayed at the right place. `required` also\n\t\t * needs to be temporarily deactivated on the input since the input is\n\t\t * hidden and can't show errors.\n\t\t */\n\t\trefreshValidityState: function() {\n\t\t\tif (!this.isRequired) return false;\n\t\n\t\t\tvar invalid = !this.items.length;\n\t\n\t\t\tthis.isInvalid = invalid;\n\t\t\tthis.$control_input.prop('required', invalid);\n\t\t\tthis.$input.prop('required', !invalid);\n\t\t},\n\t\n\t\t/**\n\t\t * Updates all state-dependent CSS classes.\n\t\t */\n\t\trefreshClasses: function() {\n\t\t\tvar self     = this;\n\t\t\tvar isFull   = self.isFull();\n\t\t\tvar isLocked = self.isLocked;\n\t\n\t\t\tself.$wrapper\n\t\t\t\t.toggleClass('rtl', self.rtl);\n\t\n\t\t\tself.$control\n\t\t\t\t.toggleClass('focus', self.isFocused)\n\t\t\t\t.toggleClass('disabled', self.isDisabled)\n\t\t\t\t.toggleClass('required', self.isRequired)\n\t\t\t\t.toggleClass('invalid', self.isInvalid)\n\t\t\t\t.toggleClass('locked', isLocked)\n\t\t\t\t.toggleClass('full', isFull).toggleClass('not-full', !isFull)\n\t\t\t\t.toggleClass('input-active', self.isFocused && !self.isInputHidden)\n\t\t\t\t.toggleClass('dropdown-active', self.isOpen)\n\t\t\t\t.toggleClass('has-options', !$.isEmptyObject(self.options))\n\t\t\t\t.toggleClass('has-items', self.items.length > 0);\n\t\n\t\t\tself.$control_input.data('grow', !isFull && !isLocked);\n\t\t},\n\t\n\t\t/**\n\t\t * Determines whether or not more items can be added\n\t\t * to the control without exceeding the user-defined maximum.\n\t\t *\n\t\t * @returns {boolean}\n\t\t */\n\t\tisFull: function() {\n\t\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t\t},\n\t\n\t\t/**\n\t\t * Refreshes the original <select> or <input>\n\t\t * element to reflect the current state.\n\t\t */\n\t\tupdateOriginalInput: function(opts) {\n\t\t\tvar i, n, options, label, self = this;\n\t\t\topts = opts || {};\n\t\n\t\t\tif (self.tagType === TAG_SELECT) {\n\t\t\t\toptions = [];\n\t\t\t\tfor (i = 0, n = self.items.length; i < n; i++) {\n\t\t\t\t\tlabel = self.options[self.items[i]][self.settings.labelField] || '';\n\t\t\t\t\toptions.push('<option value=\"' + escape_html(self.items[i]) + '\" selected=\"selected\">' + escape_html(label) + '</option>');\n\t\t\t\t}\n\t\t\t\tif (!options.length && !this.$input.attr('multiple')) {\n\t\t\t\t\toptions.push('<option value=\"\" selected=\"selected\"></option>');\n\t\t\t\t}\n\t\t\t\tself.$input.html(options.join(''));\n\t\t\t} else {\n\t\t\t\tself.$input.val(self.getValue());\n\t\t\t\tself.$input.attr('value',self.$input.val());\n\t\t\t}\n\t\n\t\t\tif (self.isSetup) {\n\t\t\t\tif (!opts.silent) {\n\t\t\t\t\tself.trigger('change', self.$input.val());\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Shows/hide the input placeholder depending\n\t\t * on if there items in the list already.\n\t\t */\n\t\tupdatePlaceholder: function() {\n\t\t\tif (!this.settings.placeholder) return;\n\t\t\tvar $input = this.$control_input;\n\t\n\t\t\tif (this.items.length) {\n\t\t\t\t$input.removeAttr('placeholder');\n\t\t\t} else {\n\t\t\t\t$input.attr('placeholder', this.settings.placeholder);\n\t\t\t}\n\t\t\t$input.triggerHandler('update', {force: true});\n\t\t},\n\t\n\t\t/**\n\t\t * Shows the autocomplete dropdown containing\n\t\t * the available options.\n\t\t */\n\t\topen: function() {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.isLocked || self.isOpen || (self.settings.mode === 'multi' && self.isFull())) return;\n\t\t\tself.focus();\n\t\t\tself.isOpen = true;\n\t\t\tself.refreshState();\n\t\t\tself.$dropdown.css({visibility: 'hidden', display: 'block'});\n\t\t\tself.positionDropdown();\n\t\t\tself.$dropdown.css({visibility: 'visible'});\n\t\t\tself.trigger('dropdown_open', self.$dropdown);\n\t\t},\n\t\n\t\t/**\n\t\t * Closes the autocomplete dropdown menu.\n\t\t */\n\t\tclose: function() {\n\t\t\tvar self = this;\n\t\t\tvar trigger = self.isOpen;\n\t\n\t\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\t\tself.hideInput();\n\t\n\t\t\t\t// Do not trigger blur while inside a blur event,\n\t\t\t\t// this fixes some weird tabbing behavior in FF and IE.\n\t\t\t\t// See #1164\n\t\t\t\tif (!self.isBlurring) {\n\t\t\t\t\tself.$control_input.blur(); // close keyboard on iOS\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tself.isOpen = false;\n\t\t\tself.$dropdown.hide();\n\t\t\tself.setActiveOption(null);\n\t\t\tself.refreshState();\n\t\n\t\t\tif (trigger) self.trigger('dropdown_close', self.$dropdown);\n\t\t},\n\t\n\t\t/**\n\t\t * Calculates and applies the appropriate\n\t\t * position of the dropdown.\n\t\t */\n\t\tpositionDropdown: function() {\n\t\t\tvar $control = this.$control;\n\t\t\tvar offset = this.settings.dropdownParent === 'body' ? $control.offset() : $control.position();\n\t\t\toffset.top += $control.outerHeight(true);\n\t\n\t\t\tthis.$dropdown.css({\n\t\t\t\twidth : $control[0].getBoundingClientRect().width,\n\t\t\t\ttop   : offset.top,\n\t\t\t\tleft  : offset.left\n\t\t\t});\n\t\t},\n\t\n\t\t/**\n\t\t * Resets / clears all selected items\n\t\t * from the control.\n\t\t *\n\t\t * @param {boolean} silent\n\t\t */\n\t\tclear: function(silent) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (!self.items.length) return;\n\t\t\tself.$control.children(':not(input)').remove();\n\t\t\tself.items = [];\n\t\t\tself.lastQuery = null;\n\t\t\tself.setCaret(0);\n\t\t\tself.setActiveItem(null);\n\t\t\tself.updatePlaceholder();\n\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\tself.refreshState();\n\t\t\tself.showInput();\n\t\t\tself.trigger('clear');\n\t\t},\n\t\n\t\t/**\n\t\t * A helper method for inserting an element\n\t\t * at the current caret position.\n\t\t *\n\t\t * @param {object} $el\n\t\t */\n\t\tinsertAtCaret: function($el) {\n\t\t\tvar caret = Math.min(this.caretPos, this.items.length);\n\t\t\tvar el = $el[0];\n\t\t\tvar target = this.buffer || this.$control[0];\n\t\n\t\t\tif (caret === 0) {\n\t\t\t\ttarget.insertBefore(el, target.firstChild);\n\t\t\t} else {\n\t\t\t\ttarget.insertBefore(el, target.childNodes[caret]);\n\t\t\t}\n\t\n\t\t\tthis.setCaret(caret + 1);\n\t\t},\n\t\n\t\t/**\n\t\t * Removes the current selected item(s).\n\t\t *\n\t\t * @param {object} e (optional)\n\t\t * @returns {boolean}\n\t\t */\n\t\tdeleteSelection: function(e) {\n\t\t\tvar i, n, direction, selection, values, caret, option_select, $option_select, $tail;\n\t\t\tvar self = this;\n\t\n\t\t\tdirection = (e && e.keyCode === KEY_BACKSPACE) ? -1 : 1;\n\t\t\tselection = getSelection(self.$control_input[0]);\n\t\n\t\t\tif (self.$activeOption && !self.settings.hideSelected) {\n\t\t\t\toption_select = self.getAdjacentOption(self.$activeOption, -1).attr('data-value');\n\t\t\t}\n\t\n\t\t\t// determine items that will be removed\n\t\t\tvalues = [];\n\t\n\t\t\tif (self.$activeItems.length) {\n\t\t\t\t$tail = self.$control.children('.active:' + (direction > 0 ? 'last' : 'first'));\n\t\t\t\tcaret = self.$control.children(':not(input)').index($tail);\n\t\t\t\tif (direction > 0) { caret++; }\n\t\n\t\t\t\tfor (i = 0, n = self.$activeItems.length; i < n; i++) {\n\t\t\t\t\tvalues.push($(self.$activeItems[i]).attr('data-value'));\n\t\t\t\t}\n\t\t\t\tif (e) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\t\tif (direction < 0 && selection.start === 0 && selection.length === 0) {\n\t\t\t\t\tvalues.push(self.items[self.caretPos - 1]);\n\t\t\t\t} else if (direction > 0 && selection.start === self.$control_input.val().length) {\n\t\t\t\t\tvalues.push(self.items[self.caretPos]);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// allow the callback to abort\n\t\t\tif (!values.length || (typeof self.settings.onDelete === 'function' && self.settings.onDelete.apply(self, [values]) === false)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// perform removal\n\t\t\tif (typeof caret !== 'undefined') {\n\t\t\t\tself.setCaret(caret);\n\t\t\t}\n\t\t\twhile (values.length) {\n\t\t\t\tself.removeItem(values.pop());\n\t\t\t}\n\t\n\t\t\tself.showInput();\n\t\t\tself.positionDropdown();\n\t\t\tself.refreshOptions(true);\n\t\n\t\t\t// select previous option\n\t\t\tif (option_select) {\n\t\t\t\t$option_select = self.getOption(option_select);\n\t\t\t\tif ($option_select.length) {\n\t\t\t\t\tself.setActiveOption($option_select);\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t},\n\t\n\t\t/**\n\t\t * Selects the previous / next item (depending\n\t\t * on the `direction` argument).\n\t\t *\n\t\t * > 0 - right\n\t\t * < 0 - left\n\t\t *\n\t\t * @param {int} direction\n\t\t * @param {object} e (optional)\n\t\t */\n\t\tadvanceSelection: function(direction, e) {\n\t\t\tvar tail, selection, idx, valueLength, cursorAtEdge, $tail;\n\t\t\tvar self = this;\n\t\n\t\t\tif (direction === 0) return;\n\t\t\tif (self.rtl) direction *= -1;\n\t\n\t\t\ttail = direction > 0 ? 'last' : 'first';\n\t\t\tselection = getSelection(self.$control_input[0]);\n\t\n\t\t\tif (self.isFocused && !self.isInputHidden) {\n\t\t\t\tvalueLength = self.$control_input.val().length;\n\t\t\t\tcursorAtEdge = direction < 0\n\t\t\t\t\t? selection.start === 0 && selection.length === 0\n\t\t\t\t\t: selection.start === valueLength;\n\t\n\t\t\t\tif (cursorAtEdge && !valueLength) {\n\t\t\t\t\tself.advanceCaret(direction, e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t$tail = self.$control.children('.active:' + tail);\n\t\t\t\tif ($tail.length) {\n\t\t\t\t\tidx = self.$control.children(':not(input)').index($tail);\n\t\t\t\t\tself.setActiveItem(null);\n\t\t\t\t\tself.setCaret(direction > 0 ? idx + 1 : idx);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Moves the caret left / right.\n\t\t *\n\t\t * @param {int} direction\n\t\t * @param {object} e (optional)\n\t\t */\n\t\tadvanceCaret: function(direction, e) {\n\t\t\tvar self = this, fn, $adj;\n\t\n\t\t\tif (direction === 0) return;\n\t\n\t\t\tfn = direction > 0 ? 'next' : 'prev';\n\t\t\tif (self.isShiftDown) {\n\t\t\t\t$adj = self.$control_input[fn]();\n\t\t\t\tif ($adj.length) {\n\t\t\t\t\tself.hideInput();\n\t\t\t\t\tself.setActiveItem($adj);\n\t\t\t\t\te && e.preventDefault();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.setCaret(self.caretPos + direction);\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Moves the caret to the specified index.\n\t\t *\n\t\t * @param {int} i\n\t\t */\n\t\tsetCaret: function(i) {\n\t\t\tvar self = this;\n\t\n\t\t\tif (self.settings.mode === 'single') {\n\t\t\t\ti = self.items.length;\n\t\t\t} else {\n\t\t\t\ti = Math.max(0, Math.min(self.items.length, i));\n\t\t\t}\n\t\n\t\t\tif(!self.isPending) {\n\t\t\t\t// the input must be moved by leaving it in place and moving the\n\t\t\t\t// siblings, due to the fact that focus cannot be restored once lost\n\t\t\t\t// on mobile webkit devices\n\t\t\t\tvar j, n, fn, $children, $child;\n\t\t\t\t$children = self.$control.children(':not(input)');\n\t\t\t\tfor (j = 0, n = $children.length; j < n; j++) {\n\t\t\t\t\t$child = $($children[j]).detach();\n\t\t\t\t\tif (j <  i) {\n\t\t\t\t\t\tself.$control_input.before($child);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.$control.append($child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tself.caretPos = i;\n\t\t},\n\t\n\t\t/**\n\t\t * Disables user input on the control. Used while\n\t\t * items are being asynchronously created.\n\t\t */\n\t\tlock: function() {\n\t\t\tthis.close();\n\t\t\tthis.isLocked = true;\n\t\t\tthis.refreshState();\n\t\t},\n\t\n\t\t/**\n\t\t * Re-enables user input on the control.\n\t\t */\n\t\tunlock: function() {\n\t\t\tthis.isLocked = false;\n\t\t\tthis.refreshState();\n\t\t},\n\t\n\t\t/**\n\t\t * Disables user input on the control completely.\n\t\t * While disabled, it cannot receive focus.\n\t\t */\n\t\tdisable: function() {\n\t\t\tvar self = this;\n\t\t\tself.$input.prop('disabled', true);\n\t\t\tself.$control_input.prop('disabled', true).prop('tabindex', -1);\n\t\t\tself.isDisabled = true;\n\t\t\tself.lock();\n\t\t},\n\t\n\t\t/**\n\t\t * Enables the control so that it can respond\n\t\t * to focus and user input.\n\t\t */\n\t\tenable: function() {\n\t\t\tvar self = this;\n\t\t\tself.$input.prop('disabled', false);\n\t\t\tself.$control_input.prop('disabled', false).prop('tabindex', self.tabIndex);\n\t\t\tself.isDisabled = false;\n\t\t\tself.unlock();\n\t\t},\n\t\n\t\t/**\n\t\t * Completely destroys the control and\n\t\t * unbinds all event listeners so that it can\n\t\t * be garbage collected.\n\t\t */\n\t\tdestroy: function() {\n\t\t\tvar self = this;\n\t\t\tvar eventNS = self.eventNS;\n\t\t\tvar revertSettings = self.revertSettings;\n\t\n\t\t\tself.trigger('destroy');\n\t\t\tself.off();\n\t\t\tself.$wrapper.remove();\n\t\t\tself.$dropdown.remove();\n\t\n\t\t\tself.$input\n\t\t\t\t.html('')\n\t\t\t\t.append(revertSettings.$children)\n\t\t\t\t.removeAttr('tabindex')\n\t\t\t\t.removeClass('selectized')\n\t\t\t\t.attr({tabindex: revertSettings.tabindex})\n\t\t\t\t.show();\n\t\n\t\t\tself.$control_input.removeData('grow');\n\t\t\tself.$input.removeData('selectize');\n\t\n\t\t\tif (--Selectize.count == 0 && Selectize.$testInput) {\n\t\t\t\tSelectize.$testInput.remove();\n\t\t\t\tSelectize.$testInput = undefined;\n\t\t\t}\n\t\n\t\t\t$(window).off(eventNS);\n\t\t\t$(document).off(eventNS);\n\t\t\t$(document.body).off(eventNS);\n\t\n\t\t\tdelete self.$input[0].selectize;\n\t\t},\n\t\n\t\t/**\n\t\t * A helper method for rendering \"item\" and\n\t\t * \"option\" templates, given the data.\n\t\t *\n\t\t * @param {string} templateName\n\t\t * @param {object} data\n\t\t * @returns {string}\n\t\t */\n\t\trender: function(templateName, data) {\n\t\t\tvar value, id, label;\n\t\t\tvar html = '';\n\t\t\tvar cache = false;\n\t\t\tvar self = this;\n\t\t\tvar regex_tag = /^[\\t \\r\\n]*<([a-z][a-z0-9\\-_]*(?:\\:[a-z][a-z0-9\\-_]*)?)/i;\n\t\n\t\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\t\tvalue = hash_key(data[self.settings.valueField]);\n\t\t\t\tcache = !!value;\n\t\t\t}\n\t\n\t\t\t// pull markup from cache if it exists\n\t\t\tif (cache) {\n\t\t\t\tif (!isset(self.renderCache[templateName])) {\n\t\t\t\t\tself.renderCache[templateName] = {};\n\t\t\t\t}\n\t\t\t\tif (self.renderCache[templateName].hasOwnProperty(value)) {\n\t\t\t\t\treturn self.renderCache[templateName][value];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// render markup\n\t\t\thtml = $(self.settings.render[templateName].apply(this, [data, escape_html]));\n\t\n\t\t\t// add mandatory attributes\n\t\t\tif (templateName === 'option' || templateName === 'option_create') {\n\t\t\t\tif (!data[self.settings.disabledField]) {\n\t\t\t\t\thtml.attr('data-selectable', '');\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (templateName === 'optgroup') {\n\t\t\t\tid = data[self.settings.optgroupValueField] || '';\n\t\t\t\thtml.attr('data-group', id);\n\t\t\t\tif(data[self.settings.disabledField]) {\n\t\t\t\t\thtml.attr('data-disabled', '');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\t\thtml.attr('data-value', value || '');\n\t\t\t}\n\t\n\t\t\t// update cache\n\t\t\tif (cache) {\n\t\t\t\tself.renderCache[templateName][value] = html[0];\n\t\t\t}\n\t\n\t\t\treturn html[0];\n\t\t},\n\t\n\t\t/**\n\t\t * Clears the render cache for a template. If\n\t\t * no template is given, clears all render\n\t\t * caches.\n\t\t *\n\t\t * @param {string} templateName\n\t\t */\n\t\tclearCache: function(templateName) {\n\t\t\tvar self = this;\n\t\t\tif (typeof templateName === 'undefined') {\n\t\t\t\tself.renderCache = {};\n\t\t\t} else {\n\t\t\t\tdelete self.renderCache[templateName];\n\t\t\t}\n\t\t},\n\t\n\t\t/**\n\t\t * Determines whether or not to display the\n\t\t * create item prompt, given a user input.\n\t\t *\n\t\t * @param {string} input\n\t\t * @return {boolean}\n\t\t */\n\t\tcanCreate: function(input) {\n\t\t\tvar self = this;\n\t\t\tif (!self.settings.create) return false;\n\t\t\tvar filter = self.settings.createFilter;\n\t\t\treturn input.length\n\t\t\t\t&& (typeof filter !== 'function' || filter.apply(self, [input]))\n\t\t\t\t&& (typeof filter !== 'string' || new RegExp(filter).test(input))\n\t\t\t\t&& (!(filter instanceof RegExp) || filter.test(input));\n\t\t}\n\t\n\t});\n\t\n\t\n\tSelectize.count = 0;\n\tSelectize.defaults = {\n\t\toptions: [],\n\t\toptgroups: [],\n\t\n\t\tplugins: [],\n\t\tdelimiter: ',',\n\t\tsplitOn: null, // regexp or string for splitting up values from a paste command\n\t\tpersist: true,\n\t\tdiacritics: true,\n\t\tcreate: false,\n\t\tcreateOnBlur: false,\n\t\tcreateFilter: null,\n\t\thighlight: true,\n\t\topenOnFocus: true,\n\t\tmaxOptions: 1000,\n\t\tmaxItems: null,\n\t\thideSelected: null,\n\t\taddPrecedence: false,\n\t\tselectOnTab: false,\n\t\tpreload: false,\n\t\tallowEmptyOption: false,\n\t\tcloseAfterSelect: false,\n\t\n\t\tscrollDuration: 60,\n\t\tloadThrottle: 300,\n\t\tloadingClass: 'loading',\n\t\n\t\tdataAttr: 'data-data',\n\t\toptgroupField: 'optgroup',\n\t\tvalueField: 'value',\n\t\tlabelField: 'text',\n\t\tdisabledField: 'disabled',\n\t\toptgroupLabelField: 'label',\n\t\toptgroupValueField: 'value',\n\t\tlockOptgroupOrder: false,\n\t\n\t\tsortField: '$order',\n\t\tsearchField: ['text'],\n\t\tsearchConjunction: 'and',\n\t\n\t\tmode: null,\n\t\twrapperClass: 'selectize-control',\n\t\tinputClass: 'selectize-input',\n\t\tdropdownClass: 'selectize-dropdown',\n\t\tdropdownContentClass: 'selectize-dropdown-content',\n\t\n\t\tdropdownParent: null,\n\t\n\t\tcopyClassesToDropdown: true,\n\t\n\t\t/*\n\t\tload                 : null, // function(query, callback) { ... }\n\t\tscore                : null, // function(search) { ... }\n\t\tonInitialize         : null, // function() { ... }\n\t\tonChange             : null, // function(value) { ... }\n\t\tonItemAdd            : null, // function(value, $item) { ... }\n\t\tonItemRemove         : null, // function(value) { ... }\n\t\tonClear              : null, // function() { ... }\n\t\tonOptionAdd          : null, // function(value, data) { ... }\n\t\tonOptionRemove       : null, // function(value) { ... }\n\t\tonOptionClear        : null, // function() { ... }\n\t\tonOptionGroupAdd     : null, // function(id, data) { ... }\n\t\tonOptionGroupRemove  : null, // function(id) { ... }\n\t\tonOptionGroupClear   : null, // function() { ... }\n\t\tonDropdownOpen       : null, // function($dropdown) { ... }\n\t\tonDropdownClose      : null, // function($dropdown) { ... }\n\t\tonType               : null, // function(str) { ... }\n\t\tonDelete             : null, // function(values) { ... }\n\t\t*/\n\t\n\t\trender: {\n\t\t\t/*\n\t\t\titem: null,\n\t\t\toptgroup: null,\n\t\t\toptgroup_header: null,\n\t\t\toption: null,\n\t\t\toption_create: null\n\t\t\t*/\n\t\t}\n\t};\n\t\n\t\n\t$.fn.selectize = function(settings_user) {\n\t\tvar defaults             = $.fn.selectize.defaults;\n\t\tvar settings             = $.extend({}, defaults, settings_user);\n\t\tvar attr_data            = settings.dataAttr;\n\t\tvar field_label          = settings.labelField;\n\t\tvar field_value          = settings.valueField;\n\t\tvar field_disabled       = settings.disabledField;\n\t\tvar field_optgroup       = settings.optgroupField;\n\t\tvar field_optgroup_label = settings.optgroupLabelField;\n\t\tvar field_optgroup_value = settings.optgroupValueField;\n\t\n\t\t/**\n\t\t * Initializes selectize from a <input type=\"text\"> element.\n\t\t *\n\t\t * @param {object} $input\n\t\t * @param {object} settings_element\n\t\t */\n\t\tvar init_textbox = function($input, settings_element) {\n\t\t\tvar i, n, values, option;\n\t\n\t\t\tvar data_raw = $input.attr(attr_data);\n\t\n\t\t\tif (!data_raw) {\n\t\t\t\tvar value = $.trim($input.val() || '');\n\t\t\t\tif (!settings.allowEmptyOption && !value.length) return;\n\t\t\t\tvalues = value.split(settings.delimiter);\n\t\t\t\tfor (i = 0, n = values.length; i < n; i++) {\n\t\t\t\t\toption = {};\n\t\t\t\t\toption[field_label] = values[i];\n\t\t\t\t\toption[field_value] = values[i];\n\t\t\t\t\tsettings_element.options.push(option);\n\t\t\t\t}\n\t\t\t\tsettings_element.items = values;\n\t\t\t} else {\n\t\t\t\tsettings_element.options = JSON.parse(data_raw);\n\t\t\t\tfor (i = 0, n = settings_element.options.length; i < n; i++) {\n\t\t\t\t\tsettings_element.items.push(settings_element.options[i][field_value]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\t/**\n\t\t * Initializes selectize from a <select> element.\n\t\t *\n\t\t * @param {object} $input\n\t\t * @param {object} settings_element\n\t\t */\n\t\tvar init_select = function($input, settings_element) {\n\t\t\tvar i, n, tagName, $children, order = 0;\n\t\t\tvar options = settings_element.options;\n\t\t\tvar optionsMap = {};\n\t\n\t\t\tvar readData = function($el) {\n\t\t\t\tvar data = attr_data && $el.attr(attr_data);\n\t\t\t\tif (typeof data === 'string' && data.length) {\n\t\t\t\t\treturn JSON.parse(data);\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t};\n\t\n\t\t\tvar addOption = function($option, group) {\n\t\t\t\t$option = $($option);\n\t\n\t\t\t\tvar value = hash_key($option.val());\n\t\t\t\tif (!value && !settings.allowEmptyOption) return;\n\t\n\t\t\t\t// if the option already exists, it's probably been\n\t\t\t\t// duplicated in another optgroup. in this case, push\n\t\t\t\t// the current group to the \"optgroup\" property on the\n\t\t\t\t// existing option so that it's rendered in both places.\n\t\t\t\tif (optionsMap.hasOwnProperty(value)) {\n\t\t\t\t\tif (group) {\n\t\t\t\t\t\tvar arr = optionsMap[value][field_optgroup];\n\t\t\t\t\t\tif (!arr) {\n\t\t\t\t\t\t\toptionsMap[value][field_optgroup] = group;\n\t\t\t\t\t\t} else if (!$.isArray(arr)) {\n\t\t\t\t\t\t\toptionsMap[value][field_optgroup] = [arr, group];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tarr.push(group);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\tvar option             = readData($option) || {};\n\t\t\t\toption[field_label]    = option[field_label] || $option.text();\n\t\t\t\toption[field_value]    = option[field_value] || value;\n\t\t\t\toption[field_disabled] = option[field_disabled] || $option.prop('disabled');\n\t\t\t\toption[field_optgroup] = option[field_optgroup] || group;\n\t\n\t\t\t\toptionsMap[value] = option;\n\t\t\t\toptions.push(option);\n\t\n\t\t\t\tif ($option.is(':selected')) {\n\t\t\t\t\tsettings_element.items.push(value);\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tvar addGroup = function($optgroup) {\n\t\t\t\tvar i, n, id, optgroup, $options;\n\t\n\t\t\t\t$optgroup = $($optgroup);\n\t\t\t\tid = $optgroup.attr('label');\n\t\n\t\t\t\tif (id) {\n\t\t\t\t\toptgroup = readData($optgroup) || {};\n\t\t\t\t\toptgroup[field_optgroup_label] = id;\n\t\t\t\t\toptgroup[field_optgroup_value] = id;\n\t\t\t\t\toptgroup[field_disabled] = $optgroup.prop('disabled');\n\t\t\t\t\tsettings_element.optgroups.push(optgroup);\n\t\t\t\t}\n\t\n\t\t\t\t$options = $('option', $optgroup);\n\t\t\t\tfor (i = 0, n = $options.length; i < n; i++) {\n\t\t\t\t\taddOption($options[i], id);\n\t\t\t\t}\n\t\t\t};\n\t\n\t\t\tsettings_element.maxItems = $input.attr('multiple') ? null : 1;\n\t\n\t\t\t$children = $input.children();\n\t\t\tfor (i = 0, n = $children.length; i < n; i++) {\n\t\t\t\ttagName = $children[i].tagName.toLowerCase();\n\t\t\t\tif (tagName === 'optgroup') {\n\t\t\t\t\taddGroup($children[i]);\n\t\t\t\t} else if (tagName === 'option') {\n\t\t\t\t\taddOption($children[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\treturn this.each(function() {\n\t\t\tif (this.selectize) return;\n\t\n\t\t\tvar instance;\n\t\t\tvar $input = $(this);\n\t\t\tvar tag_name = this.tagName.toLowerCase();\n\t\t\tvar placeholder = $input.attr('placeholder') || $input.attr('data-placeholder');\n\t\t\tif (!placeholder && !settings.allowEmptyOption) {\n\t\t\t\tplaceholder = $input.children('option[value=\"\"]').text();\n\t\t\t}\n\t\n\t\t\tvar settings_element = {\n\t\t\t\t'placeholder' : placeholder,\n\t\t\t\t'options'     : [],\n\t\t\t\t'optgroups'   : [],\n\t\t\t\t'items'       : []\n\t\t\t};\n\t\n\t\t\tif (tag_name === 'select') {\n\t\t\t\tinit_select($input, settings_element);\n\t\t\t} else {\n\t\t\t\tinit_textbox($input, settings_element);\n\t\t\t}\n\t\n\t\t\tinstance = new Selectize($input, $.extend(true, {}, defaults, settings_element, settings_user));\n\t\t});\n\t};\n\t\n\t$.fn.selectize.defaults = Selectize.defaults;\n\t$.fn.selectize.support = {\n\t\tvalidity: SUPPORTS_VALIDITY_API\n\t};\n\t\n\t\n\tSelectize.define('drag_drop', function(options) {\n\t\tif (!$.fn.sortable) throw new Error('The \"drag_drop\" plugin requires jQuery UI \"sortable\".');\n\t\tif (this.settings.mode !== 'multi') return;\n\t\tvar self = this;\n\t\n\t\tself.lock = (function() {\n\t\t\tvar original = self.lock;\n\t\t\treturn function() {\n\t\t\t\tvar sortable = self.$control.data('sortable');\n\t\t\t\tif (sortable) sortable.disable();\n\t\t\t\treturn original.apply(self, arguments);\n\t\t\t};\n\t\t})();\n\t\n\t\tself.unlock = (function() {\n\t\t\tvar original = self.unlock;\n\t\t\treturn function() {\n\t\t\t\tvar sortable = self.$control.data('sortable');\n\t\t\t\tif (sortable) sortable.enable();\n\t\t\t\treturn original.apply(self, arguments);\n\t\t\t};\n\t\t})();\n\t\n\t\tself.setup = (function() {\n\t\t\tvar original = self.setup;\n\t\t\treturn function() {\n\t\t\t\toriginal.apply(this, arguments);\n\t\n\t\t\t\tvar $control = self.$control.sortable({\n\t\t\t\t\titems: '[data-value]',\n\t\t\t\t\tforcePlaceholderSize: true,\n\t\t\t\t\tdisabled: self.isLocked,\n\t\t\t\t\tstart: function(e, ui) {\n\t\t\t\t\t\tui.placeholder.css('width', ui.helper.css('width'));\n\t\t\t\t\t\t$control.css({overflow: 'visible'});\n\t\t\t\t\t},\n\t\t\t\t\tstop: function() {\n\t\t\t\t\t\t$control.css({overflow: 'hidden'});\n\t\t\t\t\t\tvar active = self.$activeItems ? self.$activeItems.slice() : null;\n\t\t\t\t\t\tvar values = [];\n\t\t\t\t\t\t$control.children('[data-value]').each(function() {\n\t\t\t\t\t\t\tvalues.push($(this).attr('data-value'));\n\t\t\t\t\t\t});\n\t\t\t\t\t\tself.setValue(values);\n\t\t\t\t\t\tself.setActiveItem(active);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\t\t})();\n\t\n\t});\n\t\n\tSelectize.define('dropdown_header', function(options) {\n\t\tvar self = this;\n\t\n\t\toptions = $.extend({\n\t\t\ttitle         : 'Untitled',\n\t\t\theaderClass   : 'selectize-dropdown-header',\n\t\t\ttitleRowClass : 'selectize-dropdown-header-title',\n\t\t\tlabelClass    : 'selectize-dropdown-header-label',\n\t\t\tcloseClass    : 'selectize-dropdown-header-close',\n\t\n\t\t\thtml: function(data) {\n\t\t\t\treturn (\n\t\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t\t'<a href=\"javascript:void(0)\" class=\"' + data.closeClass + '\">&times;</a>' +\n\t\t\t\t\t\t'</div>' +\n\t\t\t\t\t'</div>'\n\t\t\t\t);\n\t\t\t}\n\t\t}, options);\n\t\n\t\tself.setup = (function() {\n\t\t\tvar original = self.setup;\n\t\t\treturn function() {\n\t\t\t\toriginal.apply(self, arguments);\n\t\t\t\tself.$dropdown_header = $(options.html(options));\n\t\t\t\tself.$dropdown.prepend(self.$dropdown_header);\n\t\t\t};\n\t\t})();\n\t\n\t});\n\t\n\tSelectize.define('optgroup_columns', function(options) {\n\t\tvar self = this;\n\t\n\t\toptions = $.extend({\n\t\t\tequalizeWidth  : true,\n\t\t\tequalizeHeight : true\n\t\t}, options);\n\t\n\t\tthis.getAdjacentOption = function($option, direction) {\n\t\t\tvar $options = $option.closest('[data-group]').find('[data-selectable]');\n\t\t\tvar index    = $options.index($option) + direction;\n\t\n\t\t\treturn index >= 0 && index < $options.length ? $options.eq(index) : $();\n\t\t};\n\t\n\t\tthis.onKeyDown = (function() {\n\t\t\tvar original = self.onKeyDown;\n\t\t\treturn function(e) {\n\t\t\t\tvar index, $option, $options, $optgroup;\n\t\n\t\t\t\tif (this.isOpen && (e.keyCode === KEY_LEFT || e.keyCode === KEY_RIGHT)) {\n\t\t\t\t\tself.ignoreHover = true;\n\t\t\t\t\t$optgroup = this.$activeOption.closest('[data-group]');\n\t\t\t\t\tindex = $optgroup.find('[data-selectable]').index(this.$activeOption);\n\t\n\t\t\t\t\tif(e.keyCode === KEY_LEFT) {\n\t\t\t\t\t\t$optgroup = $optgroup.prev('[data-group]');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$optgroup = $optgroup.next('[data-group]');\n\t\t\t\t\t}\n\t\n\t\t\t\t\t$options = $optgroup.find('[data-selectable]');\n\t\t\t\t\t$option  = $options.eq(Math.min($options.length - 1, index));\n\t\t\t\t\tif ($option.length) {\n\t\t\t\t\t\tthis.setActiveOption($option);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\treturn original.apply(this, arguments);\n\t\t\t};\n\t\t})();\n\t\n\t\tvar getScrollbarWidth = function() {\n\t\t\tvar div;\n\t\t\tvar width = getScrollbarWidth.width;\n\t\t\tvar doc = document;\n\t\n\t\t\tif (typeof width === 'undefined') {\n\t\t\t\tdiv = doc.createElement('div');\n\t\t\t\tdiv.innerHTML = '<div style=\"width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;\"><div style=\"width:1px;height:100px;\"></div></div>';\n\t\t\t\tdiv = div.firstChild;\n\t\t\t\tdoc.body.appendChild(div);\n\t\t\t\twidth = getScrollbarWidth.width = div.offsetWidth - div.clientWidth;\n\t\t\t\tdoc.body.removeChild(div);\n\t\t\t}\n\t\t\treturn width;\n\t\t};\n\t\n\t\tvar equalizeSizes = function() {\n\t\t\tvar i, n, height_max, width, width_last, width_parent, $optgroups;\n\t\n\t\t\t$optgroups = $('[data-group]', self.$dropdown_content);\n\t\t\tn = $optgroups.length;\n\t\t\tif (!n || !self.$dropdown_content.width()) return;\n\t\n\t\t\tif (options.equalizeHeight) {\n\t\t\t\theight_max = 0;\n\t\t\t\tfor (i = 0; i < n; i++) {\n\t\t\t\t\theight_max = Math.max(height_max, $optgroups.eq(i).height());\n\t\t\t\t}\n\t\t\t\t$optgroups.css({height: height_max});\n\t\t\t}\n\t\n\t\t\tif (options.equalizeWidth) {\n\t\t\t\twidth_parent = self.$dropdown_content.innerWidth() - getScrollbarWidth();\n\t\t\t\twidth = Math.round(width_parent / n);\n\t\t\t\t$optgroups.css({width: width});\n\t\t\t\tif (n > 1) {\n\t\t\t\t\twidth_last = width_parent - width * (n - 1);\n\t\t\t\t\t$optgroups.eq(n - 1).css({width: width_last});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\n\t\tif (options.equalizeHeight || options.equalizeWidth) {\n\t\t\thook.after(this, 'positionDropdown', equalizeSizes);\n\t\t\thook.after(this, 'refreshOptions', equalizeSizes);\n\t\t}\n\t\n\t\n\t});\n\t\n\tSelectize.define('remove_button', function(options) {\n\t\toptions = $.extend({\n\t\t\t\tlabel     : '&times;',\n\t\t\t\ttitle     : 'Remove',\n\t\t\t\tclassName : 'remove',\n\t\t\t\tappend    : true\n\t\t\t}, options);\n\t\n\t\t\tvar singleClose = function(thisRef, options) {\n\t\n\t\t\t\toptions.className = 'remove-single';\n\t\n\t\t\t\tvar self = thisRef;\n\t\t\t\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\t\n\t\t\t\t/**\n\t\t\t\t * Appends an element as a child (with raw HTML).\n\t\t\t\t *\n\t\t\t\t * @param {string} html_container\n\t\t\t\t * @param {string} html_element\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tvar append = function(html_container, html_element) {\n\t\t\t\t\treturn $('<span>').append(html_container)\n\t\t\t\t\t\t.append(html_element);\n\t\t\t\t};\n\t\n\t\t\t\tthisRef.setup = (function() {\n\t\t\t\t\tvar original = self.setup;\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\t// override the item rendering method to add the button to each\n\t\t\t\t\t\tif (options.append) {\n\t\t\t\t\t\t\tvar id = $(self.$input.context).attr('id');\n\t\t\t\t\t\t\tvar selectizer = $('#'+id);\n\t\n\t\t\t\t\t\t\tvar render_item = self.settings.render.item;\n\t\t\t\t\t\t\tself.settings.render.item = function(data) {\n\t\t\t\t\t\t\t\treturn append(render_item.apply(thisRef, arguments), html);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\toriginal.apply(thisRef, arguments);\n\t\n\t\t\t\t\t\t// add event listener\n\t\t\t\t\t\tthisRef.$control.on('click', '.' + options.className, function(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (self.isLocked) return;\n\t\n\t\t\t\t\t\t\tself.clear();\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t};\n\t\t\t\t})();\n\t\t\t};\n\t\n\t\t\tvar multiClose = function(thisRef, options) {\n\t\n\t\t\t\tvar self = thisRef;\n\t\t\t\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\t\n\t\t\t\t/**\n\t\t\t\t * Appends an element as a child (with raw HTML).\n\t\t\t\t *\n\t\t\t\t * @param {string} html_container\n\t\t\t\t * @param {string} html_element\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\t\t\t\tvar append = function(html_container, html_element) {\n\t\t\t\t\tvar pos = html_container.search(/(<\\/[^>]+>\\s*)$/);\n\t\t\t\t\treturn html_container.substring(0, pos) + html_element + html_container.substring(pos);\n\t\t\t\t};\n\t\n\t\t\t\tthisRef.setup = (function() {\n\t\t\t\t\tvar original = self.setup;\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\t// override the item rendering method to add the button to each\n\t\t\t\t\t\tif (options.append) {\n\t\t\t\t\t\t\tvar render_item = self.settings.render.item;\n\t\t\t\t\t\t\tself.settings.render.item = function(data) {\n\t\t\t\t\t\t\t\treturn append(render_item.apply(thisRef, arguments), html);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\toriginal.apply(thisRef, arguments);\n\t\n\t\t\t\t\t\t// add event listener\n\t\t\t\t\t\tthisRef.$control.on('click', '.' + options.className, function(e) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tif (self.isLocked) return;\n\t\n\t\t\t\t\t\t\tvar $item = $(e.currentTarget).parent();\n\t\t\t\t\t\t\tself.setActiveItem($item);\n\t\t\t\t\t\t\tif (self.deleteSelection()) {\n\t\t\t\t\t\t\t\tself.setCaret(self.items.length);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t};\n\t\t\t\t})();\n\t\t\t};\n\t\n\t\t\tif (this.settings.mode === 'single') {\n\t\t\t\tsingleClose(this, options);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tmultiClose(this, options);\n\t\t\t}\n\t});\n\t\n\t\n\tSelectize.define('restore_on_backspace', function(options) {\n\t\tvar self = this;\n\t\n\t\toptions.text = options.text || function(option) {\n\t\t\treturn option[this.settings.labelField];\n\t\t};\n\t\n\t\tthis.onKeyDown = (function() {\n\t\t\tvar original = self.onKeyDown;\n\t\t\treturn function(e) {\n\t\t\t\tvar index, option;\n\t\t\t\tif (e.keyCode === KEY_BACKSPACE && this.$control_input.val() === '' && !this.$activeItems.length) {\n\t\t\t\t\tindex = this.caretPos - 1;\n\t\t\t\t\tif (index >= 0 && index < this.items.length) {\n\t\t\t\t\t\toption = this.options[this.items[index]];\n\t\t\t\t\t\tif (this.deleteSelection(e)) {\n\t\t\t\t\t\t\tthis.setTextboxValue(options.text.apply(this, [option]));\n\t\t\t\t\t\t\tthis.refreshOptions(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn original.apply(this, arguments);\n\t\t\t};\n\t\t})();\n\t});\n\t\n\n\treturn Selectize;\n}));", "//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        return name.match('^[^/\\\\\\\\]*$') != null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.4';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n", "//! moment-timezone.js\n//! version : 0.5.41\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n\n(function (root, factory) {\n\t\"use strict\";\n\n\t/*global define*/\n\tif (typeof module === 'object' && module.exports) {\n\t\tmodule.exports = factory(require('moment')); // Node\n\t} else if (typeof define === 'function' && define.amd) {\n\t\tdefine(['moment'], factory);                 // AMD\n\t} else {\n\t\tfactory(root.moment);                        // Browser\n\t}\n}(this, function (moment) {\n\t\"use strict\";\n\n\t// Resolves es6 module loading issue\n\tif (moment.version === undefined && moment.default) {\n\t\tmoment = moment.default;\n\t}\n\n\t// Do not load moment-timezone a second time.\n\t// if (moment.tz !== undefined) {\n\t// \tlogError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);\n\t// \treturn moment;\n\t// }\n\n\tvar VERSION = \"0.5.41\",\n\t\tzones = {},\n\t\tlinks = {},\n\t\tcountries = {},\n\t\tnames = {},\n\t\tguesses = {},\n\t\tcachedGuess;\n\n\tif (!moment || typeof moment.version !== 'string') {\n\t\tlogError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');\n\t}\n\n\tvar momentVersion = moment.version.split('.'),\n\t\tmajor = +momentVersion[0],\n\t\tminor = +momentVersion[1];\n\n\t// Moment.js version check\n\tif (major < 2 || (major === 2 && minor < 6)) {\n\t\tlogError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');\n\t}\n\n\t/************************************\n\t\tUnpacking\n\t************************************/\n\n\tfunction charCodeToInt(charCode) {\n\t\tif (charCode > 96) {\n\t\t\treturn charCode - 87;\n\t\t} else if (charCode > 64) {\n\t\t\treturn charCode - 29;\n\t\t}\n\t\treturn charCode - 48;\n\t}\n\n\tfunction unpackBase60(string) {\n\t\tvar i = 0,\n\t\t\tparts = string.split('.'),\n\t\t\twhole = parts[0],\n\t\t\tfractional = parts[1] || '',\n\t\t\tmultiplier = 1,\n\t\t\tnum,\n\t\t\tout = 0,\n\t\t\tsign = 1;\n\n\t\t// handle negative numbers\n\t\tif (string.charCodeAt(0) === 45) {\n\t\t\ti = 1;\n\t\t\tsign = -1;\n\t\t}\n\n\t\t// handle digits before the decimal\n\t\tfor (i; i < whole.length; i++) {\n\t\t\tnum = charCodeToInt(whole.charCodeAt(i));\n\t\t\tout = 60 * out + num;\n\t\t}\n\n\t\t// handle digits after the decimal\n\t\tfor (i = 0; i < fractional.length; i++) {\n\t\t\tmultiplier = multiplier / 60;\n\t\t\tnum = charCodeToInt(fractional.charCodeAt(i));\n\t\t\tout += num * multiplier;\n\t\t}\n\n\t\treturn out * sign;\n\t}\n\n\tfunction arrayToInt (array) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tarray[i] = unpackBase60(array[i]);\n\t\t}\n\t}\n\n\tfunction intToUntil (array, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tarray[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds\n\t\t}\n\n\t\tarray[length - 1] = Infinity;\n\t}\n\n\tfunction mapIndices (source, indices) {\n\t\tvar out = [], i;\n\n\t\tfor (i = 0; i < indices.length; i++) {\n\t\t\tout[i] = source[indices[i]];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction unpack (string) {\n\t\tvar data = string.split('|'),\n\t\t\toffsets = data[2].split(' '),\n\t\t\tindices = data[3].split(''),\n\t\t\tuntils  = data[4].split(' ');\n\n\t\tarrayToInt(offsets);\n\t\tarrayToInt(indices);\n\t\tarrayToInt(untils);\n\n\t\tintToUntil(untils, indices.length);\n\n\t\treturn {\n\t\t\tname       : data[0],\n\t\t\tabbrs      : mapIndices(data[1].split(' '), indices),\n\t\t\toffsets    : mapIndices(offsets, indices),\n\t\t\tuntils     : untils,\n\t\t\tpopulation : data[5] | 0\n\t\t};\n\t}\n\n\t/************************************\n\t\tZone object\n\t************************************/\n\n\tfunction Zone (packedString) {\n\t\tif (packedString) {\n\t\t\tthis._set(unpack(packedString));\n\t\t}\n\t}\n\n\tZone.prototype = {\n\t\t_set : function (unpacked) {\n\t\t\tthis.name       = unpacked.name;\n\t\t\tthis.abbrs      = unpacked.abbrs;\n\t\t\tthis.untils     = unpacked.untils;\n\t\t\tthis.offsets    = unpacked.offsets;\n\t\t\tthis.population = unpacked.population;\n\t\t},\n\n\t\t_index : function (timestamp) {\n\t\t\tvar target = +timestamp,\n\t\t\t\tuntils = this.untils,\n\t\t\t\ti;\n\n\t\t\tfor (i = 0; i < untils.length; i++) {\n\t\t\t\tif (target < untils[i]) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tcountries : function () {\n\t\t\tvar zone_name = this.name;\n\t\t\treturn Object.keys(countries).filter(function (country_code) {\n\t\t\t\treturn countries[country_code].zones.indexOf(zone_name) !== -1;\n\t\t\t});\n\t\t},\n\n\t\tparse : function (timestamp) {\n\t\t\tvar target  = +timestamp,\n\t\t\t\toffsets = this.offsets,\n\t\t\t\tuntils  = this.untils,\n\t\t\t\tmax     = untils.length - 1,\n\t\t\t\toffset, offsetNext, offsetPrev, i;\n\n\t\t\tfor (i = 0; i < max; i++) {\n\t\t\t\toffset     = offsets[i];\n\t\t\t\toffsetNext = offsets[i + 1];\n\t\t\t\toffsetPrev = offsets[i ? i - 1 : i];\n\n\t\t\t\tif (offset < offsetNext && tz.moveAmbiguousForward) {\n\t\t\t\t\toffset = offsetNext;\n\t\t\t\t} else if (offset > offsetPrev && tz.moveInvalidForward) {\n\t\t\t\t\toffset = offsetPrev;\n\t\t\t\t}\n\n\t\t\t\tif (target < untils[i] - (offset * 60000)) {\n\t\t\t\t\treturn offsets[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn offsets[max];\n\t\t},\n\n\t\tabbr : function (mom) {\n\t\t\treturn this.abbrs[this._index(mom)];\n\t\t},\n\n\t\toffset : function (mom) {\n\t\t\tlogError(\"zone.offset has been deprecated in favor of zone.utcOffset\");\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t},\n\n\t\tutcOffset : function (mom) {\n\t\t\treturn this.offsets[this._index(mom)];\n\t\t}\n\t};\n\n\t/************************************\n\t\tCountry object\n\t************************************/\n\n\tfunction Country (country_name, zone_names) {\n\t\tthis.name = country_name;\n\t\tthis.zones = zone_names;\n\t}\n\n\t/************************************\n\t\tCurrent Timezone\n\t************************************/\n\n\tfunction OffsetAt(at) {\n\t\tvar timeString = at.toTimeString();\n\t\tvar abbr = timeString.match(/\\([a-z ]+\\)/i);\n\t\tif (abbr && abbr[0]) {\n\t\t\t// 17:56:31 GMT-0600 (CST)\n\t\t\t// 17:56:31 GMT-0600 (Central Standard Time)\n\t\t\tabbr = abbr[0].match(/[A-Z]/g);\n\t\t\tabbr = abbr ? abbr.join('') : undefined;\n\t\t} else {\n\t\t\t// 17:56:31 CST\n\t\t\t// 17:56:31 GMT+0800 (\u53F0\u5317\u6A19\u6E96\u6642\u9593)\n\t\t\tabbr = timeString.match(/[A-Z]{3,5}/g);\n\t\t\tabbr = abbr ? abbr[0] : undefined;\n\t\t}\n\n\t\tif (abbr === 'GMT') {\n\t\t\tabbr = undefined;\n\t\t}\n\n\t\tthis.at = +at;\n\t\tthis.abbr = abbr;\n\t\tthis.offset = at.getTimezoneOffset();\n\t}\n\n\tfunction ZoneScore(zone) {\n\t\tthis.zone = zone;\n\t\tthis.offsetScore = 0;\n\t\tthis.abbrScore = 0;\n\t}\n\n\tZoneScore.prototype.scoreOffsetAt = function (offsetAt) {\n\t\tthis.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);\n\t\tif (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {\n\t\t\tthis.abbrScore++;\n\t\t}\n\t};\n\n\tfunction findChange(low, high) {\n\t\tvar mid, diff;\n\n\t\twhile ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {\n\t\t\tmid = new OffsetAt(new Date(low.at + diff));\n\t\t\tif (mid.offset === low.offset) {\n\t\t\t\tlow = mid;\n\t\t\t} else {\n\t\t\t\thigh = mid;\n\t\t\t}\n\t\t}\n\n\t\treturn low;\n\t}\n\n\tfunction userOffsets() {\n\t\tvar startYear = new Date().getFullYear() - 2,\n\t\t\tlast = new OffsetAt(new Date(startYear, 0, 1)),\n\t\t\toffsets = [last],\n\t\t\tchange, next, i;\n\n\t\tfor (i = 1; i < 48; i++) {\n\t\t\tnext = new OffsetAt(new Date(startYear, i, 1));\n\t\t\tif (next.offset !== last.offset) {\n\t\t\t\tchange = findChange(last, next);\n\t\t\t\toffsets.push(change);\n\t\t\t\toffsets.push(new OffsetAt(new Date(change.at + 6e4)));\n\t\t\t}\n\t\t\tlast = next;\n\t\t}\n\n\t\tfor (i = 0; i < 4; i++) {\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));\n\t\t\toffsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));\n\t\t}\n\n\t\treturn offsets;\n\t}\n\n\tfunction sortZoneScores (a, b) {\n\t\tif (a.offsetScore !== b.offsetScore) {\n\t\t\treturn a.offsetScore - b.offsetScore;\n\t\t}\n\t\tif (a.abbrScore !== b.abbrScore) {\n\t\t\treturn a.abbrScore - b.abbrScore;\n\t\t}\n\t\tif (a.zone.population !== b.zone.population) {\n\t\t\treturn b.zone.population - a.zone.population;\n\t\t}\n\t\treturn b.zone.name.localeCompare(a.zone.name);\n\t}\n\n\tfunction addToGuesses (name, offsets) {\n\t\tvar i, offset;\n\t\tarrayToInt(offsets);\n\t\tfor (i = 0; i < offsets.length; i++) {\n\t\t\toffset = offsets[i];\n\t\t\tguesses[offset] = guesses[offset] || {};\n\t\t\tguesses[offset][name] = true;\n\t\t}\n\t}\n\n\tfunction guessesForUserOffsets (offsets) {\n\t\tvar offsetsLength = offsets.length,\n\t\t\tfilteredGuesses = {},\n\t\t\tout = [],\n\t\t\ti, j, guessesOffset;\n\n\t\tfor (i = 0; i < offsetsLength; i++) {\n\t\t\tguessesOffset = guesses[offsets[i].offset] || {};\n\t\t\tfor (j in guessesOffset) {\n\t\t\t\tif (guessesOffset.hasOwnProperty(j)) {\n\t\t\t\t\tfilteredGuesses[j] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (i in filteredGuesses) {\n\t\t\tif (filteredGuesses.hasOwnProperty(i)) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\tfunction rebuildGuess () {\n\n\t\t// use Intl API when available and returning valid time zone\n\t\ttry {\n\t\t\tvar intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\t\t\tif (intlName && intlName.length > 3) {\n\t\t\t\tvar name = names[normalizeName(intlName)];\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name;\n\t\t\t\t}\n\t\t\t\tlogError(\"Moment Timezone found \" + intlName + \" from the Intl api, but did not have that data loaded.\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// Intl unavailable, fall back to manual guessing.\n\t\t}\n\n\t\tvar offsets = userOffsets(),\n\t\t\toffsetsLength = offsets.length,\n\t\t\tguesses = guessesForUserOffsets(offsets),\n\t\t\tzoneScores = [],\n\t\t\tzoneScore, i, j;\n\n\t\tfor (i = 0; i < guesses.length; i++) {\n\t\t\tzoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);\n\t\t\tfor (j = 0; j < offsetsLength; j++) {\n\t\t\t\tzoneScore.scoreOffsetAt(offsets[j]);\n\t\t\t}\n\t\t\tzoneScores.push(zoneScore);\n\t\t}\n\n\t\tzoneScores.sort(sortZoneScores);\n\n\t\treturn zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;\n\t}\n\n\tfunction guess (ignoreCache) {\n\t\tif (!cachedGuess || ignoreCache) {\n\t\t\tcachedGuess = rebuildGuess();\n\t\t}\n\t\treturn cachedGuess;\n\t}\n\n\t/************************************\n\t\tGlobal Methods\n\t************************************/\n\n\tfunction normalizeName (name) {\n\t\treturn (name || '').toLowerCase().replace(/\\//g, '_');\n\t}\n\n\tfunction addZone (packed) {\n\t\tvar i, name, split, normalized;\n\n\t\tif (typeof packed === \"string\") {\n\t\t\tpacked = [packed];\n\t\t}\n\n\t\tfor (i = 0; i < packed.length; i++) {\n\t\t\tsplit = packed[i].split('|');\n\t\t\tname = split[0];\n\t\t\tnormalized = normalizeName(name);\n\t\t\tzones[normalized] = packed[i];\n\t\t\tnames[normalized] = name;\n\t\t\taddToGuesses(normalized, split[2].split(' '));\n\t\t}\n\t}\n\n\tfunction getZone (name, caller) {\n\n\t\tname = normalizeName(name);\n\n\t\tvar zone = zones[name];\n\t\tvar link;\n\n\t\tif (zone instanceof Zone) {\n\t\t\treturn zone;\n\t\t}\n\n\t\tif (typeof zone === 'string') {\n\t\t\tzone = new Zone(zone);\n\t\t\tzones[name] = zone;\n\t\t\treturn zone;\n\t\t}\n\n\t\t// Pass getZone to prevent recursion more than 1 level deep\n\t\tif (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {\n\t\t\tzone = zones[name] = new Zone();\n\t\t\tzone._set(link);\n\t\t\tzone.name = names[name];\n\t\t\treturn zone;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getNames () {\n\t\tvar i, out = [];\n\n\t\tfor (i in names) {\n\t\t\tif (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {\n\t\t\t\tout.push(names[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn out.sort();\n\t}\n\n\tfunction getCountryNames () {\n\t\treturn Object.keys(countries);\n\t}\n\n\tfunction addLink (aliases) {\n\t\tvar i, alias, normal0, normal1;\n\n\t\tif (typeof aliases === \"string\") {\n\t\t\taliases = [aliases];\n\t\t}\n\n\t\tfor (i = 0; i < aliases.length; i++) {\n\t\t\talias = aliases[i].split('|');\n\n\t\t\tnormal0 = normalizeName(alias[0]);\n\t\t\tnormal1 = normalizeName(alias[1]);\n\n\t\t\tlinks[normal0] = normal1;\n\t\t\tnames[normal0] = alias[0];\n\n\t\t\tlinks[normal1] = normal0;\n\t\t\tnames[normal1] = alias[1];\n\t\t}\n\t}\n\n\tfunction addCountries (data) {\n\t\tvar i, country_code, country_zones, split;\n\t\tif (!data || !data.length) return;\n\t\tfor (i = 0; i < data.length; i++) {\n\t\t\tsplit = data[i].split('|');\n\t\t\tcountry_code = split[0].toUpperCase();\n\t\t\tcountry_zones = split[1].split(' ');\n\t\t\tcountries[country_code] = new Country(\n\t\t\t\tcountry_code,\n\t\t\t\tcountry_zones\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction getCountry (name) {\n\t\tname = name.toUpperCase();\n\t\treturn countries[name] || null;\n\t}\n\n\tfunction zonesForCountry(country, with_offset) {\n\t\tcountry = getCountry(country);\n\n\t\tif (!country) return null;\n\n\t\tvar zones = country.zones.sort();\n\n\t\tif (with_offset) {\n\t\t\treturn zones.map(function (zone_name) {\n\t\t\t\tvar zone = getZone(zone_name);\n\t\t\t\treturn {\n\t\t\t\t\tname: zone_name,\n\t\t\t\t\toffset: zone.utcOffset(new Date())\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\treturn zones;\n\t}\n\n\tfunction loadData (data) {\n\t\taddZone(data.zones);\n\t\taddLink(data.links);\n\t\taddCountries(data.countries);\n\t\ttz.dataVersion = data.version;\n\t}\n\n\tfunction zoneExists (name) {\n\t\tif (!zoneExists.didShowError) {\n\t\t\tzoneExists.didShowError = true;\n\t\t\t\tlogError(\"moment.tz.zoneExists('\" + name + \"') has been deprecated in favor of !moment.tz.zone('\" + name + \"')\");\n\t\t}\n\t\treturn !!getZone(name);\n\t}\n\n\tfunction needsOffset (m) {\n\t\tvar isUnixTimestamp = (m._f === 'X' || m._f === 'x');\n\t\treturn !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);\n\t}\n\n\tfunction logError (message) {\n\t\tif (typeof console !== 'undefined' && typeof console.error === 'function') {\n\t\t\tconsole.error(message);\n\t\t}\n\t}\n\n\t/************************************\n\t\tmoment.tz namespace\n\t************************************/\n\n\tfunction tz (input) {\n\t\tvar args = Array.prototype.slice.call(arguments, 0, -1),\n\t\t\tname = arguments[arguments.length - 1],\n\t\t\tzone = getZone(name),\n\t\t\tout  = moment.utc.apply(null, args);\n\n\t\tif (zone && !moment.isMoment(input) && needsOffset(out)) {\n\t\t\tout.add(zone.parse(out), 'minutes');\n\t\t}\n\n\t\tout.tz(name);\n\n\t\treturn out;\n\t}\n\n\ttz.version      = VERSION;\n\ttz.dataVersion  = '';\n\ttz._zones       = zones;\n\ttz._links       = links;\n\ttz._names       = names;\n\ttz._countries\t= countries;\n\ttz.add          = addZone;\n\ttz.link         = addLink;\n\ttz.load         = loadData;\n\ttz.zone         = getZone;\n\ttz.zoneExists   = zoneExists; // deprecated in 0.1.0\n\ttz.guess        = guess;\n\ttz.names        = getNames;\n\ttz.Zone         = Zone;\n\ttz.unpack       = unpack;\n\ttz.unpackBase60 = unpackBase60;\n\ttz.needsOffset  = needsOffset;\n\ttz.moveInvalidForward   = true;\n\ttz.moveAmbiguousForward = false;\n\ttz.countries    = getCountryNames;\n\ttz.zonesForCountry = zonesForCountry;\n\n\t/************************************\n\t\tInterface with Moment.js\n\t************************************/\n\n\tvar fn = moment.fn;\n\n\tmoment.tz = tz;\n\n\tmoment.defaultZone = null;\n\n\tmoment.updateOffset = function (mom, keepTime) {\n\t\tvar zone = moment.defaultZone,\n\t\t\toffset;\n\n\t\tif (mom._z === undefined) {\n\t\t\tif (zone && needsOffset(mom) && !mom._isUTC) {\n\t\t\t\tmom._d = moment.utc(mom._a)._d;\n\t\t\t\tmom.utc().add(zone.parse(mom), 'minutes');\n\t\t\t}\n\t\t\tmom._z = zone;\n\t\t}\n\t\tif (mom._z) {\n\t\t\toffset = mom._z.utcOffset(mom);\n\t\t\tif (Math.abs(offset) < 16) {\n\t\t\t\toffset = offset / 60;\n\t\t\t}\n\t\t\tif (mom.utcOffset !== undefined) {\n\t\t\t\tvar z = mom._z;\n\t\t\t\tmom.utcOffset(-offset, keepTime);\n\t\t\t\tmom._z = z;\n\t\t\t} else {\n\t\t\t\tmom.zone(offset, keepTime);\n\t\t\t}\n\t\t}\n\t};\n\n\tfn.tz = function (name, keepTime) {\n\t\tif (name) {\n\t\t\tif (typeof name !== 'string') {\n\t\t\t\tthrow new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');\n\t\t\t}\n\t\t\tthis._z = getZone(name);\n\t\t\tif (this._z) {\n\t\t\t\tmoment.updateOffset(this, keepTime);\n\t\t\t} else {\n\t\t\t\tlogError(\"Moment Timezone has no data for \" + name + \". See http://momentjs.com/timezone/docs/#/data-loading/.\");\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif (this._z) { return this._z.name; }\n\t};\n\n\tfunction abbrWrap (old) {\n\t\treturn function () {\n\t\t\tif (this._z) { return this._z.abbr(this); }\n\t\t\treturn old.call(this);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap (old) {\n\t\treturn function () {\n\t\t\tthis._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfunction resetZoneWrap2 (old) {\n\t\treturn function () {\n\t\t\tif (arguments.length > 0) this._z = null;\n\t\t\treturn old.apply(this, arguments);\n\t\t};\n\t}\n\n\tfn.zoneName  = abbrWrap(fn.zoneName);\n\tfn.zoneAbbr  = abbrWrap(fn.zoneAbbr);\n\tfn.utc       = resetZoneWrap(fn.utc);\n\tfn.local     = resetZoneWrap(fn.local);\n\tfn.utcOffset = resetZoneWrap2(fn.utcOffset);\n\n\tmoment.tz.setDefault = function(name) {\n\t\tif (major < 2 || (major === 2 && minor < 9)) {\n\t\t\tlogError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');\n\t\t}\n\t\tmoment.defaultZone = name ? getZone(name) : null;\n\t\treturn moment;\n\t};\n\n\t// Cloning a moment should include the _z property.\n\tvar momentProperties = moment.momentProperties;\n\tif (Object.prototype.toString.call(momentProperties) === '[object Array]') {\n\t\t// moment 2.8.1+\n\t\tmomentProperties.push('_z');\n\t\tmomentProperties.push('_a');\n\t} else if (momentProperties) {\n\t\t// moment 2.7.0\n\t\tmomentProperties._z = null;\n\t}\n\n\t// INJECT DATA\n\n\treturn moment;\n}));\n", "var moment = module.exports = require(\"./moment-timezone\");\nmoment.tz.load(require('./data/packed/latest.json'));\n", "/*\nStimulus 3.1.0\nCopyright \u00A9 2022 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            }\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map;\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach(eventListener => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach(eventListener => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values())\n            .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map;\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions).sort().forEach(key => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName: matches[2],\n        eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n        identifier: matches[5],\n        methodName: matches[7]\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions.split(\":\").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n    constructor(element, index, descriptor) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n    }\n    static forToken(token) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content));\n    }\n    toString() {\n        const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n}\nconst defaultEventNames = {\n    \"a\": e => \"click\",\n    \"button\": e => \"click\",\n    \"form\": e => \"submit\",\n    \"details\": e => \"toggle\",\n    \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n    \"select\": e => \"change\",\n    \"textarea\": e => \"input\"\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        if (this.willBeInvokedByEvent(event) && this.shouldBeInvokedPerSelf(event)) {\n            this.processStopPropagation(event);\n            this.processPreventDefault(event);\n            this.invokeWithEvent(event);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    processStopPropagation(event) {\n        if (this.eventOptions.stop) {\n            event.stopPropagation();\n        }\n    }\n    processPreventDefault(event) {\n        if (this.eventOptions.prevent) {\n            event.preventDefault();\n        }\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            const { params } = this.action;\n            const actionEvent = Object.assign(event, { params });\n            this.method.call(this.controller, actionEvent);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    shouldBeInvokedPerSelf(event) {\n        if (this.action.eventOptions.self === true) {\n            return this.action.element === event.target;\n        }\n        else {\n            return true;\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set;\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(node, attributeName) {\n        const element = node;\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map;\n        this.mutationObserver = new MutationObserver(mutations => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map(attribute => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some(set => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([key, values]) => values.has(value))\n            .map(([key, values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map;\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap;\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach(token => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach(token => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens)\n            .findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString.trim().split(/\\s+/).filter(content => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap;\n        this.valuesByTokenByElement = new WeakMap;\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map;\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map;\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach(binding => this.delegate.bindingDisconnected(binding));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (!(error instanceof TypeError))\n                    throw error;\n                throw new TypeError(`Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`);\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map(key => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach(key => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap;\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach(name => values.add(name));\n        return values;\n    }, new Set));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map(key => [key, definition[key]]) : [];\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [\n            ...Object.getOwnPropertyNames(object),\n            ...Object.getOwnPropertySymbols(object)\n        ];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended }\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () { this.a.call(this); };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b;\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor)\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap;\n        this.connectedContexts = new Set;\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap;\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set;\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target\n            || this.findTarget(targetName)\n            || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName)\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map(element => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n    }\n    findElement(selector) {\n        return this.element.matches(selector)\n            ? this.element\n            : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...this.element.matches(selector) ? [this.element] : [],\n            ...this.queryElements(selector).filter(this.containsElement)\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap;\n        this.scopeReferenceCounts = new WeakMap;\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map;\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap;\n        this.modulesByIdentifier = new Map;\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find(context => context.element == element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach(scope => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: identifier => `data-${identifier}-target`\n};\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n    }\n    static start(element, schema) {\n        const application = new Application(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach(definition => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach(identifier => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map(context => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise(resolve => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            }\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            }\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            }\n        }\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            }\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            }\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            }\n        }\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            }\n        }\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            }\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            }\n        }\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array: return \"array\";\n        case Boolean: return \"boolean\";\n        case Number: return \"number\";\n        case Object: return \"object\";\n        case String: return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\": return \"boolean\";\n        case \"number\": return \"number\";\n        case \"string\": return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n    if (!typeFromObject)\n        return;\n    const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n    if (typeFromObject !== defaultValueType) {\n        const propertyPath = payload.controller ? `${payload.controller}.${payload.token}` : payload.token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${payload.typeObject.default}\" is of type \"${defaultValueType}\".`);\n    }\n    return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const typeFromObject = parseValueTypeObject({\n        controller: payload.controller,\n        token: payload.token,\n        typeObject: payload.typeDefinition\n    });\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(payload.typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = payload.controller ? `${payload.controller}.${payload.typeDefinition}` : payload.token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${payload.token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const defaultValue = typeDefinition.default;\n    if (defaultValue !== undefined)\n        return defaultValue;\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const key = `${dasherize(payload.token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() { return defaultValueForDefinition(payload.typeDefinition); },\n        get hasCustomDefaultValue() { return parseValueTypeDefault(payload.typeDefinition) !== undefined; },\n        reader: readers[type],\n        writer: writers[type] || writers.default\n    };\n}\nconst defaultValuesByType = {\n    get array() { return []; },\n    boolean: false,\n    number: 0,\n    get object() { return {}; },\n    string: \"\"\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value);\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    }\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from '@hotwired/stimulus'\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n", "const formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: \"less than a second\",\n    other: \"less than {{count}} seconds\",\n  },\n\n  xSeconds: {\n    one: \"1 second\",\n    other: \"{{count}} seconds\",\n  },\n\n  halfAMinute: \"half a minute\",\n\n  lessThanXMinutes: {\n    one: \"less than a minute\",\n    other: \"less than {{count}} minutes\",\n  },\n\n  xMinutes: {\n    one: \"1 minute\",\n    other: \"{{count}} minutes\",\n  },\n\n  aboutXHours: {\n    one: \"about 1 hour\",\n    other: \"about {{count}} hours\",\n  },\n\n  xHours: {\n    one: \"1 hour\",\n    other: \"{{count}} hours\",\n  },\n\n  xDays: {\n    one: \"1 day\",\n    other: \"{{count}} days\",\n  },\n\n  aboutXWeeks: {\n    one: \"about 1 week\",\n    other: \"about {{count}} weeks\",\n  },\n\n  xWeeks: {\n    one: \"1 week\",\n    other: \"{{count}} weeks\",\n  },\n\n  aboutXMonths: {\n    one: \"about 1 month\",\n    other: \"about {{count}} months\",\n  },\n\n  xMonths: {\n    one: \"1 month\",\n    other: \"{{count}} months\",\n  },\n\n  aboutXYears: {\n    one: \"about 1 year\",\n    other: \"about {{count}} years\",\n  },\n\n  xYears: {\n    one: \"1 year\",\n    other: \"{{count}} years\",\n  },\n\n  overXYears: {\n    one: \"over 1 year\",\n    other: \"over {{count}} years\",\n  },\n\n  almostXYears: {\n    one: \"almost 1 year\",\n    other: \"almost {{count}} years\",\n  },\n};\n\nexport const formatDistance = (token, count, options) => {\n  let result;\n\n  const tokenValue = formatDistanceLocale[token];\n  if (typeof tokenValue === \"string\") {\n    result = tokenValue;\n  } else if (count === 1) {\n    result = tokenValue.one;\n  } else {\n    result = tokenValue.other.replace(\"{{count}}\", count.toString());\n  }\n\n  if (options?.addSuffix) {\n    if (options.comparison && options.comparison > 0) {\n      return \"in \" + result;\n    } else {\n      return result + \" ago\";\n    }\n  }\n\n  return result;\n};\n", "export function buildFormatLongFn(args) {\n  return (options = {}) => {\n    // TODO: Remove String()\n    const width = options.width ? String(options.width) : args.defaultWidth;\n    const format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}\n", "import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.mjs\";\n\nconst dateFormats = {\n  full: \"EEEE, MMMM do, y\",\n  long: \"MMMM do, y\",\n  medium: \"MMM d, y\",\n  short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n  full: \"h:mm:ss a zzzz\",\n  long: \"h:mm:ss a z\",\n  medium: \"h:mm:ss a\",\n  short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: \"{{date}}, {{time}}\",\n  short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: \"full\",\n  }),\n\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: \"full\",\n  }),\n\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: \"full\",\n  }),\n};\n", "const formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n  formatRelativeLocale[token];\n", "/* eslint-disable no-unused-vars */\n\n/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n  return (value, options) => {\n    const context = options?.context ? String(options.context) : \"standalone\";\n\n    let valuesArray;\n    if (context === \"formatting\" && args.formattingValues) {\n      const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      const width = options?.width ? String(options.width) : defaultWidth;\n\n      valuesArray =\n        args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      const defaultWidth = args.defaultWidth;\n      const width = options?.width ? String(options.width) : args.defaultWidth;\n\n      valuesArray = args.values[width] || args.values[defaultWidth];\n    }\n    const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n    // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n    return valuesArray[index];\n  };\n}\n", "import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.mjs\";\n\nconst eraValues = {\n  narrow: [\"B\", \"A\"],\n  abbreviated: [\"BC\", \"AD\"],\n  wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n  narrow: [\"1\", \"2\", \"3\", \"4\"],\n  abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n  wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n  narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n  abbreviated: [\n    \"Jan\",\n    \"Feb\",\n    \"Mar\",\n    \"Apr\",\n    \"May\",\n    \"Jun\",\n    \"Jul\",\n    \"Aug\",\n    \"Sep\",\n    \"Oct\",\n    \"Nov\",\n    \"Dec\",\n  ],\n\n  wide: [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n  ],\n};\n\nconst dayValues = {\n  narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n  short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n  abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  wide: [\n    \"Sunday\",\n    \"Monday\",\n    \"Tuesday\",\n    \"Wednesday\",\n    \"Thursday\",\n    \"Friday\",\n    \"Saturday\",\n  ],\n};\n\nconst dayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"morning\",\n    afternoon: \"afternoon\",\n    evening: \"evening\",\n    night: \"night\",\n  },\n};\n\nconst formattingDayPeriodValues = {\n  narrow: {\n    am: \"a\",\n    pm: \"p\",\n    midnight: \"mi\",\n    noon: \"n\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  abbreviated: {\n    am: \"AM\",\n    pm: \"PM\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n  wide: {\n    am: \"a.m.\",\n    pm: \"p.m.\",\n    midnight: \"midnight\",\n    noon: \"noon\",\n    morning: \"in the morning\",\n    afternoon: \"in the afternoon\",\n    evening: \"in the evening\",\n    night: \"at night\",\n  },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n  const number = Number(dirtyNumber);\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`.\n  //\n  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'.\n\n  const rem100 = number % 100;\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + \"st\";\n      case 2:\n        return number + \"nd\";\n      case 3:\n        return number + \"rd\";\n    }\n  }\n  return number + \"th\";\n};\n\nexport const localize = {\n  ordinalNumber,\n\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: \"wide\",\n  }),\n\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: \"wide\",\n    argumentCallback: (quarter) => quarter - 1,\n  }),\n\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: \"wide\",\n  }),\n\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: \"wide\",\n  }),\n\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: \"wide\",\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: \"wide\",\n  }),\n};\n", "export function buildMatchFn(args) {\n  return (string, options = {}) => {\n    const width = options.width;\n\n    const matchPattern =\n      (width && args.matchPatterns[width]) ||\n      args.matchPatterns[args.defaultMatchWidth];\n    const matchResult = string.match(matchPattern);\n\n    if (!matchResult) {\n      return null;\n    }\n    const matchedString = matchResult[0];\n\n    const parsePatterns =\n      (width && args.parsePatterns[width]) ||\n      args.parsePatterns[args.defaultParseWidth];\n\n    const key = Array.isArray(parsePatterns)\n      ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n      : // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n        findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n    let value;\n\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback\n      ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n        options.valueCallback(value)\n      : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n\nfunction findKey(object, predicate) {\n  for (const key in object) {\n    if (\n      Object.prototype.hasOwnProperty.call(object, key) &&\n      predicate(object[key])\n    ) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\nfunction findIndex(array, predicate) {\n  for (let key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\n", "export function buildMatchPatternFn(args) {\n  return (string, options = {}) => {\n    const matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    const matchedString = matchResult[0];\n\n    const parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    let value = args.valueCallback\n      ? args.valueCallback(parseResult[0])\n      : parseResult[0];\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n    value = options.valueCallback ? options.valueCallback(value) : value;\n\n    const rest = string.slice(matchedString.length);\n\n    return { value, rest };\n  };\n}\n", "import { buildMatchFn } from \"../../_lib/buildMatchFn.mjs\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.mjs\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n  narrow: [\n    /^j/i,\n    /^f/i,\n    /^m/i,\n    /^a/i,\n    /^m/i,\n    /^j/i,\n    /^j/i,\n    /^a/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n\n  any: [\n    /^ja/i,\n    /^f/i,\n    /^mar/i,\n    /^ap/i,\n    /^may/i,\n    /^jun/i,\n    /^jul/i,\n    /^au/i,\n    /^s/i,\n    /^o/i,\n    /^n/i,\n    /^d/i,\n  ],\n};\n\nconst matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i,\n  },\n};\n\nexport const match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: (value) => parseInt(value, 10),\n  }),\n\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: \"any\",\n    valueCallback: (index) => index + 1,\n  }),\n\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: \"wide\",\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: \"any\",\n  }),\n\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: \"any\",\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: \"any\",\n  }),\n};\n", "import { formatDistance } from \"./en-US/_lib/formatDistance.mjs\";\nimport { formatLong } from \"./en-US/_lib/formatLong.mjs\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.mjs\";\nimport { localize } from \"./en-US/_lib/localize.mjs\";\nimport { match } from \"./en-US/_lib/match.mjs\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n  code: \"en-US\",\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1,\n  },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n", "let defaultOptions = {};\n\nexport function getDefaultOptions() {\n  return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n  defaultOptions = newOptions;\n}\n", "/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n *   return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occures every 4 years, except for years that are divisable by 100 and not divisable by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n", "/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument) {\n  const argStr = Object.prototype.toString.call(argument);\n\n  // Clone the date\n  if (\n    argument instanceof Date ||\n    (typeof argument === \"object\" && argStr === \"[object Date]\")\n  ) {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new argument.constructor(+argument);\n  } else if (\n    typeof argument === \"number\" ||\n    argStr === \"[object Number]\" ||\n    typeof argument === \"string\" ||\n    argStr === \"[object String]\"\n  ) {\n    // TODO: Can we get rid of as?\n    return new Date(argument);\n  } else {\n    // TODO: Can we get rid of as?\n    return new Date(NaN);\n  }\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date) {\n  const _date = toDate(date);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n", "import { toDate } from \"../toDate.mjs\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n  const _date = toDate(date);\n  const utcDate = new Date(\n    Date.UTC(\n      _date.getFullYear(),\n      _date.getMonth(),\n      _date.getDate(),\n      _date.getHours(),\n      _date.getMinutes(),\n      _date.getSeconds(),\n      _date.getMilliseconds(),\n    ),\n  );\n  utcDate.setUTCFullYear(_date.getFullYear());\n  return +date - +utcDate;\n}\n", "import { millisecondsInDay } from \"./constants.mjs\";\nimport { startOfDay } from \"./startOfDay.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.mjs\";\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(dateLeft, dateRight) {\n  const startOfDayLeft = startOfDay(dateLeft);\n  const startOfDayRight = startOfDay(dateRight);\n\n  const timestampLeft =\n    +startOfDayLeft - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n  const timestampRight =\n    +startOfDayRight - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n  // Round the number of days to the nearest integer because the number of\n  // milliseconds in a day is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round((timestampLeft - timestampRight) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n", "/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from 'date-fns'\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date(date: DateType): DateType {\n *   return constructFrom(\n *     date, // Use contrustor from the given date\n *     date.getTime() // Use the date value to create a new date\n *   )\n * }\n */\nexport function constructFrom(date, value) {\n  if (date instanceof Date) {\n    return new date.constructor(value);\n  } else {\n    return new Date(value);\n  }\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n", "import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date) {\n  const cleanDate = toDate(date);\n  const _date = constructFrom(date, 0);\n  _date.setFullYear(cleanDate.getFullYear(), 0, 1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n", "import { differenceInCalendarDays } from \"./differenceInCalendarDays.mjs\";\nimport { startOfYear } from \"./startOfYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date) {\n  const _date = toDate(date);\n  const diff = differenceInCalendarDays(_date, startOfYear(_date));\n  const dayOfYear = diff + 1;\n  return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n", "import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n  _date.setDate(_date.getDate() - diff);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n", "import { startOfWeek } from \"./startOfWeek.mjs\";\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date) {\n  return startOfWeek(date, { weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n", "import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date) {\n  const _date = toDate(date);\n  const year = _date.getFullYear();\n\n  const fourthOfJanuaryOfNextYear = constructFrom(date, 0);\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n  const fourthOfJanuaryOfThisYear = constructFrom(date, 0);\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n", "import { getISOWeekYear } from \"./getISOWeekYear.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date) {\n  const year = getISOWeekYear(date);\n  const fourthOfJanuary = constructFrom(date, 0);\n  fourthOfJanuary.setFullYear(year, 0, 4);\n  fourthOfJanuary.setHours(0, 0, 0, 0);\n  return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n", "import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfISOWeek } from \"./startOfISOWeek.mjs\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date) {\n  const _date = toDate(date);\n  const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n", "import { constructFrom } from \"./constructFrom.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n  const _date = toDate(date);\n  const year = _date.getFullYear();\n\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const firstWeekOfNextYear = constructFrom(date, 0);\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setHours(0, 0, 0, 0);\n  const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n  const firstWeekOfThisYear = constructFrom(date, 0);\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setHours(0, 0, 0, 0);\n  const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n  if (_date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1;\n  } else if (_date.getTime() >= startOfThisYear.getTime()) {\n    return year;\n  } else {\n    return year - 1;\n  }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n", "import { constructFrom } from \"./constructFrom.mjs\";\nimport { getWeekYear } from \"./getWeekYear.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const year = getWeekYear(date, options);\n  const firstWeek = constructFrom(date, 0);\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setHours(0, 0, 0, 0);\n  const _date = startOfWeek(firstWeek, options);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n", "import { millisecondsInWeek } from \"./constants.mjs\";\nimport { startOfWeek } from \"./startOfWeek.mjs\";\nimport { startOfWeekYear } from \"./startOfWeekYear.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport function getWeek(date, options) {\n  const _date = toDate(date);\n  const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n  // Round the number of weeks to the nearest integer because the number of\n  // milliseconds in a week is not constant (e.g. it's different in the week of\n  // the daylight saving time clock shift).\n  return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n", "export function addLeadingZeros(number, targetLength) {\n  const sign = number < 0 ? \"-\" : \"\";\n  const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n  return sign + output;\n}\n", "import { addLeadingZeros } from \"../addLeadingZeros.mjs\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* |                                |\n * |  d  | Day of month                   |  D  |                                |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  m  | Minute                         |  M  | Month                          |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  y  | Year (abs)                     |  Y  |                                |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n  // Year\n  y(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    const signedYear = date.getFullYear();\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n  },\n\n  // Month\n  M(date, token) {\n    const month = date.getMonth();\n    return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n\n  // Day of the month\n  d(date, token) {\n    return addLeadingZeros(date.getDate(), token.length);\n  },\n\n  // AM or PM\n  a(date, token) {\n    const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return dayPeriodEnumValue.toUpperCase();\n      case \"aaa\":\n        return dayPeriodEnumValue;\n      case \"aaaaa\":\n        return dayPeriodEnumValue[0];\n      case \"aaaa\":\n      default:\n        return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n    }\n  },\n\n  // Hour [1-12]\n  h(date, token) {\n    return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n  },\n\n  // Hour [0-23]\n  H(date, token) {\n    return addLeadingZeros(date.getHours(), token.length);\n  },\n\n  // Minute\n  m(date, token) {\n    return addLeadingZeros(date.getMinutes(), token.length);\n  },\n\n  // Second\n  s(date, token) {\n    return addLeadingZeros(date.getSeconds(), token.length);\n  },\n\n  // Fraction of second\n  S(date, token) {\n    const numberOfDigits = token.length;\n    const milliseconds = date.getMilliseconds();\n    const fractionalSeconds = Math.trunc(\n      milliseconds * Math.pow(10, numberOfDigits - 3),\n    );\n    return addLeadingZeros(fractionalSeconds, token.length);\n  },\n};\n", "import { getDayOfYear } from \"../../getDayOfYear.mjs\";\nimport { getISOWeek } from \"../../getISOWeek.mjs\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.mjs\";\nimport { getWeek } from \"../../getWeek.mjs\";\nimport { getWeekYear } from \"../../getWeekYear.mjs\";\nimport { addLeadingZeros } from \"../addLeadingZeros.mjs\";\nimport { lightFormatters } from \"./lightFormatters.mjs\";\n\nconst dayPeriodEnum = {\n  am: \"am\",\n  pm: \"pm\",\n  midnight: \"midnight\",\n  noon: \"noon\",\n  morning: \"morning\",\n  afternoon: \"afternoon\",\n  evening: \"evening\",\n  night: \"night\",\n};\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n  // Era\n  G: function (date, token, localize) {\n    const era = date.getFullYear() > 0 ? 1 : 0;\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return localize.era(era, { width: \"abbreviated\" });\n      // A, B\n      case \"GGGGG\":\n        return localize.era(era, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return localize.era(era, { width: \"wide\" });\n    }\n  },\n\n  // Year\n  y: function (date, token, localize) {\n    // Ordinal number\n    if (token === \"yo\") {\n      const signedYear = date.getFullYear();\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      const year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, { unit: \"year\" });\n    }\n\n    return lightFormatters.y(date, token);\n  },\n\n  // Local week-numbering year\n  Y: function (date, token, localize, options) {\n    const signedWeekYear = getWeekYear(date, options);\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n    // Two digit year\n    if (token === \"YY\") {\n      const twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    }\n\n    // Ordinal number\n    if (token === \"Yo\") {\n      return localize.ordinalNumber(weekYear, { unit: \"year\" });\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length);\n  },\n\n  // ISO week-numbering year\n  R: function (date, token) {\n    const isoWeekYear = getISOWeekYear(date);\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length);\n  },\n\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function (date, token) {\n    const year = date.getFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n\n  // Quarter\n  Q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"QQ\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone quarter\n  q: function (date, token, localize) {\n    const quarter = Math.ceil((date.getMonth() + 1) / 3);\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n        return String(quarter);\n      // 01, 02, 03, 04\n      case \"qq\":\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return localize.quarter(quarter, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return localize.quarter(quarter, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return localize.quarter(quarter, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // Month\n  M: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      case \"M\":\n      case \"MM\":\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // J, F, ..., D\n      case \"MMMMM\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"formatting\" });\n    }\n  },\n\n  // Stand-alone month\n  L: function (date, token, localize) {\n    const month = date.getMonth();\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return String(month + 1);\n      // 01, 02, ..., 12\n      case \"LL\":\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return localize.ordinalNumber(month + 1, { unit: \"month\" });\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return localize.month(month, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // J, F, ..., D\n      case \"LLLLL\":\n        return localize.month(month, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return localize.month(month, { width: \"wide\", context: \"standalone\" });\n    }\n  },\n\n  // Local week of year\n  w: function (date, token, localize, options) {\n    const week = getWeek(date, options);\n\n    if (token === \"wo\") {\n      return localize.ordinalNumber(week, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(week, token.length);\n  },\n\n  // ISO week of year\n  I: function (date, token, localize) {\n    const isoWeek = getISOWeek(date);\n\n    if (token === \"Io\") {\n      return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n    }\n\n    return addLeadingZeros(isoWeek, token.length);\n  },\n\n  // Day of the month\n  d: function (date, token, localize) {\n    if (token === \"do\") {\n      return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n    }\n\n    return lightFormatters.d(date, token);\n  },\n\n  // Day of year\n  D: function (date, token, localize) {\n    const dayOfYear = getDayOfYear(date);\n\n    if (token === \"Do\") {\n      return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n    }\n\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n\n  // Day of week\n  E: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"EEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Local day of week\n  e: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case \"e\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"ee\":\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n      case \"eo\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"eee\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"eeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"eeee\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Stand-alone local day of week\n  c: function (date, token, localize, options) {\n    const dayOfWeek = date.getDay();\n    const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case \"c\":\n        return String(localDayOfWeek);\n      // Padded numerical value\n      case \"cc\":\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n      case \"co\":\n        return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n      case \"ccc\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"standalone\",\n        });\n      // T\n      case \"ccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"standalone\",\n        });\n      // Tuesday\n      case \"cccc\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"standalone\",\n        });\n    }\n  },\n\n  // ISO day of week\n  i: function (date, token, localize) {\n    const dayOfWeek = date.getDay();\n    const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n    switch (token) {\n      // 2\n      case \"i\":\n        return String(isoDayOfWeek);\n      // 02\n      case \"ii\":\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n      case \"io\":\n        return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return localize.day(dayOfWeek, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      // T\n      case \"iiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"iiiiii\":\n        return localize.day(dayOfWeek, {\n          width: \"short\",\n          context: \"formatting\",\n        });\n      // Tuesday\n      case \"iiii\":\n      default:\n        return localize.day(dayOfWeek, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM or PM\n  a: function (date, token, localize) {\n    const hours = date.getHours();\n    const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"aaa\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"aaaaa\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // AM, PM, midnight, noon\n  b: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon;\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight;\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n    }\n\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"bbb\":\n        return localize\n          .dayPeriod(dayPeriodEnumValue, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          })\n          .toLowerCase();\n      case \"bbbbb\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: function (date, token, localize) {\n    const hours = date.getHours();\n    let dayPeriodEnumValue;\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening;\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon;\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning;\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night;\n    }\n\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"abbreviated\",\n          context: \"formatting\",\n        });\n      case \"BBBBB\":\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: \"wide\",\n          context: \"formatting\",\n        });\n    }\n  },\n\n  // Hour [1-12]\n  h: function (date, token, localize) {\n    if (token === \"ho\") {\n      let hours = date.getHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return lightFormatters.h(date, token);\n  },\n\n  // Hour [0-23]\n  H: function (date, token, localize) {\n    if (token === \"Ho\") {\n      return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n    }\n\n    return lightFormatters.H(date, token);\n  },\n\n  // Hour [0-11]\n  K: function (date, token, localize) {\n    const hours = date.getHours() % 12;\n\n    if (token === \"Ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Hour [1-24]\n  k: function (date, token, localize) {\n    let hours = date.getHours();\n    if (hours === 0) hours = 24;\n\n    if (token === \"ko\") {\n      return localize.ordinalNumber(hours, { unit: \"hour\" });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n\n  // Minute\n  m: function (date, token, localize) {\n    if (token === \"mo\") {\n      return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n    }\n\n    return lightFormatters.m(date, token);\n  },\n\n  // Second\n  s: function (date, token, localize) {\n    if (token === \"so\") {\n      return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n    }\n\n    return lightFormatters.s(date, token);\n  },\n\n  // Fraction of second\n  S: function (date, token) {\n    return lightFormatters.S(date, token);\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    if (timezoneOffset === 0) {\n      return \"Z\";\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"X\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case \"XXXX\":\n      case \"XX\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case \"XXXXX\":\n      case \"XXX\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Hours and optional minutes\n      case \"x\":\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case \"xxxx\":\n      case \"xx\": // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case \"xxxxx\":\n      case \"xxx\": // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (GMT)\n  O: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"O\":\n      case \"OO\":\n      case \"OOO\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"OOOO\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function (date, token, _localize) {\n    const timezoneOffset = date.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case \"z\":\n      case \"zz\":\n      case \"zzz\":\n        return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n      // Long\n      case \"zzzz\":\n      default:\n        return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n    }\n  },\n\n  // Seconds timestamp\n  t: function (date, token, _localize) {\n    const timestamp = Math.trunc(date.getTime() / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n\n  // Milliseconds timestamp\n  T: function (date, token, _localize) {\n    const timestamp = date.getTime();\n    return addLeadingZeros(timestamp, token.length);\n  },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = Math.trunc(absOffset / 60);\n  const minutes = absOffset % 60;\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n  if (offset % 60 === 0) {\n    const sign = offset > 0 ? \"-\" : \"+\";\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n  return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n  const sign = offset > 0 ? \"-\" : \"+\";\n  const absOffset = Math.abs(offset);\n  const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n  const minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\n", "const dateLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"P\":\n      return formatLong.date({ width: \"short\" });\n    case \"PP\":\n      return formatLong.date({ width: \"medium\" });\n    case \"PPP\":\n      return formatLong.date({ width: \"long\" });\n    case \"PPPP\":\n    default:\n      return formatLong.date({ width: \"full\" });\n  }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n  switch (pattern) {\n    case \"p\":\n      return formatLong.time({ width: \"short\" });\n    case \"pp\":\n      return formatLong.time({ width: \"medium\" });\n    case \"ppp\":\n      return formatLong.time({ width: \"long\" });\n    case \"pppp\":\n    default:\n      return formatLong.time({ width: \"full\" });\n  }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n  const matchResult = pattern.match(/(P+)(p+)?/) || [];\n  const datePattern = matchResult[1];\n  const timePattern = matchResult[2];\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n\n  let dateTimeFormat;\n\n  switch (datePattern) {\n    case \"P\":\n      dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n      break;\n    case \"PP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n      break;\n    case \"PPP\":\n      dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n      break;\n    case \"PPPP\":\n    default:\n      dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n      break;\n  }\n\n  return dateTimeFormat\n    .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n    .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter,\n};\n", "const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n  return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n  return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n  const _message = message(token, format, input);\n  console.warn(_message);\n  if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n  const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n  return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n", "/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n  return (\n    value instanceof Date ||\n    (typeof value === \"object\" &&\n      Object.prototype.toString.call(value) === \"[object Date]\")\n  );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n", "import { isDate } from \"./isDate.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n  if (!isDate(date) && typeof date !== \"number\") {\n    return false;\n  }\n  const _date = toDate(date);\n  return !isNaN(Number(_date));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n", "import { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\nimport { formatters } from \"./_lib/format/formatters.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { isValid } from \"./isValid.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > \u26A0\uFE0F Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          | a..aa   | AM, PM                            |       |\n * |                                 | aaa     | am, pm                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |\n * |                                 | bbb     | am, pm, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 001, ..., 999                |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 04/29/1453                        | 7     |\n * |                                 | PP      | Apr 29, 1453                      | 7     |\n * |                                 | PPP     | April 29th, 1453                  | 7     |\n * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |\n * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n *    and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const originalDate = toDate(date);\n\n  if (!isValid(originalDate)) {\n    throw new RangeError(\"Invalid time value\");\n  }\n\n  let parts = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp)\n    .map((substring) => {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return { isToken: false, value: \"'\" };\n      }\n\n      const firstCharacter = substring[0];\n      if (firstCharacter === \"'\") {\n        return { isToken: false, value: cleanEscapedString(substring) };\n      }\n\n      if (formatters[firstCharacter]) {\n        return { isToken: true, value: substring };\n      }\n\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      return { isToken: false, value: substring };\n    });\n\n  // invoke localize preprocessor (only for french locales at the moment)\n  if (locale.localize.preprocessor) {\n    parts = locale.localize.preprocessor(originalDate, parts);\n  }\n\n  const formatterOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  return parts\n    .map((part) => {\n      if (!part.isToken) return part.value;\n\n      const token = part.value;\n\n      if (\n        (!options?.useAdditionalWeekYearTokens &&\n          isProtectedWeekYearToken(token)) ||\n        (!options?.useAdditionalDayOfYearTokens &&\n          isProtectedDayOfYearToken(token))\n      ) {\n        warnOrThrowProtectedError(token, formatStr, String(date));\n      }\n\n      const formatter = formatters[token[0]];\n      return formatter(originalDate, token, locale.localize, formatterOptions);\n    })\n    .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n  const matched = input.match(escapedStringRegExp);\n\n  if (!matched) {\n    return input;\n  }\n\n  return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n", "/**\n * Returns the [year, month, day, hour, minute, seconds] tokens of the provided\n * `date` as it will be rendered in the `timeZone`.\n */\nexport function tzTokenizeDate(date, timeZone) {\n    const dtf = getDateTimeFormat(timeZone);\n    return 'formatToParts' in dtf ? partsOffset(dtf, date) : hackyOffset(dtf, date);\n}\nconst typeToPos = {\n    year: 0,\n    month: 1,\n    day: 2,\n    hour: 3,\n    minute: 4,\n    second: 5,\n};\nfunction partsOffset(dtf, date) {\n    try {\n        const formatted = dtf.formatToParts(date);\n        const filled = [];\n        for (let i = 0; i < formatted.length; i++) {\n            const pos = typeToPos[formatted[i].type];\n            if (pos !== undefined) {\n                filled[pos] = parseInt(formatted[i].value, 10);\n            }\n        }\n        return filled;\n    }\n    catch (error) {\n        if (error instanceof RangeError) {\n            return [NaN];\n        }\n        throw error;\n    }\n}\nfunction hackyOffset(dtf, date) {\n    const formatted = dtf.format(date);\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    const parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted);\n    // const [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed\n    // return [fYear, fMonth, fDay, fHour, fMinute, fSecond]\n    return [\n        parseInt(parsed[3], 10),\n        parseInt(parsed[1], 10),\n        parseInt(parsed[2], 10),\n        parseInt(parsed[4], 10),\n        parseInt(parsed[5], 10),\n        parseInt(parsed[6], 10),\n    ];\n}\n// Get a cached Intl.DateTimeFormat instance for the IANA `timeZone`. This can be used\n// to get deterministic local date/time output according to the `en-US` locale which\n// can be used to extract local time parts as necessary.\nconst dtfCache = {};\nfunction getDateTimeFormat(timeZone) {\n    if (!dtfCache[timeZone]) {\n        // New browsers use `hourCycle`, IE and Chrome <73 does not support it and uses `hour12`\n        const testDateFormatted = new Intl.DateTimeFormat('en-US', {\n            hourCycle: 'h23',\n            timeZone: 'America/New_York',\n            year: 'numeric',\n            month: '2-digit',\n            day: '2-digit',\n            hour: '2-digit',\n            minute: '2-digit',\n            second: '2-digit',\n        }).format(new Date('2014-06-25T04:00:00.123Z'));\n        const hourCycleSupported = testDateFormatted === '06/25/2014, 00:00:00' ||\n            testDateFormatted === '\u200E06\u200E/\u200E25\u200E/\u200E2014\u200E \u200E00\u200E:\u200E00\u200E:\u200E00';\n        dtfCache[timeZone] = hourCycleSupported\n            ? new Intl.DateTimeFormat('en-US', {\n                hourCycle: 'h23',\n                timeZone: timeZone,\n                year: 'numeric',\n                month: 'numeric',\n                day: '2-digit',\n                hour: '2-digit',\n                minute: '2-digit',\n                second: '2-digit',\n            })\n            : new Intl.DateTimeFormat('en-US', {\n                hour12: false,\n                timeZone: timeZone,\n                year: 'numeric',\n                month: 'numeric',\n                day: '2-digit',\n                hour: '2-digit',\n                minute: '2-digit',\n                second: '2-digit',\n            });\n    }\n    return dtfCache[timeZone];\n}\n", "/**\n * Use instead of `new Date(Date.UTC(...))` to support years below 100 which doesn't work\n * otherwise due to the nature of the\n * [`Date` constructor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#interpretation_of_two-digit_years.\n *\n * For `Date.UTC(...)`, use `newDateUTC(...).getTime()`.\n */\nexport function newDateUTC(fullYear, month, day, hour, minute, second, millisecond) {\n    const utcDate = new Date(0);\n    utcDate.setUTCFullYear(fullYear, month, day);\n    utcDate.setUTCHours(hour, minute, second, millisecond);\n    return utcDate;\n}\n", "import { tzTokenizeDate } from '../tzTokenizeDate/index.js';\nimport { newDateUTC } from '../newDateUTC/index.js';\nconst MILLISECONDS_IN_HOUR = 3600000;\nconst MILLISECONDS_IN_MINUTE = 60000;\nconst patterns = {\n    timezone: /([Z+-].*)$/,\n    timezoneZ: /^(Z)$/,\n    timezoneHH: /^([+-]\\d{2})$/,\n    timezoneHHMM: /^([+-])(\\d{2}):?(\\d{2})$/,\n};\n// Parse constious time zone offset formats to an offset in milliseconds\nexport function tzParseTimezone(timezoneString, date, isUtcDate) {\n    // Empty string\n    if (!timezoneString) {\n        return 0;\n    }\n    // Z\n    let token = patterns.timezoneZ.exec(timezoneString);\n    if (token) {\n        return 0;\n    }\n    let hours;\n    let absoluteOffset;\n    // \u00B1hh\n    token = patterns.timezoneHH.exec(timezoneString);\n    if (token) {\n        hours = parseInt(token[1], 10);\n        if (!validateTimezone(hours)) {\n            return NaN;\n        }\n        return -(hours * MILLISECONDS_IN_HOUR);\n    }\n    // \u00B1hh:mm or \u00B1hhmm\n    token = patterns.timezoneHHMM.exec(timezoneString);\n    if (token) {\n        hours = parseInt(token[2], 10);\n        const minutes = parseInt(token[3], 10);\n        if (!validateTimezone(hours, minutes)) {\n            return NaN;\n        }\n        absoluteOffset = Math.abs(hours) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE;\n        return token[1] === '+' ? -absoluteOffset : absoluteOffset;\n    }\n    // IANA time zone\n    if (isValidTimezoneIANAString(timezoneString)) {\n        date = new Date(date || Date.now());\n        const utcDate = isUtcDate ? date : toUtcDate(date);\n        const offset = calcOffset(utcDate, timezoneString);\n        const fixedOffset = isUtcDate ? offset : fixOffset(date, offset, timezoneString);\n        return -fixedOffset;\n    }\n    return NaN;\n}\nfunction toUtcDate(date) {\n    return newDateUTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n}\nfunction calcOffset(date, timezoneString) {\n    const tokens = tzTokenizeDate(date, timezoneString);\n    // ms dropped because it's not provided by tzTokenizeDate\n    const asUTC = newDateUTC(tokens[0], tokens[1] - 1, tokens[2], tokens[3] % 24, tokens[4], tokens[5], 0).getTime();\n    let asTS = date.getTime();\n    const over = asTS % 1000;\n    asTS -= over >= 0 ? over : 1000 + over;\n    return asUTC - asTS;\n}\nfunction fixOffset(date, offset, timezoneString) {\n    const localTS = date.getTime();\n    // Our UTC time is just a guess because our offset is just a guess\n    let utcGuess = localTS - offset;\n    // Test whether the zone matches the offset for this ts\n    const o2 = calcOffset(new Date(utcGuess), timezoneString);\n    // If so, offset didn't change, and we're done\n    if (offset === o2) {\n        return offset;\n    }\n    // If not, change the ts by the difference in the offset\n    utcGuess -= o2 - offset;\n    // If that gives us the local time we want, we're done\n    const o3 = calcOffset(new Date(utcGuess), timezoneString);\n    if (o2 === o3) {\n        return o2;\n    }\n    // If it's different, we're in a hole time. The offset has changed, but we don't adjust the time\n    return Math.max(o2, o3);\n}\nfunction validateTimezone(hours, minutes) {\n    return -23 <= hours && hours <= 23 && (minutes == null || (0 <= minutes && minutes <= 59));\n}\nconst validIANATimezoneCache = {};\nfunction isValidTimezoneIANAString(timeZoneString) {\n    if (validIANATimezoneCache[timeZoneString])\n        return true;\n    try {\n        new Intl.DateTimeFormat(undefined, { timeZone: timeZoneString });\n        validIANATimezoneCache[timeZoneString] = true;\n        return true;\n    }\n    catch (error) {\n        return false;\n    }\n}\n", "import { tzIntlTimeZoneName } from '../../_lib/tzIntlTimeZoneName/index.js';\nimport { tzParseTimezone } from '../../_lib/tzParseTimezone/index.js';\nconst MILLISECONDS_IN_MINUTE = 60 * 1000;\nexport const formatters = {\n    // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n    X: function (date, token, options) {\n        const timezoneOffset = getTimeZoneOffset(options.timeZone, date);\n        if (timezoneOffset === 0) {\n            return 'Z';\n        }\n        switch (token) {\n            // Hours and optional minutes\n            case 'X':\n                return formatTimezoneWithOptionalMinutes(timezoneOffset);\n            // Hours, minutes and optional seconds without `:` delimeter\n            // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n            // so this token always has the same output as `XX`\n            case 'XXXX':\n            case 'XX': // Hours and minutes without `:` delimeter\n                return formatTimezone(timezoneOffset);\n            // Hours, minutes and optional seconds with `:` delimeter\n            // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n            // so this token always has the same output as `XXX`\n            case 'XXXXX':\n            case 'XXX': // Hours and minutes with `:` delimeter\n            default:\n                return formatTimezone(timezoneOffset, ':');\n        }\n    },\n    // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n    x: function (date, token, options) {\n        const timezoneOffset = getTimeZoneOffset(options.timeZone, date);\n        switch (token) {\n            // Hours and optional minutes\n            case 'x':\n                return formatTimezoneWithOptionalMinutes(timezoneOffset);\n            // Hours, minutes and optional seconds without `:` delimeter\n            // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n            // so this token always has the same output as `xx`\n            case 'xxxx':\n            case 'xx': // Hours and minutes without `:` delimeter\n                return formatTimezone(timezoneOffset);\n            // Hours, minutes and optional seconds with `:` delimeter\n            // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n            // so this token always has the same output as `xxx`\n            case 'xxxxx':\n            case 'xxx': // Hours and minutes with `:` delimeter\n            default:\n                return formatTimezone(timezoneOffset, ':');\n        }\n    },\n    // Timezone (GMT)\n    O: function (date, token, options) {\n        const timezoneOffset = getTimeZoneOffset(options.timeZone, date);\n        switch (token) {\n            // Short\n            case 'O':\n            case 'OO':\n            case 'OOO':\n                return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n            // Long\n            case 'OOOO':\n            default:\n                return 'GMT' + formatTimezone(timezoneOffset, ':');\n        }\n    },\n    // Timezone (specific non-location)\n    z: function (date, token, options) {\n        switch (token) {\n            // Short\n            case 'z':\n            case 'zz':\n            case 'zzz':\n                return tzIntlTimeZoneName('short', date, options);\n            // Long\n            case 'zzzz':\n            default:\n                return tzIntlTimeZoneName('long', date, options);\n        }\n    },\n};\nfunction getTimeZoneOffset(timeZone, originalDate) {\n    const timeZoneOffset = timeZone\n        ? tzParseTimezone(timeZone, originalDate, true) / MILLISECONDS_IN_MINUTE\n        : originalDate?.getTimezoneOffset() ?? 0;\n    if (Number.isNaN(timeZoneOffset)) {\n        throw new RangeError('Invalid time zone specified: ' + timeZone);\n    }\n    return timeZoneOffset;\n}\nfunction addLeadingZeros(number, targetLength) {\n    const sign = number < 0 ? '-' : '';\n    let output = Math.abs(number).toString();\n    while (output.length < targetLength) {\n        output = '0' + output;\n    }\n    return sign + output;\n}\nfunction formatTimezone(offset, delimiter = '') {\n    const sign = offset > 0 ? '-' : '+';\n    const absOffset = Math.abs(offset);\n    const hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n    const minutes = addLeadingZeros(Math.floor(absOffset % 60), 2);\n    return sign + hours + delimiter + minutes;\n}\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n    if (offset % 60 === 0) {\n        const sign = offset > 0 ? '-' : '+';\n        return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n    }\n    return formatTimezone(offset, delimiter);\n}\nfunction formatTimezoneShort(offset, delimiter = '') {\n    const sign = offset > 0 ? '-' : '+';\n    const absOffset = Math.abs(offset);\n    const hours = Math.floor(absOffset / 60);\n    const minutes = absOffset % 60;\n    if (minutes === 0) {\n        return sign + String(hours);\n    }\n    return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n", "/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n    const utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n    utcDate.setUTCFullYear(date.getFullYear());\n    return +date - +utcDate;\n}\n", "/** Regex to identify the presence of a time zone specifier in a date string */\nexport const tzPattern = /(Z|[+-]\\d{2}(?::?\\d{2})?| UTC| [a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?)$/;\n", "import { getTimezoneOffsetInMilliseconds } from '../_lib/getTimezoneOffsetInMilliseconds/index.js';\nimport { tzParseTimezone } from '../_lib/tzParseTimezone/index.js';\nimport { tzPattern } from '../_lib/tzPattern/index.js';\nconst MILLISECONDS_IN_HOUR = 3600000;\nconst MILLISECONDS_IN_MINUTE = 60000;\nconst DEFAULT_ADDITIONAL_DIGITS = 2;\nconst patterns = {\n    dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,\n    datePattern: /^([0-9W+-]+)(.*)/,\n    plainTime: /:/,\n    // year tokens\n    YY: /^(\\d{2})$/,\n    YYY: [\n        /^([+-]\\d{2})$/, // 0 additional digits\n        /^([+-]\\d{3})$/, // 1 additional digit\n        /^([+-]\\d{4})$/, // 2 additional digits\n    ],\n    YYYY: /^(\\d{4})/,\n    YYYYY: [\n        /^([+-]\\d{4})/, // 0 additional digits\n        /^([+-]\\d{5})/, // 1 additional digit\n        /^([+-]\\d{6})/, // 2 additional digits\n    ],\n    // date tokens\n    MM: /^-(\\d{2})$/,\n    DDD: /^-?(\\d{3})$/,\n    MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n    Www: /^-?W(\\d{2})$/,\n    WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n    HH: /^(\\d{2}([.,]\\d*)?)$/,\n    HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n    HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n    // time zone tokens (to identify the presence of a tz)\n    timeZone: tzPattern,\n};\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If an argument is a string, the function tries to parse it.\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n * If the function cannot parse the string or the values are invalid, it returns Invalid Date.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n * All *date-fns* functions will throw `RangeError` if `options.additionalDigits` is not 0, 1, 2 or undefined.\n *\n * @param argument the value to convert\n * @param options the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @param {string} [options.timeZone=''] - used to specify the IANA time zone offset of a date String.\n *\n * @returns the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = toDate('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = toDate('+02014101', {additionalDigits: 1})\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function toDate(argument, options = {}) {\n    if (arguments.length < 1) {\n        throw new TypeError('1 argument required, but only ' + arguments.length + ' present');\n    }\n    if (argument === null) {\n        return new Date(NaN);\n    }\n    const additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : Number(options.additionalDigits);\n    if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n        throw new RangeError('additionalDigits must be 0, 1 or 2');\n    }\n    // Clone the date\n    if (argument instanceof Date ||\n        (typeof argument === 'object' && Object.prototype.toString.call(argument) === '[object Date]')) {\n        // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n        return new Date(argument.getTime());\n    }\n    else if (typeof argument === 'number' ||\n        Object.prototype.toString.call(argument) === '[object Number]') {\n        return new Date(argument);\n    }\n    else if (!(Object.prototype.toString.call(argument) === '[object String]')) {\n        return new Date(NaN);\n    }\n    const dateStrings = splitDateString(argument);\n    const { year, restDateString } = parseYear(dateStrings.date, additionalDigits);\n    const date = parseDate(restDateString, year);\n    if (date === null || isNaN(date.getTime())) {\n        return new Date(NaN);\n    }\n    if (date) {\n        const timestamp = date.getTime();\n        let time = 0;\n        let offset;\n        if (dateStrings.time) {\n            time = parseTime(dateStrings.time);\n            if (time === null || isNaN(time)) {\n                return new Date(NaN);\n            }\n        }\n        if (dateStrings.timeZone || options.timeZone) {\n            offset = tzParseTimezone(dateStrings.timeZone || options.timeZone, new Date(timestamp + time));\n            if (isNaN(offset)) {\n                return new Date(NaN);\n            }\n        }\n        else {\n            // get offset accurate to hour in time zones that change offset\n            offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time));\n            offset = getTimezoneOffsetInMilliseconds(new Date(timestamp + time + offset));\n        }\n        return new Date(timestamp + time + offset);\n    }\n    else {\n        return new Date(NaN);\n    }\n}\nfunction splitDateString(dateString) {\n    const dateStrings = {};\n    let parts = patterns.dateTimePattern.exec(dateString);\n    let timeString;\n    if (!parts) {\n        parts = patterns.datePattern.exec(dateString);\n        if (parts) {\n            dateStrings.date = parts[1];\n            timeString = parts[2];\n        }\n        else {\n            dateStrings.date = null;\n            timeString = dateString;\n        }\n    }\n    else {\n        dateStrings.date = parts[1];\n        timeString = parts[3];\n    }\n    if (timeString) {\n        const token = patterns.timeZone.exec(timeString);\n        if (token) {\n            dateStrings.time = timeString.replace(token[1], '');\n            dateStrings.timeZone = token[1].trim();\n        }\n        else {\n            dateStrings.time = timeString;\n        }\n    }\n    return dateStrings;\n}\nfunction parseYear(dateString, additionalDigits) {\n    if (dateString) {\n        const patternYYY = patterns.YYY[additionalDigits];\n        const patternYYYYY = patterns.YYYYY[additionalDigits];\n        // YYYY or \u00B1YYYYY\n        let token = patterns.YYYY.exec(dateString) || patternYYYYY.exec(dateString);\n        if (token) {\n            const yearString = token[1];\n            return {\n                year: parseInt(yearString, 10),\n                restDateString: dateString.slice(yearString.length),\n            };\n        }\n        // YY or \u00B1YYY\n        token = patterns.YY.exec(dateString) || patternYYY.exec(dateString);\n        if (token) {\n            const centuryString = token[1];\n            return {\n                year: parseInt(centuryString, 10) * 100,\n                restDateString: dateString.slice(centuryString.length),\n            };\n        }\n    }\n    // Invalid ISO-formatted year\n    return {\n        year: null,\n    };\n}\nfunction parseDate(dateString, year) {\n    // Invalid ISO-formatted year\n    if (year === null) {\n        return null;\n    }\n    let date;\n    let month;\n    let week;\n    // YYYY\n    if (!dateString || !dateString.length) {\n        date = new Date(0);\n        date.setUTCFullYear(year);\n        return date;\n    }\n    // YYYY-MM\n    let token = patterns.MM.exec(dateString);\n    if (token) {\n        date = new Date(0);\n        month = parseInt(token[1], 10) - 1;\n        if (!validateDate(year, month)) {\n            return new Date(NaN);\n        }\n        date.setUTCFullYear(year, month);\n        return date;\n    }\n    // YYYY-DDD or YYYYDDD\n    token = patterns.DDD.exec(dateString);\n    if (token) {\n        date = new Date(0);\n        const dayOfYear = parseInt(token[1], 10);\n        if (!validateDayOfYearDate(year, dayOfYear)) {\n            return new Date(NaN);\n        }\n        date.setUTCFullYear(year, 0, dayOfYear);\n        return date;\n    }\n    // yyyy-MM-dd or YYYYMMDD\n    token = patterns.MMDD.exec(dateString);\n    if (token) {\n        date = new Date(0);\n        month = parseInt(token[1], 10) - 1;\n        const day = parseInt(token[2], 10);\n        if (!validateDate(year, month, day)) {\n            return new Date(NaN);\n        }\n        date.setUTCFullYear(year, month, day);\n        return date;\n    }\n    // YYYY-Www or YYYYWww\n    token = patterns.Www.exec(dateString);\n    if (token) {\n        week = parseInt(token[1], 10) - 1;\n        if (!validateWeekDate(week)) {\n            return new Date(NaN);\n        }\n        return dayOfISOWeekYear(year, week);\n    }\n    // YYYY-Www-D or YYYYWwwD\n    token = patterns.WwwD.exec(dateString);\n    if (token) {\n        week = parseInt(token[1], 10) - 1;\n        const dayOfWeek = parseInt(token[2], 10) - 1;\n        if (!validateWeekDate(week, dayOfWeek)) {\n            return new Date(NaN);\n        }\n        return dayOfISOWeekYear(year, week, dayOfWeek);\n    }\n    // Invalid ISO-formatted date\n    return null;\n}\nfunction parseTime(timeString) {\n    let hours;\n    let minutes;\n    // hh\n    let token = patterns.HH.exec(timeString);\n    if (token) {\n        hours = parseFloat(token[1].replace(',', '.'));\n        if (!validateTime(hours)) {\n            return NaN;\n        }\n        return (hours % 24) * MILLISECONDS_IN_HOUR;\n    }\n    // hh:mm or hhmm\n    token = patterns.HHMM.exec(timeString);\n    if (token) {\n        hours = parseInt(token[1], 10);\n        minutes = parseFloat(token[2].replace(',', '.'));\n        if (!validateTime(hours, minutes)) {\n            return NaN;\n        }\n        return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE;\n    }\n    // hh:mm:ss or hhmmss\n    token = patterns.HHMMSS.exec(timeString);\n    if (token) {\n        hours = parseInt(token[1], 10);\n        minutes = parseInt(token[2], 10);\n        const seconds = parseFloat(token[3].replace(',', '.'));\n        if (!validateTime(hours, minutes, seconds)) {\n            return NaN;\n        }\n        return (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000;\n    }\n    // Invalid ISO-formatted time\n    return null;\n}\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n    week = week || 0;\n    day = day || 0;\n    const date = new Date(0);\n    date.setUTCFullYear(isoWeekYear, 0, 4);\n    const fourthOfJanuaryDay = date.getUTCDay() || 7;\n    const diff = week * 7 + day + 1 - fourthOfJanuaryDay;\n    date.setUTCDate(date.getUTCDate() + diff);\n    return date;\n}\n// Validation functions\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction isLeapYearIndex(year) {\n    return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction validateDate(year, month, date) {\n    if (month < 0 || month > 11) {\n        return false;\n    }\n    if (date != null) {\n        if (date < 1) {\n            return false;\n        }\n        const isLeapYear = isLeapYearIndex(year);\n        if (isLeapYear && date > DAYS_IN_MONTH_LEAP_YEAR[month]) {\n            return false;\n        }\n        if (!isLeapYear && date > DAYS_IN_MONTH[month]) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction validateDayOfYearDate(year, dayOfYear) {\n    if (dayOfYear < 1) {\n        return false;\n    }\n    const isLeapYear = isLeapYearIndex(year);\n    if (isLeapYear && dayOfYear > 366) {\n        return false;\n    }\n    if (!isLeapYear && dayOfYear > 365) {\n        return false;\n    }\n    return true;\n}\nfunction validateWeekDate(week, day) {\n    if (week < 0 || week > 52) {\n        return false;\n    }\n    if (day != null && (day < 0 || day > 6)) {\n        return false;\n    }\n    return true;\n}\nfunction validateTime(hours, minutes, seconds) {\n    if (hours < 0 || hours >= 25) {\n        return false;\n    }\n    if (minutes != null && (minutes < 0 || minutes >= 60)) {\n        return false;\n    }\n    if (seconds != null && (seconds < 0 || seconds >= 60)) {\n        return false;\n    }\n    return true;\n}\n", "import { tzParseTimezone } from '../_lib/tzParseTimezone/index.js';\nimport { toDate } from '../toDate/index.js';\n/**\n * @name toZonedTime\n * @category Time Zone Helpers\n * @summary Get a date/time representing local time in a given time zone from the UTC date\n *\n * @description\n * Returns a date instance with values representing the local time in the time zone\n * specified of the UTC time from the date provided. In other words, when the new date\n * is formatted it will show the equivalent hours in the target time zone regardless\n * of the current system time zone.\n *\n * @param date the date with the relevant UTC time\n * @param timeZone the time zone to get local time for, can be an offset or IANA time zone\n * @param options the object with options. See [Options]{@link https://date-fns.org/docs/Options}\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n *\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // In June 10am UTC is 6am in New York (-04:00)\n * const result = toZonedTime('2014-06-25T10:00:00.000Z', 'America/New_York')\n * //=> Jun 25 2014 06:00:00\n */\nexport function toZonedTime(date, timeZone, options) {\n    date = toDate(date, options);\n    const offsetMilliseconds = tzParseTimezone(timeZone, date, true);\n    const d = new Date(date.getTime() - offsetMilliseconds);\n    const resultDate = new Date(0);\n    resultDate.setFullYear(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());\n    resultDate.setHours(d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds());\n    return resultDate;\n}\n", "import { toZonedTime } from 'date-fns-tz'\n\nconst CHART_INFO = {\n  asset: {\n    media_player_pc: {\n      config: {\n        axis_name: 'Percentage (%)',\n        title: 'Media PC Metrics'\n      },\n      memory: { name: 'Memory', colorHex: '#36A2EB' },\n      cpu: { name: 'CPU', colorHex: '#FFCD56' }\n    },\n    power_controller_unit: {\n      config: {\n        axis_name: 'Ampere (A)',\n        title: 'Power Controller Metrics'\n      },\n      iboot_current: { name: 'Current', colorHex: '#36A2EB' }\n    }\n  },\n  location: {\n    media_pc_temperature: {\n      config: {\n        axis_name: 'Temperature (F)',\n        title: 'Media Player PC Temperature Chart'\n      },\n      temperature: { name: 'Media Player PC', colorHex: '#FF6384' }\n    },\n    gds_display_temperature: {\n      config: {\n        axis_name: 'Temperature (F)',\n        title: 'E-Paper Display Temperature Chart'\n      },\n      temperature: { name: 'Dual E-Paper Display', colorHex: '#FF6384' }\n    },\n    power_controller_temperature: {\n      config: {\n        axis_name: 'Temperature (F)',\n        title: 'Power Controller Temperature Chart'\n      },\n      temperature_probe_1: { name: 'Probe 1 Temperature', colorHex: '#FF6384' },\n      temperature_probe_2: { name: 'Probe 2 Temperature', colorHex: '#FFB0C0' }\n    },\n    power_controller_power_consumption: {\n      config: {\n        axis_name: 'Watts (W)',\n        title: 'Power Controller Power Consumption'\n      },\n      power_consumption: { name: 'Power Controller Unit', colorHex: '#36A2EB' }\n    },\n    network_usage: {\n      config: {\n        axis_name: 'Bandwidth (MB)',\n        title: 'Network Usage Chart'\n      },\n      upload: { name: 'Upload', colorHex: '#36A2EB' },\n      download: { name: 'Download', colorHex: '#FFCD56' }\n    },\n    vconn_kiosk_temperature: {\n      config: {\n        axis_name: 'Internal Temp (F)',\n        title: 'Vconn Kiosk Temperature Chart'\n      },\n      vconn1_temp: { name: 'Vconn Kiosk 1 Temp', colorHex: '#FF6384' },\n      vconn2_temp: { name: 'Vconn Kiosk 2 Temp', colorHex: '#FFB0C0' }\n    },\n    vconn_kiosk_luminance: {\n      config: {\n        axis_name: 'External Luminance',\n        title: 'Vconn Kiosk External Luminance Chart'\n      },\n      vconn1_luminance: { name: 'Vconn Kiosk 1 Ext Luminance', colorHex: '#36A2EB' },\n      vconn2_luminance: { name: 'Vconn Kiosk 2 Ext Luminance', colorHex: '#FFCD56' }\n    }\n  }\n}\n\nexport const chartInfo = (type, chartType, subType) =>\n  CHART_INFO[type][chartType][subType]\n\nexport const chartConfig = (type, chartType, timeZone) => {\n  return {\n    responsive: true,\n    maintainAspectRatio: false,\n    interaction: {\n      intersect: false,\n      mode: 'index'\n    },\n    scales: {\n      x: {\n        title: {\n          display: true,\n          text: 'Time (HH:MM)'\n        },\n        type: 'time',\n        time: {\n          unit: 'hour',\n          displayFormats: {\n            hour: 'HH:mm'\n          }\n        },\n        min: toZonedTime(new Date(Date.now() - 24 * 60 * 60 * 1000), timeZone),\n        max: toZonedTime(new Date(), timeZone),\n        ticks: {\n          stepSize: 1,\n          source: 'auto'\n        }\n      },\n      y: {\n        title: {\n          display: true,\n          text: CHART_INFO[type][chartType].config.axis_name\n        }\n      }\n    },\n    plugins: {\n      legend: {\n        position: 'top'\n      },\n      title: {\n        display: true,\n        text: `${CHART_INFO[type][chartType].config.title} (24Hrs)`\n      },\n      tooltip: {\n        callbacks: {\n          title: (tooltipItems) => {\n            const date = new Date(tooltipItems[0].parsed.x)\n            const hours = String(date.getHours()).padStart(2, '0')\n            const minutes = String(date.getMinutes()).padStart(2, '0')\n            return `${hours}:${minutes}`\n          }\n        }\n      }\n    }\n  }\n}\n", "/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n", "/**\n * @namespace Chart.helpers\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ActiveDataPoint, ChartEvent} from '../types/index.js';\n\n/**\n * An empty function that can be used, for example, for optional callback.\n */\nexport function noop() {\n  /* noop */\n}\n\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */\nexport const uid = (() => {\n  let id = 0;\n  return () => id++;\n})();\n\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isNullOrUndef(value: unknown): value is null | undefined {\n  return value === null || typeof value === 'undefined';\n}\n\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */\nexport function isArray<T = unknown>(value: unknown): value is T[] {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\n\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */\nexport function isObject(value: unknown): value is AnyObject {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */\nfunction isNumberFinite(value: unknown): value is number {\n  return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\nexport {\n  isNumberFinite as isFinite,\n};\n\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */\nexport function finiteOrDefault(value: unknown, defaultValue: number) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\n\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */\nexport function valueOrDefault<T>(value: T | undefined, defaultValue: T) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\n\nexport const toPercentage = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : +value / dimension;\n\nexport const toDimension = (value: number | string, dimension: number) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\n\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */\nexport function callback<T extends (this: TA, ...restArgs: unknown[]) => R, TA, R>(\n  fn: T | undefined,\n  args: unknown[],\n  thisArg?: TA\n): R | undefined {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\n\n/**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param loopable - The object or array to be iterated.\n * @param fn - The function to call for each item.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n * @param [reverse] - If true, iterates backward on the loopable.\n */\nexport function each<T, TA>(\n  loopable: Record<string, T>,\n  fn: (this: TA, v: T, i: string) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[],\n  fn: (this: TA, v: T, i: number) => void,\n  thisArg?: TA,\n  reverse?: boolean\n): void;\nexport function each<T, TA>(\n  loopable: T[] | Record<string, T>,\n  fn: (this: TA, v: T, i: any) => void,\n  thisArg?: TA,\n  reverse?: boolean\n) {\n  let i: number, len: number, keys: string[];\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\n\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */\nexport function _elementsEqual(a0: ActiveDataPoint[], a1: ActiveDataPoint[]) {\n  let i: number, ilen: number, v0: ActiveDataPoint, v1: ActiveDataPoint;\n\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */\nexport function clone<T>(source: T): T {\n  if (isArray(source)) {\n    return source.map(clone) as unknown as T;\n  }\n\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone(source[keys[k]]);\n    }\n\n    return target;\n  }\n\n  return source;\n}\n\nfunction isValidKey(key: string) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\nexport function _merger(key: string, target: AnyObject, source: AnyObject, options: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone(sval);\n  }\n}\n\nexport interface MergeOptions {\n  merger?: (key: string, target: AnyObject, source: AnyObject, options?: AnyObject) => void;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @param [options] - Merging options:\n * @param [options.merger] - The merge method (key, target, source, options)\n * @returns The `target` object.\n */\nexport function merge<T>(target: T, source: [], options?: MergeOptions): T;\nexport function merge<T, S1>(target: T, source: S1, options?: MergeOptions): T & S1;\nexport function merge<T, S1>(target: T, source: [S1], options?: MergeOptions): T & S1;\nexport function merge<T, S1, S2>(target: T, source: [S1, S2], options?: MergeOptions): T & S1 & S2;\nexport function merge<T, S1, S2, S3>(target: T, source: [S1, S2, S3], options?: MergeOptions): T & S1 & S2 & S3;\nexport function merge<T, S1, S2, S3, S4>(\n  target: T,\n  source: [S1, S2, S3, S4],\n  options?: MergeOptions\n): T & S1 & S2 & S3 & S4;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject;\nexport function merge<T>(target: T, source: AnyObject[], options?: MergeOptions): AnyObject {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n\n  if (!isObject(target)) {\n    return target as AnyObject;\n  }\n\n  options = options || {};\n  const merger = options.merger || _merger;\n  let current: AnyObject;\n\n  for (let i = 0; i < ilen; ++i) {\n    current = sources[i];\n    if (!isObject(current)) {\n      continue;\n    }\n\n    const keys = Object.keys(current);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, current, options as AnyObject);\n    }\n  }\n\n  return target;\n}\n\n/**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param target - The target object in which all sources are merged into.\n * @param source - Object(s) to merge into `target`.\n * @returns The `target` object.\n */\nexport function mergeIf<T>(target: T, source: []): T;\nexport function mergeIf<T, S1>(target: T, source: S1): T & S1;\nexport function mergeIf<T, S1>(target: T, source: [S1]): T & S1;\nexport function mergeIf<T, S1, S2>(target: T, source: [S1, S2]): T & S1 & S2;\nexport function mergeIf<T, S1, S2, S3>(target: T, source: [S1, S2, S3]): T & S1 & S2 & S3;\nexport function mergeIf<T, S1, S2, S3, S4>(target: T, source: [S1, S2, S3, S4]): T & S1 & S2 & S3 & S4;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject;\nexport function mergeIf<T>(target: T, source: AnyObject[]): AnyObject {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  return merge<T>(target, source, {merger: _mergerIf});\n}\n\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\nexport function _mergerIf(key: string, target: AnyObject, source: AnyObject) {\n  if (!isValidKey(key)) {\n    return;\n  }\n\n  const tval = target[key];\n  const sval = source[key];\n\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone(sval);\n  }\n}\n\n/**\n * @private\n */\nexport function _deprecated(scope: string, value: unknown, previous: string, current: string) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n      '\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\n\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n  // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n  '': v => v,\n  // default resolvers\n  x: o => o.x,\n  y: o => o.y\n};\n\n/**\n * @private\n */\nexport function _splitKey(key: string) {\n  const parts = key.split('.');\n  const keys: string[] = [];\n  let tmp = '';\n  for (const part of parts) {\n    tmp += part;\n    if (tmp.endsWith('\\\\')) {\n      tmp = tmp.slice(0, -1) + '.';\n    } else {\n      keys.push(tmp);\n      tmp = '';\n    }\n  }\n  return keys;\n}\n\nfunction _getKeyResolver(key: string) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        // For backward compatibility:\n        // Chart.helpers.core resolveObjectKey should break at empty key\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\n\nexport function resolveObjectKey(obj: AnyObject, key: string): any {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\n\n/**\n * @private\n */\nexport function _capitalize(str: string) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\nexport const defined = (value: unknown) => typeof value !== 'undefined';\n\nexport const isFunction = (value: unknown): value is (...args: any[]) => any => typeof value === 'function';\n\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nexport const setsEqual = <T>(a: Set<T>, b: Set<T>) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param e - The event\n * @private\n */\nexport function _isClickEvent(e: ChartEvent) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n", "import type {Point} from '../types/geometric.js';\nimport {isFinite as isFiniteNumber} from './helpers.core.js';\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */\n\nexport const PI = Math.PI;\nexport const TAU = 2 * PI;\nexport const PITAU = TAU + PI;\nexport const INFINITY = Number.POSITIVE_INFINITY;\nexport const RAD_PER_DEG = PI / 180;\nexport const HALF_PI = PI / 2;\nexport const QUARTER_PI = PI / 4;\nexport const TWO_THIRDS_PI = PI * 2 / 3;\n\nexport const log10 = Math.log10;\nexport const sign = Math.sign;\n\nexport function almostEquals(x: number, y: number, epsilon: number) {\n  return Math.abs(x - y) < epsilon;\n}\n\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */\nexport function niceNum(range: number) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\n\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */\nexport function _factorize(value: number) {\n  const result: number[] = [];\n  const sqrt = Math.sqrt(value);\n  let i: number;\n\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) { // if value is a square number\n    result.push(sqrt);\n  }\n\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\n\nexport function isNumber(n: unknown): n is number {\n  return !isNaN(parseFloat(n as string)) && isFinite(n as number);\n}\n\nexport function almostWhole(x: number, epsilon: number) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\n\n/**\n * @private\n */\nexport function _setMinAndMaxByKey(\n  array: Record<string, number>[],\n  target: { min: number, max: number },\n  property: string\n) {\n  let i: number, ilen: number, value: number;\n\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\n\nexport function toRadians(degrees: number) {\n  return degrees * (PI / 180);\n}\n\nexport function toDegrees(radians: number) {\n  return radians * (180 / PI);\n}\n\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */\nexport function _decimalPlaces(x: number) {\n  if (!isFiniteNumber(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\n\n// Gets the angle from vertical upright to the point about a centre.\nexport function getAngleFromPoint(\n  centrePoint: Point,\n  anglePoint: Point\n) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n  if (angle < (-0.5 * PI)) {\n    angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n  }\n\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\n\nexport function distanceBetweenPoints(pt1: Point, pt2: Point) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */\nexport function _angleDiff(a: number, b: number) {\n  return (a - b + PITAU) % TAU - PI;\n}\n\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */\nexport function _normalizeAngle(a: number) {\n  return (a % TAU + TAU) % TAU;\n}\n\n/**\n * @private\n */\nexport function _angleBetween(angle: number, start: number, end: number, sameAngleIsFullCircle?: boolean) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\n\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */\nexport function _limitValue(value: number, min: number, max: number) {\n  return Math.max(min, Math.min(max, value));\n}\n\n/**\n * @param {number} value\n * @private\n */\nexport function _int16Range(value: number) {\n  return _limitValue(value, -32768, 32767);\n}\n\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */\nexport function _isBetween(value: number, start: number, end: number, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n", "import {_capitalize} from './helpers.core.js';\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param value - value to find\n * @param cmp\n * @private\n */\nexport function _lookup(\n  table: number[],\n  value: number,\n  cmp?: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup<T>(\n  table: T[],\n  value: number,\n  cmp: (value: number) => boolean\n): {lo: number, hi: number};\nexport function _lookup(\n  table: unknown[],\n  value: number,\n  cmp?: (value: number) => boolean\n) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid: number;\n\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n\n  return {lo, hi};\n}\n\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */\nexport const _lookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number,\n  last?: boolean\n) =>\n  _lookup(table, value, last\n    ? index => {\n      const ti = table[index][key];\n      return ti < value || ti === value && table[index + 1][key] === value;\n    }\n    : index => table[index][key] < value);\n\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */\nexport const _rlookupByKey = (\n  table: Record<string, number>[],\n  key: string,\n  value: number\n) =>\n  _lookup(table, value, index => table[index][key] >= value);\n\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */\nexport function _filterBetween(values: number[], min: number, max: number) {\n  let start = 0;\n  let end = values.length;\n\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\n\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'] as const;\n\nexport interface ArrayListener<T> {\n  _onDataPush?(...item: T[]): void;\n  _onDataPop?(): void;\n  _onDataShift?(): void;\n  _onDataSplice?(index: number, deleteCount: number, ...items: T[]): void;\n  _onDataUnshift?(...item: T[]): void;\n}\n\n/**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the '_onData*' callbacks (e.g. _onDataPush, etc.) with same arguments.\n */\nexport function listenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n\n        return res;\n      }\n    });\n  });\n}\n\n\n/**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\nexport function unlistenArrayEvents<T>(array: T[], listener: ArrayListener<T>): void;\nexport function unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n\n  if (listeners.length > 0) {\n    return;\n  }\n\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n\n  delete array._chartjs;\n}\n\n/**\n * @param items\n */\nexport function _arrayUnique<T>(items: T[]) {\n  const set = new Set<T>(items);\n\n  if (set.size === items.length) {\n    return items;\n  }\n\n  return Array.from(set);\n}\n", "import type {ChartMeta, PointElement} from '../types/index.js';\n\nimport {_limitValue} from './helpers.math.js';\nimport {_lookupByKey} from './helpers.collection.js';\n\nexport function fontString(pixelSize: number, fontStyle: string, fontFamily: string) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\n/**\n* Request animation polyfill\n*/\nexport const requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\n\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */\nexport function throttled<TArgs extends Array<any>>(\n  fn: (...args: TArgs) => void,\n  thisArg: any,\n) {\n  let argsToUse = [] as TArgs;\n  let ticking = false;\n\n  return function(...args: TArgs) {\n    // Save the args for use later\n    argsToUse = args;\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, argsToUse);\n      });\n    }\n  };\n}\n\n/**\n * Debounces calling `fn` for `delay` ms\n */\nexport function debounce<TArgs extends Array<any>>(fn: (...args: TArgs) => void, delay: number) {\n  let timeout;\n  return function(...args: TArgs) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\n\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */\nexport const _toLeftRightCenter = (align: 'start' | 'end' | 'center') => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */\nexport const _alignStartEnd = (align: 'start' | 'end' | 'center', start: number, end: number) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */\nexport const _textX = (align: 'left' | 'right' | 'center', left: number, right: number, rtl: boolean) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\n/**\n * Return start and count of visible points.\n * @private\n */\nexport function _getStartAndCountOfVisiblePoints(meta: ChartMeta<'line' | 'scatter'>, points: PointElement[], animationsDisabled: boolean) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count = pointCount;\n\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, axis, min).lo,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        // @ts-expect-error Need to type _parsed\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n        // @ts-expect-error Need to fix types on _lookupByKey\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n\n  return {start, count};\n}\n\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */\nexport function _scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n", "import {PI, TAU, HALF_PI} from './helpers.math.js';\n\nconst atEdge = (t: number) => t === 0 || t === 1;\nconst elasticIn = (t: number, s: number, p: number) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t: number, s: number, p: number) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */\nconst effects = {\n  linear: (t: number) => t,\n\n  easeInQuad: (t: number) => t * t,\n\n  easeOutQuad: (t: number) => -t * (t - 2),\n\n  easeInOutQuad: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n\n  easeInCubic: (t: number) => t * t * t,\n\n  easeOutCubic: (t: number) => (t -= 1) * t * t + 1,\n\n  easeInOutCubic: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n\n  easeInQuart: (t: number) => t * t * t * t,\n\n  easeOutQuart: (t: number) => -((t -= 1) * t * t * t - 1),\n\n  easeInOutQuart: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n\n  easeInQuint: (t: number) => t * t * t * t * t,\n\n  easeOutQuint: (t: number) => (t -= 1) * t * t * t * t + 1,\n\n  easeInOutQuint: (t: number) => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n\n  easeInSine: (t: number) => -Math.cos(t * HALF_PI) + 1,\n\n  easeOutSine: (t: number) => Math.sin(t * HALF_PI),\n\n  easeInOutSine: (t: number) => -0.5 * (Math.cos(PI * t) - 1),\n\n  easeInExpo: (t: number) => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n\n  easeOutExpo: (t: number) => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n\n  easeInOutExpo: (t: number) => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n\n  easeInCirc: (t: number) => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n\n  easeOutCirc: (t: number) => Math.sqrt(1 - (t -= 1) * t),\n\n  easeInOutCirc: (t: number) => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n\n  easeInElastic: (t: number) => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n\n  easeOutElastic: (t: number) => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n\n  easeInOutElastic(t: number) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n\n  easeInBack(t: number) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n\n  easeOutBack(t: number) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n\n  easeInOutBack(t: number) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n\n  easeInBounce: (t: number) => 1 - effects.easeOutBounce(1 - t),\n\n  easeOutBounce(t: number) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n\n  easeInOutBounce: (t: number) => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n} as const;\n\nexport type EasingFunction = keyof typeof effects\n\nexport default effects;\n", "import {Color} from '@kurkle/color';\n\nexport function isPatternOrGradient(value: unknown): value is CanvasPattern | CanvasGradient {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n\n  return false;\n}\n\nexport function color(value: CanvasGradient): CanvasGradient;\nexport function color(value: CanvasPattern): CanvasPattern;\nexport function color(\n  value:\n  | string\n  | { r: number; g: number; b: number; a: number }\n  | [number, number, number]\n  | [number, number, number, number]\n): Color;\nexport function color(value) {\n  return isPatternOrGradient(value) ? value : new Color(value);\n}\n\nexport function getHoverColor(value: CanvasGradient): CanvasGradient;\nexport function getHoverColor(value: CanvasPattern): CanvasPattern;\nexport function getHoverColor(value: string): string;\nexport function getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n", "const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\n\nexport function applyAnimationsDefaults(defaults) {\n  defaults.set('animation', {\n    delay: undefined,\n    duration: 1000,\n    easing: 'easeOutQuart',\n    fn: undefined,\n    from: undefined,\n    loop: undefined,\n    to: undefined,\n    type: undefined,\n  });\n\n  defaults.describe('animation', {\n    _fallback: false,\n    _indexable: false,\n    _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n  });\n\n  defaults.set('animations', {\n    colors: {\n      type: 'color',\n      properties: colors\n    },\n    numbers: {\n      type: 'number',\n      properties: numbers\n    },\n  });\n\n  defaults.describe('animations', {\n    _fallback: 'animation',\n  });\n\n  defaults.set('transitions', {\n    active: {\n      animation: {\n        duration: 400\n      }\n    },\n    resize: {\n      animation: {\n        duration: 0\n      }\n    },\n    show: {\n      animations: {\n        colors: {\n          from: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          duration: 0 // show immediately\n        },\n      }\n    },\n    hide: {\n      animations: {\n        colors: {\n          to: 'transparent'\n        },\n        visible: {\n          type: 'boolean',\n          easing: 'linear',\n          fn: v => v | 0 // for keeping the dataset visible all the way through the animation\n        },\n      }\n    }\n  });\n}\n", "export function applyLayoutsDefaults(defaults) {\n  defaults.set('layout', {\n    autoPadding: true,\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    }\n  });\n}\n", "\nconst intlCache = new Map<string, Intl.NumberFormat>();\n\nfunction getNumberFormat(locale: string, options?: Intl.NumberFormatOptions) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\n\nexport function formatNumber(num: number, locale: string, options?: Intl.NumberFormatOptions) {\n  return getNumberFormat(locale, options).format(num);\n}\n", "import {isArray} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {log10} from '../helpers/helpers.math.js';\n\n/**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\nconst formatters = {\n  /**\n   * Formatter for value labels\n   * @method Chart.Ticks.formatters.values\n   * @param value the value to display\n   * @return {string|string[]} the label to display\n   */\n  values(value) {\n    return isArray(value) ? /** @type {string[]} */ (value) : '' + value;\n  },\n\n  /**\n   * Formatter for numeric ticks\n   * @method Chart.Ticks.formatters.numeric\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0'; // never show decimal places for 0\n    }\n\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue; // This is used when there are less than 2 ticks as the tick interval.\n\n    if (ticks.length > 1) {\n      // all ticks are small or there huge numbers; use scientific notation\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n\n      delta = calculateDelta(tickValue, ticks);\n    }\n\n    const logDelta = log10(Math.abs(delta));\n\n    // When datasets have values approaching Number.MAX_VALUE, the tick calculations might result in\n    // infinity and eventually NaN. Passing NaN for minimumFractionDigits or maximumFractionDigits\n    // will make the number formatter throw. So instead we check for isNaN and use a fallback value.\n    //\n    // toFixed has a max of 20 decimal places\n    const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n\n    return formatNumber(tickValue, locale, options);\n  },\n\n\n  /**\n   * Formatter for logarithmic ticks\n   * @method Chart.Ticks.formatters.logarithmic\n   * @param tickValue {number} the value to be formatted\n   * @param index {number} the position of the tickValue parameter in the ticks array\n   * @param ticks {object[]} the list of ticks being converted\n   * @return {string} string representation of the tickValue parameter\n   */\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = ticks[index].significand || (tickValue / (Math.pow(10, Math.floor(log10(tickValue)))));\n    if ([1, 2, 3, 5, 10, 15].includes(remain) || index > 0.8 * ticks.length) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n\n};\n\n\nfunction calculateDelta(tickValue, ticks) {\n  // Figure out how many digits to show\n  // The space between the first two ticks might be smaller than normal spacing\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n  // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    // not an integer\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\n\n/**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\nexport default {formatters};\n", "import Ticks from './core.ticks.js';\n\nexport function applyScaleDefaults(defaults) {\n  defaults.set('scale', {\n    display: true,\n    offset: false,\n    reverse: false,\n    beginAtZero: false,\n\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 3.0.0\n     */\n    bounds: 'ticks',\n\n    clip: true,\n\n    /**\n     * Addition grace added to max and reduced from min data value.\n     * @since 3.0.0\n     */\n    grace: 0,\n\n    // grid line settings\n    grid: {\n      display: true,\n      lineWidth: 1,\n      drawOnChartArea: true,\n      drawTicks: true,\n      tickLength: 8,\n      tickWidth: (_ctx, options) => options.lineWidth,\n      tickColor: (_ctx, options) => options.color,\n      offset: false,\n    },\n\n    border: {\n      display: true,\n      dash: [],\n      dashOffset: 0.0,\n      width: 1\n    },\n\n    // scale title\n    title: {\n      // display property\n      display: false,\n\n      // actual label\n      text: '',\n\n      // top/bottom padding\n      padding: {\n        top: 4,\n        bottom: 4\n      }\n    },\n\n    // label settings\n    ticks: {\n      minRotation: 0,\n      maxRotation: 50,\n      mirror: false,\n      textStrokeWidth: 0,\n      textStrokeColor: '',\n      padding: 3,\n      display: true,\n      autoSkip: true,\n      autoSkipPadding: 3,\n      labelOffset: 0,\n      // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n      callback: Ticks.formatters.values,\n      minor: {},\n      major: {},\n      align: 'center',\n      crossAlign: 'near',\n\n      showLabelBackdrop: false,\n      backdropColor: 'rgba(255, 255, 255, 0.75)',\n      backdropPadding: 2,\n    }\n  });\n\n  defaults.route('scale.ticks', 'color', '', 'color');\n  defaults.route('scale.grid', 'color', '', 'borderColor');\n  defaults.route('scale.border', 'color', '', 'borderColor');\n  defaults.route('scale.title', 'color', '', 'color');\n\n  defaults.describe('scale', {\n    _fallback: false,\n    _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n    _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash',\n  });\n\n  defaults.describe('scales', {\n    _fallback: 'scale',\n  });\n\n  defaults.describe('scale.ticks', {\n    _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n    _indexable: (name) => name !== 'backdropPadding',\n  });\n}\n", "import {getHoverColor} from '../helpers/helpers.color.js';\nimport {isObject, merge, valueOrDefault} from '../helpers/helpers.core.js';\nimport {applyAnimationsDefaults} from './core.animations.defaults.js';\nimport {applyLayoutsDefaults} from './core.layouts.defaults.js';\nimport {applyScaleDefaults} from './core.scale.defaults.js';\n\nexport const overrides = Object.create(null);\nexport const descriptors = Object.create(null);\n\n/**\n * @param {object} node\n * @param {string} key\n * @return {object}\n */\nfunction getScope(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\n\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope(root, scope), values);\n  }\n  return merge(getScope(root, ''), scope);\n}\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Defaults {\n  constructor(_descriptors, _appliers) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n\n    this.describe(_descriptors);\n    this.apply(_appliers);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n\n  /**\n\t * @param {string} scope\n\t */\n  get(scope) {\n    return getScope(this, scope);\n  }\n\n  /**\n\t * @param {string|object} scope\n\t * @param {object} [values]\n\t */\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n\n  /**\n\t * Routes the named defaults to fallback to another scope/name.\n\t * This routing is useful when those target values, like defaults.color, are changed runtime.\n\t * If the values would be copied, the runtime change would not take effect. By routing, the\n\t * fallback is evaluated at each access, so its always up to date.\n\t *\n\t * Example:\n\t *\n\t * \tdefaults.route('elements.arc', 'backgroundColor', '', 'color')\n\t *   - reads the backgroundColor from defaults.color when undefined locally\n\t *\n\t * @param {string} scope Scope this route applies to.\n\t * @param {string} name Property name that should be routed to different namespace when not defined here.\n\t * @param {string} targetScope The namespace where those properties should be routed to.\n\t * Empty string ('') is the root of defaults.\n\t * @param {string} targetName The target name in the target scope the property should be routed to.\n\t */\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope(this, scope);\n    const targetScopeObject = getScope(this, targetScope);\n    const privateName = '_' + name;\n\n    Object.defineProperties(scopeObject, {\n      // A private property is defined to hold the actual value, when this property is set in its scope (set in the setter)\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      // The actual property is defined as getter/setter so we can do the routing when value is not locally set.\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n\n  apply(appliers) {\n    appliers.forEach((apply) => apply(this));\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n}, [applyAnimationsDefaults, applyLayoutsDefaults, applyScaleDefaults]);\n", "import type {\n  Chart,\n  Point,\n  FontSpec,\n  CanvasFontSpec,\n  PointStyle,\n  RenderTextOpts,\n  BackdropOptions\n} from '../types/index.js';\nimport type {\n  TRBL,\n  SplinePoint,\n  RoundedRect,\n  TRBLCorners\n} from '../types/geometric.js';\nimport {isArray, isNullOrUndef} from './helpers.core.js';\nimport {PI, TAU, HALF_PI, QUARTER_PI, TWO_THIRDS_PI, RAD_PER_DEG} from './helpers.math.js';\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\nexport function toFontString(font: FontSpec) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\n\n/**\n * @private\n */\nexport function _measureText(\n  ctx: CanvasRenderingContext2D,\n  data: Record<string, number>,\n  gc: string[],\n  longest: number,\n  string: string\n) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\n\ntype Thing = string | undefined | null\ntype Things = (Thing | Thing[])[]\n\n/**\n * @private\n */\n// eslint-disable-next-line complexity\nexport function _longestText(\n  ctx: CanvasRenderingContext2D,\n  font: string,\n  arrayOfThings: Things,\n  cache?: {data?: Record<string, number>, garbageCollect?: string[], font?: string}\n) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n\n  ctx.save();\n\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i: number, j: number, jlen: number, thing: Thing | Thing[], nestedThing: Thing | Thing[];\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n\n    // Undefined strings and arrays should not be measured\n    if (thing !== undefined && thing !== null && !isArray(thing)) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      // if it is an array lets measure each element\n      // to do maybe simplify this function a bit so we can do this more recursively?\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        // Undefined strings and arrays should not be measured\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n\n  ctx.restore();\n\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\n\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */\nexport function _alignPixel(chart: Chart, pixel: number, width: number) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\n/**\n * Clears the entire canvas.\n */\nexport function clearCanvas(canvas: HTMLCanvasElement, ctx?: CanvasRenderingContext2D) {\n  ctx = ctx || canvas.getContext('2d');\n\n  ctx.save();\n  // canvas.width and canvas.height do not consider the canvas transform,\n  // while clearRect does\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\n\nexport interface DrawPointOptions {\n  pointStyle: PointStyle;\n  rotation?: number;\n  radius: number;\n  borderWidth: number;\n}\n\nexport function drawPoint(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number\n) {\n  // eslint-disable-next-line @typescript-eslint/no-use-before-define\n  drawPointLegend(ctx, options, x, y, null);\n}\n\n// eslint-disable-next-line complexity\nexport function drawPointLegend(\n  ctx: CanvasRenderingContext2D,\n  options: DrawPointOptions,\n  x: number,\n  y: number,\n  w: number\n) {\n  let type: string, xOffset: number, yOffset: number, size: number, cornerRadius: number, width: number, xOffsetW: number, yOffsetW: number;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n\n  ctx.beginPath();\n\n  switch (style) {\n  // Default includes circle\n    default:\n      if (w) {\n        ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n      } else {\n        ctx.arc(x, y, radius, 0, TAU);\n      }\n      ctx.closePath();\n      break;\n    case 'triangle':\n      width = w ? w / 2 : radius;\n      ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      rad += TWO_THIRDS_PI;\n      ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n      ctx.closePath();\n      break;\n    case 'rectRounded':\n    // NOTE: the rounded rect implementation changed to use `arc` instead of\n    // `quadraticCurveTo` since it generates better results when rect is\n    // almost a circle. 0.516 (instead of 0.5) produces results with visually\n    // closer proportion to the previous impl and it is inscribed in the\n    // circle with `radius`. For more details, see the following PRs:\n    // https://github.com/chartjs/Chart.js/issues/5597\n    // https://github.com/chartjs/Chart.js/issues/5858\n      cornerRadius = radius * 0.516;\n      size = radius - cornerRadius;\n      xOffset = Math.cos(rad + QUARTER_PI) * size;\n      xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      yOffset = Math.sin(rad + QUARTER_PI) * size;\n      yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n      ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n      ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n      ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n      ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n      ctx.closePath();\n      break;\n    case 'rect':\n      if (!rotation) {\n        size = Math.SQRT1_2 * radius;\n        width = w ? w / 2 : size;\n        ctx.rect(x - width, y - size, 2 * width, 2 * size);\n        break;\n      }\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'rectRot':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      ctx.closePath();\n      break;\n    case 'crossRot':\n      rad += QUARTER_PI;\n    /* falls through */\n    case 'cross':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'star':\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      rad += QUARTER_PI;\n      xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n      xOffset = Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n      ctx.moveTo(x - xOffsetW, y - yOffset);\n      ctx.lineTo(x + xOffsetW, y + yOffset);\n      ctx.moveTo(x + yOffsetW, y - xOffset);\n      ctx.lineTo(x - yOffsetW, y + xOffset);\n      break;\n    case 'line':\n      xOffset = w ? w / 2 : Math.cos(rad) * radius;\n      yOffset = Math.sin(rad) * radius;\n      ctx.moveTo(x - xOffset, y - yOffset);\n      ctx.lineTo(x + xOffset, y + yOffset);\n      break;\n    case 'dash':\n      ctx.moveTo(x, y);\n      ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n      break;\n    case false:\n      ctx.closePath();\n      break;\n  }\n\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\n\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */\nexport function _isPointInArea(\n  point: Point,\n  area: TRBL,\n  margin?: number\n) {\n  margin = margin || 0.5; // margin - default is to match rounded decimals\n\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\n\nexport function clipArea(ctx: CanvasRenderingContext2D, area: TRBL) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\n\nexport function unclipArea(ctx: CanvasRenderingContext2D) {\n  ctx.restore();\n}\n\n/**\n * @private\n */\nexport function _steppedLineTo(\n  ctx: CanvasRenderingContext2D,\n  previous: Point,\n  target: Point,\n  flip?: boolean,\n  mode?: string\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @private\n */\nexport function _bezierCurveTo(\n  ctx: CanvasRenderingContext2D,\n  previous: SplinePoint,\n  target: SplinePoint,\n  flip?: boolean\n) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\n\nfunction setRenderOpts(ctx: CanvasRenderingContext2D, opts: RenderTextOpts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\n\nfunction decorateText(\n  ctx: CanvasRenderingContext2D,\n  x: number,\n  y: number,\n  line: string,\n  opts: RenderTextOpts\n) {\n  if (opts.strikethrough || opts.underline) {\n    /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\n\nfunction drawBackdrop(ctx: CanvasRenderingContext2D, opts: BackdropOptions) {\n  const oldColor = ctx.fillStyle;\n\n  ctx.fillStyle = opts.color as string;\n  ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n  ctx.fillStyle = oldColor;\n}\n\n/**\n * Render text onto the canvas\n */\nexport function renderText(\n  ctx: CanvasRenderingContext2D,\n  text: string | string[],\n  x: number,\n  y: number,\n  font: CanvasFontSpec,\n  opts: RenderTextOpts = {}\n) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i: number, line: string;\n\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n\n    if (opts.backdrop) {\n      drawBackdrop(ctx, opts.backdrop);\n    }\n\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n\n    y += Number(font.lineHeight);\n  }\n\n  ctx.restore();\n}\n\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */\nexport function addRoundedRectPath(\n  ctx: CanvasRenderingContext2D,\n  rect: RoundedRect & { radius: TRBLCorners }\n) {\n  const {x, y, w, h, radius} = rect;\n\n  // top left arc\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n\n  // line from top left to bottom left\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n\n  // bottom left arc\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n\n  // line from bottom left to bottom right\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n\n  // bottom right arc\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n\n  // line from bottom right to top right\n  ctx.lineTo(x + w, y + radius.topRight);\n\n  // top right arc\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n\n  // line from top right to top left\n  ctx.lineTo(x + radius.topLeft, y);\n}\n", "import defaults from '../core/core.defaults.js';\nimport {isArray, isObject, toDimension, valueOrDefault} from './helpers.core.js';\nimport {toFontString} from './helpers.canvas.js';\nimport type {ChartArea, FontSpec, Point} from '../types/index.js';\nimport type {TRBL, TRBLCorners} from '../types/geometric.js';\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n\n/**\n * @alias Chart.helpers.options\n * @namespace\n */\n/**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\nexport function toLineHeight(value: number | string, size: number): number {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n\n  value = +matches[2];\n\n  switch (matches[3]) {\n    case 'px':\n      return value;\n    case '%':\n      value /= 100;\n      break;\n    default:\n      break;\n  }\n\n  return size * value;\n}\n\nconst numberOrZero = (v: unknown) => +v || 0;\n\n/**\n * @param value\n * @param props\n */\nexport function _readValueToProps<K extends string>(value: number | Record<K, number>, props: K[]): Record<K, number>;\nexport function _readValueToProps<K extends string, T extends string>(value: number | Record<K & T, number>, props: Record<T, K>): Record<T, number>;\nexport function _readValueToProps(value: number | Record<string, number>, props: string[] | Record<string, string>) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\n\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */\nexport function toTRBL(value: number | TRBL | Point) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\n\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */\nexport function toTRBLCorners(value: number | TRBLCorners) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\nexport function toPadding(value?: number | TRBL): ChartArea {\n  const obj = toTRBL(value) as ChartArea;\n\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n\n  return obj;\n}\n\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */\n\nexport function toFont(options: Partial<FontSpec>, fallback?: Partial<FontSpec>) {\n  options = options || {};\n  fallback = fallback || defaults.font as FontSpec;\n\n  let size = valueOrDefault(options.size, fallback.size);\n\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = undefined;\n  }\n\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n\n  font.string = toFontString(font);\n  return font;\n}\n\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */\nexport function resolve(inputs: Array<unknown>, context?: object, index?: number, info?: { cacheable: boolean }) {\n  let cacheable = true;\n  let i: number, ilen: number, value: unknown;\n\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\n\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */\nexport function _addGrace(minmax: { min: number; max: number; }, grace: number | string, beginAtZero: boolean) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value: number, add: number) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\n\n/**\n * Create a context inheriting parentContext\n * @param parentContext\n * @param context\n * @returns\n */\nexport function createContext<T extends object>(parentContext: null, context: T): T;\nexport function createContext<T extends object, P extends T>(parentContext: P, context: T): P & T;\nexport function createContext(parentContext: object, context: object) {\n  return Object.assign(Object.create(parentContext), context);\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartMeta} from '../types/index.js';\nimport type {\n  ResolverObjectKey,\n  ResolverCache,\n  ResolverProxy,\n  DescriptorDefaults,\n  Descriptor,\n  ContextCache,\n  ContextProxy\n} from './helpers.config.types.js';\nimport {isArray, isFunction, isObject, resolveObjectKey, _capitalize} from './helpers.core.js';\n\nexport * from './helpers.config.types.js';\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */\nexport function _createResolver<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  scopes: T,\n  prefixes = [''],\n  rootScopes?: R,\n  fallback?: ResolverObjectKey,\n  getTarget = () => scopes[0]\n) {\n  const finalRootScopes = rootScopes || scopes;\n  if (typeof fallback === 'undefined') {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache: ResolverCache<T, R> = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: finalRootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope: AnyObject) => _createResolver([scope, ...scopes], prefixes, finalRootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop: string) {\n      delete target[prop]; // remove from cache\n      delete target._keys; // remove cached keys\n      delete scopes[0][prop]; // remove from top level scope\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop: string) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop: string, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value; // set to top level scope + cache\n      delete target._keys; // remove cached keys\n      return true;\n    }\n  }) as ResolverProxy<T, R>;\n}\n\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */\nexport function _attachContext<\n  T extends AnyObject[] = AnyObject[],\n  R extends AnyObject[] = T\n>(\n  proxy: ResolverProxy<T, R>,\n  context: AnyObject,\n  subProxy?: ResolverProxy<T, R>,\n  descriptorDefaults?: DescriptorDefaults\n) {\n  const cache: ContextCache<T, R> = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx: AnyObject) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope: AnyObject) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    /**\n     * A trap for the delete operator.\n     */\n    deleteProperty(target, prop) {\n      delete target[prop]; // remove from cache\n      delete proxy[prop]; // remove from proxy\n      return true;\n    },\n\n    /**\n     * A trap for getting property values.\n     */\n    get(target, prop: string, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getPrototypeOf.\n     */\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n\n    /**\n     * A trap for the in operator.\n     */\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n\n    /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n\n    /**\n     * A trap for setting property values.\n     */\n    set(target, prop, value) {\n      proxy[prop] = value; // set to proxy\n      delete target[prop]; // remove from cache\n      return true;\n    }\n  }) as ContextProxy<T, R>;\n}\n\n/**\n * @private\n */\nexport function _descriptors(\n  proxy: ResolverCache,\n  defaults: DescriptorDefaults = {scriptable: true, indexable: true}\n): Descriptor {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\n\nconst readKey = (prefix: string, name: string) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop: string, value: unknown) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\n\nfunction _cached(\n  target: AnyObject,\n  prop: string,\n  resolve: () => unknown\n) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n\n  const value = resolve();\n  // cache the resolved value\n  target[prop] = value;\n  return value;\n}\n\nfunction _resolveWithContext(\n  target: ContextCache,\n  prop: string,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop]; // resolve from proxy\n\n  // resolve with context\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    // if the resolved value is an object, create a sub resolver for it\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\n\nfunction _resolveScriptable(\n  prop: string,\n  getValue: (ctx: AnyObject, sub: AnyObject) => unknown,\n  target: ContextCache,\n  receiver: AnyObject\n) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  let value = getValue(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    // When scriptable option returns an object, create a resolver on that.\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\n\nfunction _resolveArray(\n  prop: string,\n  value: unknown[],\n  target: ContextCache,\n  isIndexable: (key: string) => boolean\n) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n\n  if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n    return value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    // Array of objects, return array or resolvers\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\n\nfunction resolveFallback(\n  fallback: ResolverObjectKey | ((prop: ResolverObjectKey, value: unknown) => ResolverObjectKey),\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nconst getScope = (key: ResolverObjectKey, parent: AnyObject) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n\nfunction addScopes(\n  set: Set<AnyObject>,\n  parentScopes: AnyObject[],\n  key: ResolverObjectKey,\n  parentFallback: ResolverObjectKey,\n  value: unknown\n) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n        // When we reach the descriptor that defines a new _fallback, return that.\n        // The fallback will resume to that new scope.\n        return fallback;\n      }\n    } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n      // Fallback to `false` results to `false`, when falling back to different key.\n      // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n      return null;\n    }\n  }\n  return false;\n}\n\nfunction createSubResolver(\n  parentScopes: AnyObject[],\n  resolver: ResolverCache,\n  prop: ResolverObjectKey,\n  value: unknown\n) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set<AnyObject>();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (typeof fallback !== 'undefined' && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop as string, value));\n}\n\nfunction addScopesFromKey(\n  set: Set<AnyObject>,\n  allScopes: AnyObject[],\n  key: ResolverObjectKey,\n  fallback: ResolverObjectKey,\n  item: unknown\n) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\n\nfunction subGetTarget(\n  resolver: ResolverCache,\n  prop: string,\n  value: unknown\n) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    // For array of objects, the object is used to store updated values\n    return value;\n  }\n  return target || {};\n}\n\nfunction _resolveWithPrefixes(\n  prop: string,\n  prefixes: string[],\n  scopes: AnyObject[],\n  proxy: ResolverProxy\n) {\n  let value: unknown;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (typeof value !== 'undefined') {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\n\nfunction _resolve(key: string, scopes: AnyObject[]) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (typeof value !== 'undefined') {\n      return value;\n    }\n  }\n}\n\nfunction getKeysFromAllScopes(target: ResolverCache) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes: AnyObject[]) {\n  const set = new Set<string>();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\n\nexport function _parseObjectDataRadialScale(\n  meta: ChartMeta<'line' | 'scatter'>,\n  data: AnyObject[],\n  start: number,\n  count: number\n) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array<{r: unknown}>(count);\n  let i: number, ilen: number, index: number, item: AnyObject;\n\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n", "import {almostEquals, distanceBetweenPoints, sign} from './helpers.math.js';\nimport {_isPointInArea} from './helpers.canvas.js';\nimport type {ChartArea} from '../types/index.js';\nimport type {SplinePoint} from '../types/geometric.js';\n\nconst EPSILON = Number.EPSILON || 1e-14;\n\ntype OptionalSplinePoint = SplinePoint | false\nconst getPoint = (points: SplinePoint[], i: number): OptionalSplinePoint => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis: 'x' | 'y') => indexAxis === 'x' ? 'y' : 'x';\n\nexport function splineCurve(\n  firstPoint: SplinePoint,\n  middlePoint: SplinePoint,\n  afterPoint: SplinePoint,\n  t: number\n): {\n    previous: SplinePoint\n    next: SplinePoint\n  } {\n  // Props to Rob Spencer at scaled innovation for his post on splining between points\n  // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n  // This function must also respect \"skipped\" points\n\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n\n  // If all points are the same, s01 & s02 will be inf\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n\n  const fa = t * s01; // scaling factor for triangle Ta\n  const fb = t * s12;\n\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\n\n/**\n * Adjust tangents to ensure monotonic properties\n */\nfunction monotoneAdjust(points: SplinePoint[], deltaK: number[], mK: number[]) {\n  const pointsLen = points.length;\n\n  let alphaK: number, betaK: number, tauK: number, squaredMagnitude: number, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\n\nfunction monotoneCompute(points: SplinePoint[], mK: number[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta: number, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\n\n/**\n * This function calculates B\u00E9zier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */\nexport function splineCurveMonotone(points: SplinePoint[], indexAxis: 'x' | 'y' = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK: number[] = Array(pointsLen).fill(0);\n  const mK: number[] = Array(pointsLen);\n\n  // Calculate slopes (deltaK) and initialize tangents (mK)\n  let i, pointBefore: OptionalSplinePoint, pointCurrent: OptionalSplinePoint;\n  let pointAfter = getPoint(points, 0);\n\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n\n      // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n        : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n          : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n\n  monotoneAdjust(points, deltaK, mK);\n\n  monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt: number, min: number, max: number) {\n  return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points: SplinePoint[], area: ChartArea) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\n\n/**\n * @private\n */\nexport function _updateBezierControlPoints(\n  points: SplinePoint[],\n  options,\n  area: ChartArea,\n  loop: boolean,\n  indexAxis: 'x' | 'y'\n) {\n  let i: number, ilen: number, point: SplinePoint, controlPoints: ReturnType<typeof splineCurve>;\n\n  // Only consider points that are drawn in case the spanGaps option is used\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n", "import type {ChartArea, Scale} from '../types/index.js';\nimport type Chart from '../core/core.controller.js';\nimport type {ChartEvent} from '../types.js';\nimport {INFINITY} from './helpers.math.js';\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */\n\n/**\n * @private\n */\nexport function _isDomSupported(): boolean {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * @private\n */\nexport function _getParentNode(domNode: HTMLCanvasElement): HTMLCanvasElement {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = (parent as ShadowRoot).host;\n  }\n  return parent as HTMLCanvasElement;\n}\n\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */\n\nfunction parseMaxStyle(styleValue: string | number, node: HTMLElement, parentProperty: string) {\n  let valueInPixels: number;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n\n    if (styleValue.indexOf('%') !== -1) {\n      // percentage * size in dimension\n      valueInPixels = (valueInPixels / 100) * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n\n  return valueInPixels;\n}\n\nconst getComputedStyle = (element: HTMLElement): CSSStyleDeclaration =>\n  element.ownerDocument.defaultView.getComputedStyle(element, null);\n\nexport function getStyle(el: HTMLElement, property: string): string {\n  return getComputedStyle(el).getPropertyValue(property);\n}\n\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles: CSSStyleDeclaration, style: string, suffix?: string): ChartArea {\n  const result = {} as ChartArea;\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\n\nconst useOffsetPos = (x: number, y: number, target: HTMLElement | EventTarget) =>\n  (x > 0 || y > 0) && (!target || !(target as HTMLElement).shadowRoot);\n\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */\nfunction getCanvasPosition(\n  e: Event | TouchEvent | MouseEvent,\n  canvas: HTMLCanvasElement\n): {\n    x: number;\n    y: number;\n    box: boolean;\n  } {\n  const touches = (e as TouchEvent).touches;\n  const source = (touches && touches.length ? touches[0] : e) as MouseEvent;\n  const {offsetX, offsetY} = source as MouseEvent;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\n\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */\n\nexport function getRelativePosition(\n  event: Event | ChartEvent | TouchEvent | MouseEvent,\n  chart: Chart\n): { x: number; y: number } {\n  if ('native' in event) {\n    return event;\n  }\n\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(event, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\n\nfunction getContainerSize(canvas: HTMLCanvasElement, width: number, height: number): Partial<Scale> {\n  let maxWidth: number, maxHeight: number;\n\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect(); // this is the border box of the container\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\n\nconst round1 = (v: number) => Math.round(v * 10) / 10;\n\n// eslint-disable-next-line complexity\nexport function getMaximumSize(\n  canvas: HTMLCanvasElement,\n  bbWidth?: number,\n  bbHeight?: number,\n  aspectRatio?: number\n): { width: number; height: number } {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    // https://github.com/chartjs/Chart.js/issues/4659\n    // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n    height = round1(width / 2);\n  }\n\n  const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n\n  if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n    height = containerSize.height;\n    width = round1(Math.floor(height * aspectRatio));\n  }\n\n  return {width, height};\n}\n\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */\nexport function retinaScale(\n  chart: Chart,\n  forceRatio: number,\n  forceStyle?: boolean\n): boolean | void {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n\n  chart.height = Math.floor(chart.height);\n  chart.width = Math.floor(chart.width);\n\n  const canvas = chart.canvas;\n\n  // If no style has been set on the canvas, the render size is used as display size,\n  // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n  // See https://github.com/chartjs/Chart.js/issues/3575\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\nexport const supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() { // This function will be called when the browser attempts to access the passive property.\n        passiveSupported = true;\n        return false;\n      }\n    } as EventListenerOptions;\n\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n    // continue regardless of error\n  }\n  return passiveSupported;\n}());\n\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */\n\nexport function readUsedSize(\n  element: HTMLElement,\n  property: 'width' | 'height'\n): number | undefined {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n", "import type {Point, SplinePoint} from '../types/geometric.js';\n\n/**\n * @private\n */\nexport function _pointInLine(p1: Point, p2: Point, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\n\n/**\n * @private\n */\nexport function _steppedInterpolation(\n  p1: Point,\n  p2: Point,\n  t: number, mode: 'middle' | 'after' | unknown\n) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n      : mode === 'after' ? t < 1 ? p1.y : p2.y\n        : t > 0 ? p2.y : p1.y\n  };\n}\n\n/**\n * @private\n */\nexport function _bezierInterpolation(p1: SplinePoint, p2: SplinePoint, t: number, mode?) { // eslint-disable-line @typescript-eslint/no-unused-vars\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n", "export interface RTLAdapter {\n  x(x: number): number;\n  setWidth(w: number): void;\n  textAlign(align: 'center' | 'left' | 'right'): 'center' | 'left' | 'right';\n  xPlus(x: number, value: number): number;\n  leftForLtr(x: number, itemWidth: number): number;\n}\n\nconst getRightToLeftAdapter = function(rectX: number, width: number): RTLAdapter {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\n\nconst getLeftToRightAdapter = function(): RTLAdapter {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) { // eslint-disable-line no-unused-vars\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) { // eslint-disable-line @typescript-eslint/no-unused-vars\n      return x;\n    },\n  };\n};\n\nexport function getRtlAdapter(rtl: boolean, rectX: number, width: number) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nexport function overrideTextDirection(ctx: CanvasRenderingContext2D, direction: 'ltr' | 'rtl') {\n  let style: CSSStyleDeclaration, original: [string, string];\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n\n    style.setProperty('direction', direction, 'important');\n    (ctx as { prevTextDirection?: [string, string] }).prevTextDirection = original;\n  }\n}\n\nexport function restoreTextDirection(ctx: CanvasRenderingContext2D, original?: [string, string]) {\n  if (original !== undefined) {\n    delete (ctx as { prevTextDirection?: [string, string] }).prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n", "import {_angleBetween, _angleDiff, _isBetween, _normalizeAngle} from './helpers.math.js';\nimport {createContext} from './helpers.options.js';\nimport {isPatternOrGradient} from './helpers.color.js';\n\n/**\n * @typedef { import('../elements/element.line.js').default } LineElement\n * @typedef { import('../elements/element.point.js').default } PointElement\n * @typedef {{start: number, end: number, loop: boolean, style?: any}} Segment\n */\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\n\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\n\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  // eslint-disable-next-line prefer-const\n  let {start, end, loop} = segment;\n  let i, ilen;\n\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\n\n/**\n * Returns the sub-segment(s) of a line segment that fall in the given bounds\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} [segment.style] - segment style\n * @param {PointElement[]} points - the points that this segment refers to\n * @param {object} [bounds]\n * @param {string} bounds.property - the property of a `PointElement` we are bounding. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the property\n * @param {number} bounds.end - end value of the property\n * @private\n **/\nexport function _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n\n    if (point.skip) {\n      continue;\n    }\n\n    value = normalize(point[property]);\n\n    if (value === prevValue) {\n      continue;\n    }\n\n    inside = between(value, startBound, endBound);\n\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n\n  return result;\n}\n\n\n/**\n * Returns the segments of the line that are inside given bounds\n * @param {LineElement} line\n * @param {object} [bounds]\n * @param {string} bounds.property - the property we are bounding with. `x`, `y` or `angle`.\n * @param {number} bounds.start - start value of the `property`\n * @param {number} bounds.end - end value of the `property`\n * @private\n */\nexport function _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\n\n/**\n * Find start and end index of a line.\n */\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n\n  if (loop && !spanGaps) {\n    // loop and not spanning gaps, first find a gap to start from\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n\n  // find first non skipped point (after the first gap possibly)\n  while (start < count && points[start].skip) {\n    start++;\n  }\n\n  // if we looped to count, start needs to be 0\n  start %= count;\n\n  if (loop) {\n    // loop will go past count, if start > 0\n    end += start;\n  }\n\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n\n  // end could be more than count, normalize\n  end %= count;\n\n  return {start, end};\n}\n\n/**\n * Compute solid segments from Points, when spanGaps === false\n * @param {PointElement[]} points - the points\n * @param {number} start - start index\n * @param {number} max - max index (can go past count on a loop)\n * @param {boolean} loop - boolean indicating that this would be a loop if no gaps are found\n */\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        // @ts-ignore\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n\n  return result;\n}\n\n/**\n * Compute the continuous segments that define the whole line\n * There can be skipped points within a segment, if spanGaps is true.\n * @param {LineElement} line\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n * @private\n */\nexport function _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n\n  if (!count) {\n    return [];\n  }\n\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\n/**\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\n/**\n * @param {LineElement} line\n * @param {Segment[]} segments\n * @param {PointElement[]} points\n * @param {object} [segmentOptions]\n * @return {Segment[]}\n */\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    // Style can not start/end on a skipped point, adjust indices accordingly\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n\n  return result;\n}\n\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\n\nfunction styleChanged(style, prevStyle) {\n  if (!prevStyle) {\n    return false;\n  }\n  const cache = [];\n  const replacer = function(key, value) {\n    if (!isPatternOrGradient(value)) {\n      return value;\n    }\n    if (!cache.includes(value)) {\n      cache.push(value);\n    }\n    return cache.indexOf(value);\n  };\n  return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n", "import {requestAnimFrame} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('./core.animation.js').default } Animation\n * @typedef { import('./core.controller.js').default } Chart\n */\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is export for typedoc\n */\nexport class Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n\n  /**\n\t * @private\n\t */\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _update(date = Date.now()) {\n    let remaining = 0;\n\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n\n      for (; i >= 0; --i) {\n        item = items[i];\n\n        if (item._active) {\n          if (item._total > anims.duration) {\n            // if the animation has been updated and its duration prolonged,\n            // update to total duration of current animations run (for progress event)\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          // Remove the item by replacing it with last item and removing the last\n          // A lot faster than splice.\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n\n      remaining += items.length;\n    });\n\n    this._lastDate = date;\n\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} event - event name\n\t * @param {Function} cb - callback\n\t */\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n\n  /**\n\t * Add animations\n\t * @param {Chart} chart\n\t * @param {Animation[]} items - animations\n\t */\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n\n  /**\n\t * Counts number of active animations for the chart\n\t * @param {Chart} chart\n\t */\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n\n  /**\n\t * Start animating (all charts)\n\t * @param {Chart} chart\n\t */\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n\t * Stop all animations for the chart\n\t * @param {Chart} chart\n\t */\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n\n  /**\n\t * Remove chart from Animator\n\t * @param {Chart} chart\n\t */\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Animator();\n", "import effects from '../helpers/helpers.easing.js';\nimport {resolve} from '../helpers/helpers.options.js';\nimport {color as helpersColor} from '../helpers/helpers.color.js';\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  /**\n   * @param {string} from\n   * @param {string} to\n   * @param {number} factor\n   */\n  color(from, to, factor) {\n    const c0 = helpersColor(from || transparent);\n    const c1 = c0.valid && helpersColor(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\n\nexport default class Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n\n  active() {\n    return this._active;\n  }\n\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n\n  cancel() {\n    if (this._active) {\n      // update current evaluated value, for smoother animations\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n\n    this._active = from !== to && (loop || (elapsed < duration));\n\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n\n    this._target[prop] = this._fn(from, to, factor);\n  }\n\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n", "import animator from './core.animator.js';\nimport Animation from './core.animation.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isObject} from '../helpers/helpers.core.js';\n\nexport default class Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n\n    const animationOptions = Object.keys(defaults.animation);\n    const animatedProps = this._properties;\n\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n\n  /**\n\t * Utility to handle animation of `options`.\n\t * @private\n\t */\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      // Going to shared options:\n      // After all animations are done, assign the shared options object to the element\n      // So any new updates to the shared options are observed\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n        // rejected, noop\n      });\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @private\n\t */\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n\n      if (animation) {\n        if (cfg && animation.active()) {\n          // There is an existing active animation, let's update that\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        // not animated, set directly to new value\n        target[prop] = value;\n        continue;\n      }\n\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n\n\n  /**\n\t * Update `target` properties to new values, using configured animations\n\t * @param {object} target - object to update\n\t * @param {object} values - new target properties\n\t * @returns {boolean|undefined} - `true` if animations were started\n\t **/\n  update(target, values) {\n    if (this._properties.size === 0) {\n      // Nothing is animated, just apply the new values.\n      Object.assign(target, values);\n      return;\n    }\n\n    const animations = this._createAnimations(target, values);\n\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\n\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  // @ts-ignore\n  return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    // Going from shared options to distinct one:\n    // Create new options object containing the old shared values and start updating that.\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n", "import Animations from './core.animations.js';\nimport defaults from './core.defaults.js';\nimport {isArray, isFinite, isObject, valueOrDefault, resolveObjectKey, defined} from '../helpers/helpers.core.js';\nimport {listenArrayEvents, unlistenArrayEvents} from '../helpers/helpers.collection.js';\nimport {createContext, sign} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('./core.scale.js').default } Scale\n */\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\n\nfunction toClip(value) {\n  let t, r, b, l;\n\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\n\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n\n  if (value === null) {\n    return;\n  }\n\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\n\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\n\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\n\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n\n  return null;\n}\n\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}}\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n\n    const visualValues = stack._visualValues || (stack._visualValues = {});\n    visualValues[datasetIndex] = value;\n  }\n}\n\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\n\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\n\nfunction clearStacks(meta, items) {\n  // Not using meta.index here, because it might be already updated if the dataset changed location\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n    if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n      delete stacks[axis]._visualValues[datasetIndex];\n    }\n  }\n}\n\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\n\nexport default class DatasetController {\n\n  /**\n   * @type {any}\n   */\n  static defaults = {};\n\n  /**\n   * Element type used to generate a meta dataset (e.g. Chart.element.LineElement).\n   */\n  static datasetElementType = null;\n\n  /**\n   * Element type used to generate a meta data (e.g. Chart.element.PointElement).\n   */\n  static dataElementType = null;\n\n  /**\n\t * @param {Chart} chart\n\t * @param {number} datasetIndex\n\t */\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    /** @type {boolean | object} */\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.datasetElementType = new.target.datasetElementType;\n    this.dataElementType = new.target.dataElementType;\n\n    this.initialize();\n  }\n\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n\n    if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n      console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n    }\n  }\n\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n\n  /**\n\t * @param {string} scaleID\n\t * @return {Scale}\n\t */\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n\n  /**\n\t * @private\n\t */\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n\n  reset() {\n    this._update('reset');\n  }\n\n  /**\n\t * @private\n\t */\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n\n    // In order to correctly handle data addition/deletion animation (and thus simulate\n    // real-time charts), we need to monitor these data modifications and synchronize\n    // the internal metadata accordingly.\n\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        // This case happens when the user replaced the data array instance.\n        unlistenArrayEvents(_data, this);\n        // Discard old parsed data and stacks\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n\n  addElements() {\n    const meta = this._cachedMeta;\n\n    this._dataCheck();\n\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n\n    this._dataCheck();\n\n    // make sure cached _stacked status is current\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n\n    // detect change in stack option\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      // remove values from old stack\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n\n    // Re-sync meta data in case the user replaced the data array or if we missed\n    // any updates and so make sure that we handle number of datapoints changing.\n    this._resyncElements(resetNewElements);\n\n    // if stack changed, update stack values for the whole dataset\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n\n  /**\n\t * Merges user-supplied and default dataset-level options\n\t * @private\n\t */\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n\n  /**\n\t * @param {number} start\n\t * @param {number} count\n\t */\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [1,3,4]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {xScale0: 0, yScale0: 1}\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [[1,2],[3,4]]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id.\n\t * Example: {x: 0, y: 1}\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @param {object} meta - dataset meta\n\t * @param {array} data - data array. Example [{x:1, y:5}, {x:2, y:10}]\n\t * @param {number} start - start index\n\t * @param {number} count - number of items to parse\n\t * @returns {object} parsed item - item containing index and a parsed value\n\t * for each scale id. _custom is optional\n\t * Example: {xScale0: 0, yScale0: 1, _custom: {r: 10, foo: 'bar'}}\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n\n  /**\n\t * @protected\n\t */\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]._visualValues\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        // if the data is sorted, we don't need to check further from this end of array\n        break;\n      }\n    }\n    if (sorted) {\n      // in the sorted case, find first non-skipped value from other end of array\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return false;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {} // eslint-disable-line no-unused-vars\n\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n\n  /**\n\t * Returns a set of predefined style properties that should be used to represent the dataset\n\t * or the data if the index is specified\n\t * @param {number} index - data index\n\t * @param {boolean} [active] - true if hover\n\t * @return {object} style object\n\t */\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n\n  /**\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    // context is provided as a function, and is called only if needed,\n    // so we don't create a context for each element if not needed.\n    const context = () => this.getContext(index, active, mode);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n    if (values.$shared) {\n      // `$shared` indicates this set of options can be shared between multiple elements.\n      // Sharing is used to reduce number of properties to change during animation.\n      values.$shared = sharing;\n\n      // We cache options by `mode`, which can be 'active' for example. This enables us\n      // to have the 'active' element options and 'default' options to switch between\n      // when interacting.\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n\n    return values;\n  }\n\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n\n  /**\n\t * Utility for getting the options object shared between elements\n\t * @protected\n\t */\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n\n  /**\n\t * Utility for determining if `options` should be included in the updated properties\n\t * @protected\n\t */\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n\n  /**\n   * @todo v4, rename to getSharedOptions and remove excess functions\n   */\n  _getSharedOptions(start, mode) {\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const previouslySharedOptions = this._sharedOptions;\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    return {sharedOptions, includeOptions};\n  }\n\n  /**\n\t * Utility for updating an element with new properties, using animations when appropriate.\n\t * @protected\n\t */\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n\n  /**\n\t * Utility to animate the shared options, that are potentially affecting multiple elements.\n\t * @protected\n\t */\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      // When going from active to inactive, we need to update to the shared options.\n      // This way the once hovered element will end up with the same original shared options instance, after animation.\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n\n  /**\n\t * @private\n\t */\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n\n    // Apply changes detected through array listeners\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n\n    if (count) {\n      // TODO: It is not optimal to always parse the old data\n      // This is done because we are not detecting direct assignments:\n      // chart.data.datasets[0].data[5] = 10;\n      // chart.data.datasets[0].data[5].y = 10;\n      this.parse(0, count);\n    }\n\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n\n  updateElements(element, start, count, mode) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @private\n\t */\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n\n  /**\n\t * @private\n   */\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {\n  _arrayUnique, isArray, isNullOrUndef,\n  valueOrDefault, resolveObjectKey, sign, defined\n} from '../helpers/index.js';\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\n\n/**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      // Ignore truncated pixels\n      return;\n    }\n    if (defined(prev)) {\n      // curr - prev === 0 is ignored\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n\n  return min;\n}\n\n/**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    // When bar thickness is enforced, category and bar percentages are ignored.\n    // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n    // and deprecate barPercentage since this value is ignored when thickness is absolute.\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\n\n/**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n\n  if (prev === null) {\n    // first data: its size is double based on the next point or,\n    // if it's also the last data, we use the scale size.\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n\n  if (next === null) {\n    // last data: its size is also double based on the previous point.\n    next = curr + curr - prev;\n  }\n\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n\n  // Store `barEnd` (furthest away from origin) as parsed value,\n  // to make stacking straight forward\n  item[vScale.axis] = barEnd;\n\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\n\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\n\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\n\nexport default class BarController extends DatasetController {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'bar',\n\n    categoryPercentage: 0.8,\n    barPercentage: 0.9,\n    grouped: true,\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'base', 'width', 'height']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n        offset: true,\n        grid: {\n          offset: true\n        }\n      },\n      _value_: {\n        type: 'linear',\n        beginAtZero: true,\n      }\n    }\n  };\n\n\n  /**\n\t * Overriding primitive data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding array data parsing since we support mixed primitive/array\n\t * data for float bars\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n\n  /**\n\t * Overriding object data parsing since we support mixed primitive/array\n\t * value-scale data for float bars\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      // float bar: only one end of the bar is considered by `super`\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n\n  /**\n\t * @return {number|boolean}\n\t * @protected\n\t */\n  getMaxOverflow() {\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n\n  initialize() {\n    this.enableOptionSharing = true;\n\n    super.initialize();\n\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n\n  /**\n\t * Returns the stacks based on groups and bar visibility.\n\t * @param {number} [last] - The dataset index\n\t * @param {number} [dataIndex] - The data index of the ruler\n\t * @returns {string[]} The list of stack IDs\n\t * @private\n\t */\n  _getStacks(last, dataIndex) {\n    const {iScale} = this._cachedMeta;\n    const metasets = iScale.getMatchingVisibleMetas(this._type)\n      .filter(meta => meta.controller.options.grouped);\n    const stacked = iScale.options.stacked;\n    const stacks = [];\n\n    const skipNull = (meta) => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\n\n      // stacked   | meta.stack\n      //           | found | not found | undefined\n      // false     |   x   |     x     |     x\n      // true      |       |     x     |\n      // undefined |       |     x     |     x\n      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n        stacks.push(meta.stack);\n      }\n      if (meta.index === last) {\n        break;\n      }\n    }\n\n    // No stacks? that means there is no visible data. Let's still initialize an `undefined`\n    // stack where possible invisible bars will be located.\n    // https://github.com/chartjs/Chart.js/issues/6368\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n\n    return stacks;\n  }\n\n  /**\n\t * Returns the effective number of stacks based on groups and bar visibility.\n\t * @private\n\t */\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n\n  /**\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\n\t * @param {number} [datasetIndex] - The dataset index\n\t * @param {string} [name] - The stack name to find\n   * @param {number} [dataIndex]\n\t * @returns {number} The stack index\n\t * @private\n\t */\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1; // indexOf returns -1 if element is not present\n\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      // bar thickness ratio used for non-grouped bars\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n\n  /**\n\t * Note: pixel values are not clamped to the scale area.\n\t * @private\n\t */\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked, index: datasetIndex}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      // bars crossing origin are not stacked\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      // When not visible, no height\n      head = base;\n    }\n\n    size = head - base;\n\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n\n      if (_stacked && !floating) {\n        // visual data coordinates after applying minBarLength\n        parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n      }\n    }\n\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n\n  /**\n\t * @private\n\t */\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      // For non-grouped bar charts, exact pixel values are used\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {valueOrDefault} from '../helpers/helpers.core.js';\n\nexport default class BubbleController extends DatasetController {\n\n  static id = 'bubble';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'borderWidth', 'radius']\n      }\n    }\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n\n  /**\n\t * Parse array of primitive values\n\t * @protected\n\t */\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of arrays\n\t * @protected\n\t */\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * Parse array of objects\n\t * @protected\n\t */\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n\n  update(mode) {\n    const points = this._cachedMeta.data;\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n\n  /**\n\t * @param {number} index\n\t * @param {string} [mode]\n\t * @protected\n\t */\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n\n    // In case values were cached (and thus frozen), we need to clone the values\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n\n    // Custom radius resolution\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n\n    return values;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isObject, resolveObjectKey, toPercentage, toDimension, valueOrDefault} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {toRadians, PI, TAU, HALF_PI, _angleBetween} from '../helpers/helpers.math.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\n\nexport default class DoughnutController extends DatasetController {\n\n  static id = 'doughnut';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'arc',\n    animation: {\n      // Boolean - Whether we animate the rotation of the Doughnut\n      animateRotate: true,\n      // Boolean - Whether we animate scaling the Doughnut from the centre\n      animateScale: false\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n      },\n    },\n    // The percentage of the chart that we cut out of the middle.\n    cutout: '50%',\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%',\n\n    // Spacing between arcs\n    spacing: 0,\n\n    indexAxis: 'r',\n  };\n\n  static descriptors = {\n    _scriptable: (name) => name !== 'spacing',\n    _indexable: (name) => name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash'),\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    // Need to override these to give a nice default\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n\n  linkScales() {}\n\n  /**\n\t * Override data parsing, since we are not using scales\n\t */\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n\n  /**\n\t * @private\n\t */\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n\n  /**\n\t * Get the maximal rotation & circumference extents\n\t * across all visible datasets.\n\t */\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n\n  /**\n\t * @param {string} mode\n\t */\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n\n    // Compute the maximal rotation & circumference limits.\n    // If we only consider our dataset, this can cause problems when two datasets\n    // are both less than a circle with different rotations (starting angles)\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n\n    meta.total = this.calculateTotal();\n\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @private\n   */\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    let startAngle = this._getRotation();\n    let i;\n\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n\n    return total;\n  }\n\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n\n    if (!arcs) {\n      // Find the outmost visible dataset\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n\n    if (!arcs) {\n      return 0;\n    }\n\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n\n  getMaxOffset(arcs) {\n    let max = 0;\n\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n\n  /**\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n\t * @private\n\t */\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n\n    return ringWeightOffset;\n  }\n\n  /**\n\t * @private\n\t */\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n\n  /**\n\t * Returns the sum of all visible data set weights.\n\t * @private\n\t */\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class LineController extends DatasetController {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n\n    showLine: true,\n    spanGaps: false,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    scales: {\n      _index_: {\n        type: 'category',\n      },\n      _value_: {\n        type: 'linear',\n      },\n    }\n  };\n\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    // Update Line\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    const end = start + count;\n    const pointsCount = points.length;\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = 0; i < pointsCount; ++i) {\n      const point = points[i];\n      const properties = directUpdate ? point : {};\n\n      if (i < start || i >= end) {\n        properties.skip = true;\n        continue;\n      }\n\n      const parsed = this.getParsed(i);\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {toRadians, PI, formatNumber, _parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class PolarAreaController extends DatasetController {\n\n  static id = 'polarArea';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    dataElementType: 'arc',\n    animation: {\n      animateRotate: true,\n      animateScale: true\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n      },\n    },\n    indexAxis: 'r',\n    startAngle: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    plugins: {\n      legend: {\n        labels: {\n          generateLabels(chart) {\n            const data = chart.data;\n            if (data.labels.length && data.datasets.length) {\n              const {labels: {pointStyle, color}} = chart.legend.options;\n\n              return data.labels.map((label, i) => {\n                const meta = chart.getDatasetMeta(0);\n                const style = meta.controller.getStyle(i);\n\n                return {\n                  text: label,\n                  fillStyle: style.backgroundColor,\n                  strokeStyle: style.borderColor,\n                  fontColor: color,\n                  lineWidth: style.borderWidth,\n                  pointStyle: pointStyle,\n                  hidden: !chart.getDataVisibility(i),\n\n                  // Extra data used for toggling the correct item\n                  index: i\n                };\n              });\n            }\n            return [];\n          }\n        },\n\n        onClick(e, legendItem, legend) {\n          legend.chart.toggleDataVisibility(legendItem.index);\n          legend.chart.update();\n        }\n      }\n    },\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n        angleLines: {\n          display: false\n        },\n        beginAtZero: true,\n        grid: {\n          circular: true\n        },\n        pointLabels: {\n          display: false\n        },\n        startAngle: 0\n      }\n    }\n  };\n\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n\n  /**\n   * @protected\n   */\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n\n    return range;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n\n    const defaultAngle = 360 / this.countVisibleElements();\n\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n\n    return count;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\n", "import DoughnutController from './controller.doughnut.js';\n\n// Pie charts are Doughnut chart with different defaults\nexport default class PieController extends DoughnutController {\n\n  static id = 'pie';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    // The percentage of the chart that we cut out of the middle.\n    cutout: 0,\n\n    // The rotation of the chart, where the first data arc begins.\n    rotation: 0,\n\n    // The total circumference of the chart.\n    circumference: 360,\n\n    // The outer radius of the chart\n    radius: '100%'\n  };\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {_parseObjectDataRadialScale} from '../helpers/index.js';\n\nexport default class RadarController extends DatasetController {\n\n  static id = 'radar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: 'line',\n    dataElementType: 'point',\n    indexAxis: 'r',\n    showLine: true,\n    elements: {\n      line: {\n        fill: 'start'\n      }\n    },\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n    aspectRatio: 1,\n\n    scales: {\n      r: {\n        type: 'radialLinear',\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n\n    // Update Line\n    line.points = points;\n    // In resize mode only point locations change, so no need to set the points or options.\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n\n      this.updateElement(line, undefined, properties, mode);\n    }\n\n    // Update Points\n    this.updateElements(points, 0, points.length, mode);\n  }\n\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\n", "import DatasetController from '../core/core.datasetController.js';\nimport {isNullOrUndef} from '../helpers/index.js';\nimport {isNumber} from '../helpers/helpers.math.js';\nimport {_getStartAndCountOfVisiblePoints, _scaleRangesChanged} from '../helpers/helpers.extras.js';\n\nexport default class ScatterController extends DatasetController {\n\n  static id = 'scatter';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    datasetElementType: false,\n    dataElementType: 'point',\n    showLine: false,\n    fill: false\n  };\n\n  /**\n   * @type {any}\n   */\n  static overrides = {\n\n    interaction: {\n      mode: 'point'\n    },\n\n    scales: {\n      x: {\n        type: 'linear'\n      },\n      y: {\n        type: 'linear'\n      }\n    }\n  };\n\n  /**\n\t * @protected\n\t */\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const labels = this.chart.data.labels || [];\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n\n    return {\n      label: labels[index] || '',\n      value: '(' + x + ', ' + y + ')'\n    };\n  }\n\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    // @ts-ignore\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n\n    this._drawStart = start;\n    this._drawCount = count;\n\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n\n    if (this.options.showLine) {\n\n      // https://github.com/chartjs/Chart.js/issues/11333\n      if (!this.datasetElementType) {\n        this.addElements();\n      }\n      const {dataset: line, _dataset} = meta;\n\n      // Update Line\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\n\n      const options = this.resolveDatasetElementOptions(mode);\n      options.segment = this.options.segment;\n      this.updateElement(line, undefined, {\n        animated: !animationsDisabled,\n        options\n      }, mode);\n    } else if (this.datasetElementType) {\n      // https://github.com/chartjs/Chart.js/issues/11333\n      delete meta.dataset;\n      this.datasetElementType = false;\n    }\n\n    // Update Points\n    this.updateElements(points, start, count, mode);\n  }\n\n  addElements() {\n    const {showLine} = this.options;\n\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = this.chart.registry.getElement('line');\n    }\n\n    super.addElements();\n  }\n\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n\n      prevParsed = parsed;\n    }\n\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n\n  /**\n\t * @protected\n\t */\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\n\n    if (!this.options.showLine) {\n      let max = 0;\n      for (let i = data.length - 1; i >= 0; --i) {\n        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n      }\n      return max > 0 && max;\n    }\n\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n\n    if (!data.length) {\n      return border;\n    }\n\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n}\n", "/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */\n\nimport type {AnyObject} from '../types/basic.js';\nimport type {ChartOptions} from '../types/index.js';\n\nexport type TimeUnit = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';\n\nexport interface DateAdapter<T extends AnyObject = AnyObject> {\n  readonly options: T;\n  /**\n   * Will called with chart options after adapter creation.\n   */\n  init(this: DateAdapter<T>, chartOptions: ChartOptions): void;\n  /**\n   * Returns a map of time formats for the supported formatting units defined\n   * in Unit as well as 'datetime' representing a detailed date/time string.\n   */\n  formats(this: DateAdapter<T>): Record<string, string>;\n  /**\n   * Parses the given `value` and return the associated timestamp.\n   * @param value - the value to parse (usually comes from the data)\n   * @param [format] - the expected data format\n   */\n  parse(this: DateAdapter<T>, value: unknown, format?: TimeUnit): number | null;\n  /**\n   * Returns the formatted date in the specified `format` for a given `timestamp`.\n   * @param timestamp - the timestamp to format\n   * @param format - the date/time token\n   */\n  format(this: DateAdapter<T>, timestamp: number, format: TimeUnit): string;\n  /**\n   * Adds the specified `amount` of `unit` to the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param amount - the amount to add\n   * @param unit - the unit as string\n   */\n  add(this: DateAdapter<T>, timestamp: number, amount: number, unit: TimeUnit): number;\n  /**\n   * Returns the number of `unit` between the given timestamps.\n   * @param a - the input timestamp (reference)\n   * @param b - the timestamp to subtract\n   * @param unit - the unit as string\n   */\n  diff(this: DateAdapter<T>, a: number, b: number, unit: TimeUnit): number;\n  /**\n   * Returns start of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   * @param [weekday] - the ISO day of the week with 1 being Monday\n   * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n   */\n  startOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number): number;\n  /**\n   * Returns end of `unit` for the given `timestamp`.\n   * @param timestamp - the input timestamp\n   * @param unit - the unit as string\n   */\n  endOf(this: DateAdapter<T>, timestamp: number, unit: TimeUnit | 'isoWeek'): number;\n}\n\nfunction abstract<T = void>(): T {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\nclass DateAdapterBase implements DateAdapter {\n\n  /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */\n  static override<T extends AnyObject = AnyObject>(\n    members: Partial<Omit<DateAdapter<T>, 'options'>>\n  ) {\n    Object.assign(DateAdapterBase.prototype, members);\n  }\n\n  readonly options: AnyObject;\n\n  constructor(options: AnyObject) {\n    this.options = options || {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  init() {}\n\n  formats(): Record<string, string> {\n    return abstract();\n  }\n\n  parse(): number | null {\n    return abstract();\n  }\n\n  format(): string {\n    return abstract();\n  }\n\n  add(): number {\n    return abstract();\n  }\n\n  diff(): number {\n    return abstract();\n  }\n\n  startOf(): number {\n    return abstract();\n  }\n\n  endOf(): number {\n    return abstract();\n  }\n}\n\nexport default {\n  _date: DateAdapterBase\n};\n", "import {_lookupByKey, _rlookupByKey} from '../helpers/helpers.collection.js';\nimport {getRelativePosition} from '../helpers/helpers.dom.js';\nimport {_angleBetween, getAngleFromPoint} from '../helpers/helpers.math.js';\nimport {_isPointInArea} from '../helpers/index.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef {{axis?: string, intersect?: boolean, includeInvisible?: boolean}} InteractionOptions\n * @typedef {{datasetIndex: number, index: number, element: import('./core.element.js').default}} InteractionItem\n * @typedef { import('../types/index.js').Point } Point\n */\n\n/**\n * Helper function to do binary search when possible\n * @param {object} metaset - the dataset meta\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {number} value - the value to find\n * @param {boolean} [intersect] - should the element intersect\n * @returns {{lo:number, hi:number}} indices to search data array between\n */\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      // _sharedOptions indicates that each element has equal options -> equal proportions\n      // So we can do a ranged binary search based on the range of first element and\n      // be confident to get the full range of indices that can intersect with the value.\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  // Default to all elements, when binary search can not be used.\n  return {lo: 0, hi: data.length - 1};\n}\n\n/**\n * Helper function to select candidate elements for interaction\n * @param {Chart} chart - the chart\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {function} handler - the callback to execute for each visible item\n * @param {boolean} [intersect] - consider intersecting items\n */\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\n\n/**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy|r\n */\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\n\n/**\n * Helper function to get the items that intersect the event position\n * @param {Chart} chart - the chart\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis mode. x|y|xy|r\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a radial chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position for a cartesian chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      // Can have multiple items at the same distance in which case we sort by size\n      items.push({element, datasetIndex, index});\n    }\n  }\n\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\n\n/**\n * Helper function to get the items nearest to the event position considering all visible items in the chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axes along which to measure distance\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @param {boolean} [includeInvisible] - include invisible points that are outside of the chart area\n * @return {InteractionItem[]} the nearest items\n */\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\n/**\n * Helper function to get the items matching along the given X or Y axis\n * @param {Chart} chart - the chart to look at elements from\n * @param {Point} position - the point to be nearest to, in relative coordinates\n * @param {string} axis - the axis to match\n * @param {boolean} [intersect] - if true, only consider items that intersect the position\n * @param {boolean} [useFinalPosition] - use the element's animation target instead of current position\n * @return {InteractionItem[]} the nearest items\n */\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n\n  // If we want to trigger on an intersect and we don't have any items\n  // that intersect the position, return nothing\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\n\n/**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\nexport default {\n  // Part of the public API to facilitate developers creating their own modes\n  evaluateInteractionItems,\n\n  // Helper function for different modes\n  modes: {\n    /**\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n\t\t * @function Chart.Interaction.modes.index\n\t\t * @since v2.4.0\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      // Default axis for index mode is 'x' to match old behaviour\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n\n      if (!items.length) {\n        return [];\n      }\n\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n\n        // don't count items that are skipped (null data)\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n\n      return elements;\n    },\n\n    /**\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\n\t\t * @function Chart.Interaction.modes.dataset\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n\n      return items;\n    },\n\n    /**\n\t\t * Point mode returns all elements that hit test based on the event position\n\t\t * of the event\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * nearest mode returns the element closest to the point\n\t\t * @function Chart.Interaction.modes.intersect\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n\n    /**\n\t\t * x mode returns the elements that hit-test at the current x coordinate\n\t\t * @function Chart.Interaction.modes.x\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n\n    /**\n\t\t * y mode returns the elements that hit-test at the current y coordinate\n\t\t * @function Chart.Interaction.modes.y\n\t\t * @param {Chart} chart - the chart we are returning items from\n\t\t * @param {Event} e - the event we are find things at\n\t\t * @param {InteractionOptions} options - options to use\n\t\t * @param {boolean} [useFinalPosition] - use final element position (animation target)\n\t\t * @return {InteractionItem[]} - items that are found\n\t\t */\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n", "import {defined, each, isObject} from '../helpers/helpers.core.js';\nimport {toPadding} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n */\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\n\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\n\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\n\n/**\n * store dimensions used instead of available chartArea in fitBoxes\n **/\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n\n  // dynamically placed boxes size is not considered\n  if (!isObject(pos)) {\n    if (layout.size) {\n      // this layout was already counted for, lets first reduce old size\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n\n  // return booleans on the changes per direction\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\n\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n\n    // Dimensions changed and there were non full width boxes before this\n    // -> we have to refit those\n    refit |= same && refitBoxes.length;\n\n    // Chart area changed in the opposite direction\n    changed = changed || other;\n\n    if (!box.fullSize) { // fullSize boxes don't need to be re-fitted in any case\n      refitBoxes.push(layout);\n    }\n  }\n\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n\n  chartArea.x = x;\n  chartArea.y = y;\n}\n\n/**\n * @interface LayoutItem\n * @typedef {object} LayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullSize - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} draw - Draws the element\n * @prop {function} [getPadding] -  Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n// It is this service's responsibility of carrying out that layout.\nexport default {\n\n  /**\n\t * Register a box to a chart.\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n\t * @param {Chart} chart - the chart to use\n\t * @param {LayoutItem} item - the item to add to be laid out\n\t */\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n\n    // initialize item with default values\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    // @ts-ignore\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n\n    chart.boxes.push(item);\n  },\n\n  /**\n\t * Remove a layoutItem from a chart\n\t * @param {Chart} chart - the chart to remove the box from\n\t * @param {LayoutItem} layoutItem - the item to remove from the layout\n\t */\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n\n  /**\n\t * Sets (or updates) options on the given `item`.\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\n\t * @param {LayoutItem} item - the item to configure with the given options\n\t * @param {object} options - the new item options.\n\t */\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n\n  /**\n\t * Fits boxes of the given chart into the given size by having each box measure itself\n\t * then running a fitting algorithm\n\t * @param {Chart} chart - the chart\n\t * @param {number} width - the width to fit into\n\t * @param {number} height - the height to fit into\n   * @param {number} minPadding - minimum padding required for each side of chart area\n\t */\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n\n    // Before any changes are made, notify boxes that an update is about to being\n    // This is used to clear any cached data (e.g. scale limits)\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n\n    // Essentially we now have any number of boxes on each of the 4 sides.\n    // Our canvas looks like the following.\n    // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n    // B1 is the bottom axis\n    // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n    // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n    // an error will be thrown.\n    //\n    // |----------------------------------------------------|\n    // |                  T1 (Full Width)                   |\n    // |----------------------------------------------------|\n    // |    |    |                 T2                  |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    | C1 |                           | C2 |    |\n    // |    |    |----|                           |----|    |\n    // |    |    |                                     |    |\n    // | L1 | L2 |           ChartArea (C0)            | R1 |\n    // |    |    |                                     |    |\n    // |    |    |----|                           |----|    |\n    // |    |    | C3 |                           | C4 |    |\n    // |    |----|-------------------------------------|----|\n    // |    |    |                 B1                  |    |\n    // |----------------------------------------------------|\n    // |                  B2 (Full Width)                   |\n    // |----------------------------------------------------|\n    //\n\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n\n    // First fit the fullSize boxes, to reduce probability of re-fitting.\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n\n    // Then fit vertical boxes\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n    // Then fit horizontal boxes\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      // if the area changed, re-fit vertical boxes\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n\n    handleMaxPadding(chartArea);\n\n    // Finally place the boxes to correct coordinates\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n\n    // Move to opposite side of chart\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n\n    // Finally update boxes in chartArea (radial scale for example)\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n", "\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\n/**\n * Abstract class that allows abstracting platform dependencies away from the chart.\n */\nexport default class BasePlatform {\n  /**\n\t * Called at chart construction time, returns a context2d instance implementing\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n\t * @param {HTMLCanvasElement} canvas - The canvas from which to acquire context (platform specific)\n\t * @param {number} [aspectRatio] - The chart options\n\t */\n  acquireContext(canvas, aspectRatio) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Called at chart destruction time, releases any resources associated to the context\n\t * previously returned by the acquireContext() method.\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\n\t * @returns {boolean} true if the method succeeded, else false\n\t */\n  releaseContext(context) { // eslint-disable-line no-unused-vars\n    return false;\n  }\n\n  /**\n\t * Registers the specified listener on the given chart.\n\t * @param {Chart} chart - Chart from which to listen for event\n\t * @param {string} type - The ({@link ChartEvent}) type to listen for\n\t * @param {function} listener - Receives a notification (an object that implements\n\t * the {@link ChartEvent} interface) when an event of the specified type occurs.\n\t */\n  addEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Removes the specified listener previously registered with addEventListener.\n\t * @param {Chart} chart - Chart from which to remove the listener\n\t * @param {string} type - The ({@link ChartEvent}) type to remove\n\t * @param {function} listener - The listener function to remove from the event target.\n\t */\n  removeEventListener(chart, type, listener) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * @returns {number} the current devicePixelRatio of the device this platform is connected to.\n\t */\n  getDevicePixelRatio() {\n    return 1;\n  }\n\n  /**\n\t * Returns the maximum size in pixels of given canvas element.\n\t * @param {HTMLCanvasElement} element\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @returns {boolean} true if the canvas is attached to the platform, false if not.\n\t */\n  isAttached(canvas) { // eslint-disable-line no-unused-vars\n    return true;\n  }\n\n  /**\n   * Updates config with platform specific requirements\n   * @param {import('../core/core.config.js').default} config\n   */\n  updateConfig(config) { // eslint-disable-line no-unused-vars\n    // no-op\n  }\n}\n", "/**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\nimport BasePlatform from './platform.base.js';\n\n/**\n * Platform class for charts without access to the DOM or to many element properties\n * This platform is used by default for any chart passed an OffscreenCanvas.\n * @extends BasePlatform\n */\nexport default class BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n", "/**\n * Chart.Platform implementation for targeting a web browser\n */\n\nimport BasePlatform from './platform.base.js';\nimport {_getParentNode, getRelativePosition, supportsEventListenerOptions, readUsedSize, getMaximumSize} from '../helpers/helpers.dom.js';\nimport {throttled} from '../helpers/helpers.extras.js';\nimport {isNullOrUndef} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../core/core.controller.js').default } Chart\n */\n\nconst EXPANDO_KEY = '$chartjs';\n\n/**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\n\nconst isNullOrEmpty = value => value === null || value === '';\n/**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n * @param {HTMLCanvasElement} canvas\n * @param {number} [aspectRatio]\n */\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n\n  // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n  // returns null or '' if no explicit value has been set to the canvas attribute.\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n\n  // Chart.js modifies some canvas values that we want to restore on destroy\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n\n  // Force canvas to display as block to avoid extra space caused by inline\n  // elements, which would interfere with the responsive resize process.\n  // https://github.com/chartjs/Chart.js/issues/2538\n  style.display = style.display || 'block';\n  // Include possible borders in the size\n  style.boxSizing = style.boxSizing || 'border-box';\n\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      // If no explicit render height and style height, let's apply the aspect ratio,\n      // which one can be specified by the user but also by charts as default option\n      // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n\n  return canvas;\n}\n\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\n\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      // If the container size shrank during chart resize, let's assume\n      // scrollbar appeared. So we resize again with the scrollbar visible -\n      // effectively making chart smaller and the scrollbar hidden again.\n      // Because we are inside `throttled`, and currently `ticking`, scroll\n      // events are ignored during this whole 2 resize process.\n      // If we assumed wrong and something else happened, we are resizing\n      // twice in a frame (potential performance issue)\n      listener();\n    }\n  }, window);\n\n  // @ts-ignore until https://github.com/microsoft/TypeScript/issues/37861 implemented\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    // When its container's display is set to 'none' the callback will be called with a\n    // size of (0, 0), which will cause the chart to lose its original height, so skip\n    // resizing in such case.\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n\n  return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    // This case can occur if the chart is destroyed while waiting\n    // for the throttled function to occur. We prevent crashes by checking\n    // for a destroyed chart\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart);\n\n  addListener(canvas, type, proxy);\n\n  return proxy;\n}\n\n/**\n * Platform class for charts that can access the DOM and global window/document properties\n * @extends BasePlatform\n */\nexport default class DomPlatform extends BasePlatform {\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [aspectRatio]\n\t * @return {CanvasRenderingContext2D|null}\n\t */\n  acquireContext(canvas, aspectRatio) {\n    // To prevent canvas fingerprinting, some add-ons undefine the getContext\n    // method, for example: https://github.com/kkapsner/CanvasBlocker\n    // https://github.com/chartjs/Chart.js/issues/2807\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n\n    // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the canvas is\n    // inside an iframe or when running in a protected environment. We could guess the\n    // types from their toString() value but let's keep things flexible and assume it's\n    // a sufficient condition if the canvas has a context2D which has canvas as `canvas`.\n    // https://github.com/chartjs/Chart.js/issues/3887\n    // https://github.com/chartjs/Chart.js/issues/4102\n    // https://github.com/chartjs/Chart.js/issues/4152\n    if (context && context.canvas === canvas) {\n      // Load platform resources on first chart creation, to make it possible to\n      // import the library before setting platform options.\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n\n    return null;\n  }\n\n  /**\n\t * @param {CanvasRenderingContext2D} context\n\t */\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n\n    // The canvas render size might have been changed (and thus the state stack discarded),\n    // we can't use save() and restore() to restore the initial state. So make sure that at\n    // least the canvas context is reset to the default state by setting the canvas width.\n    // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n    // eslint-disable-next-line no-self-assign\n    canvas.width = canvas.width;\n\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n\n  /**\n\t *\n\t * @param {Chart} chart\n\t * @param {string} type\n\t * @param {function} listener\n\t */\n  addEventListener(chart, type, listener) {\n    // Can have only one listener per type, so make sure previous is removed\n    this.removeEventListener(chart, type);\n\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n\n\n  /**\n\t * @param {Chart} chart\n\t * @param {string} type\n\t */\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n\n    if (!proxy) {\n      return;\n    }\n\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t * @param {number} [width] - content width of parent element\n\t * @param {number} [height] - content height of parent element\n\t * @param {number} [aspectRatio] - aspect ratio to maintain\n\t */\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n\n  /**\n\t * @param {HTMLCanvasElement} canvas\n\t */\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n", "import {_isDomSupported} from '../helpers/index.js';\nimport BasePlatform from './platform.base.js';\nimport BasicPlatform from './platform.basic.js';\nimport DomPlatform from './platform.dom.js';\n\nexport function _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nexport {BasePlatform, BasicPlatform, DomPlatform};\n", "import type {AnyObject} from '../types/basic.js';\nimport type {Point} from '../types/geometric.js';\nimport type {Animation} from '../types/animation.js';\nimport {isNumber} from '../helpers/helpers.math.js';\n\nexport default class Element<T = AnyObject, O = AnyObject> {\n\n  static defaults = {};\n  static defaultRoutes = undefined;\n\n  x: number;\n  y: number;\n  active = false;\n  options: O;\n  $animations: Record<keyof T, Animation>;\n\n  tooltipPosition(useFinalPosition: boolean): Point {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y} as Point;\n  }\n\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n\n  /**\n   * Gets the current or final value of each prop. Can return extra properties (whole object).\n   * @param props - properties to get\n   * @param [final] - get the final value (animation target)\n   */\n  getProps<P extends (keyof T)[]>(props: P, final?: boolean): Pick<T, P[number]>;\n  getProps<P extends string>(props: P[], final?: boolean): Partial<Record<P, unknown>>;\n  getProps(props: string[], final?: boolean): Partial<Record<string, unknown>> {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      // let's not create an object, if not needed\n      return this as Record<string, unknown>;\n    }\n    const ret: Record<string, unknown> = {};\n    props.forEach((prop) => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop as string];\n    });\n    return ret;\n  }\n}\n", "import {isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\nimport {_factorize} from '../helpers/helpers.math.js';\n\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @param {import('./core.scale.js').default} scale\n * @param {Tick[]} ticks\n * @return {Tick[]}\n * @private\n */\nexport function autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const determinedMaxTicks = determineMaxTicks(scale);\n  const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n\n  // If there are too many major ticks to display them all\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\n\n/**\n * @param {number[]} majorIndices\n * @param {Tick[]} ticks\n * @param {number} ticksLimit\n */\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n\n  // If the major ticks are evenly spaced apart, place the minor ticks\n  // so that they divide the major ticks into even chunks\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\n\n/**\n * @param {Tick[]} ticks\n */\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number[]} majorIndices\n * @param {number} spacing\n */\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\n\n/**\n * @param {Tick[]} ticks\n * @param {Tick[]} newTicks\n * @param {number} spacing\n * @param {number} [majorStart]\n * @param {number} [majorEnd]\n */\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n\n  next = start;\n\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\n\n\n/**\n * @param {number[]} arr\n */\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n\n  if (len < 2) {\n    return false;\n  }\n\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n", "import Element from './core.element.js';\nimport {_alignPixel, _measureText, renderText, clipArea, unclipArea} from '../helpers/helpers.canvas.js';\nimport {callback as call, each, finiteOrDefault, isArray, isFinite, isNullOrUndef, isObject, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toDegrees, toRadians, _int16Range, _limitValue, HALF_PI} from '../helpers/helpers.math.js';\nimport {_alignStartEnd, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {createContext, toFont, toPadding, _addGrace} from '../helpers/helpers.options.js';\nimport {autoSkip} from './core.scale.autoskip.js';\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit) => Math.min(maxTicksLimit || ticksLength, ticksLength);\n\n/**\n * @typedef { import('../types/index.js').Chart } Chart\n * @typedef {{value:number | string, label?:string, major?:boolean, $context?:any}} Tick\n */\n\n/**\n * Returns a new array containing numItems from arr\n * @param {any[]} arr\n * @param {number} numItems\n */\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @param {boolean} offsetGridLines\n */\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n\n    // Return undefined if the pixel is out of the range\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\n\n/**\n * @param {object} caches\n * @param {number} length\n */\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\n\n/**\n * @param {object} options\n */\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\n\n/**\n * @param {object} options\n */\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n\n  return (lines * font.lineHeight) + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\n\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\n\nfunction titleAlign(align, position, reverse) {\n  /** @type {CanvasTextAlign} */\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\n\nexport default class Scale extends Element {\n\n  // eslint-disable-next-line max-statements\n  constructor(cfg) {\n    super();\n\n    /** @type {string} */\n    this.id = cfg.id;\n    /** @type {string} */\n    this.type = cfg.type;\n    /** @type {any} */\n    this.options = undefined;\n    /** @type {CanvasRenderingContext2D} */\n    this.ctx = cfg.ctx;\n    /** @type {Chart} */\n    this.chart = cfg.chart;\n\n    // implements box\n    /** @type {number} */\n    this.top = undefined;\n    /** @type {number} */\n    this.bottom = undefined;\n    /** @type {number} */\n    this.left = undefined;\n    /** @type {number} */\n    this.right = undefined;\n    /** @type {number} */\n    this.width = undefined;\n    /** @type {number} */\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    /** @type {number} */\n    this.maxWidth = undefined;\n    /** @type {number} */\n    this.maxHeight = undefined;\n    /** @type {number} */\n    this.paddingTop = undefined;\n    /** @type {number} */\n    this.paddingBottom = undefined;\n    /** @type {number} */\n    this.paddingLeft = undefined;\n    /** @type {number} */\n    this.paddingRight = undefined;\n\n    // scale-specific properties\n    /** @type {string=} */\n    this.axis = undefined;\n    /** @type {number=} */\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    /** @type {Tick[]} */\n    this.ticks = [];\n    /** @type {object[]|null} */\n    this._gridLineItems = null;\n    /** @type {object[]|null} */\n    this._labelItems = null;\n    /** @type {object|null} */\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    /** @type {number} */\n    this._startPixel = undefined;\n    /** @type {number} */\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @param {any} options\n\t * @since 3.0\n\t */\n  init(options) {\n    this.options = options.setContext(this.getContext());\n\n    this.axis = options.axis;\n\n    // parse min/max value, so we can properly determine min/max for other scales\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n\n  /**\n\t * Parse a supported input value to internal representation.\n\t * @param {*} raw\n\t * @param {number} [index]\n\t * @since 3.0\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    return raw;\n  }\n\n  /**\n\t * @return {{min: number, max: number, minDefined: boolean, maxDefined: boolean}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isFinite(_userMin),\n      maxDefined: isFinite(_userMax)\n    };\n  }\n\n  /**\n\t * @param {boolean} canStack\n\t * @return {{min: number, max: number}}\n\t * @protected\n\t * @since 3.0\n\t */\n  getMinMax(canStack) {\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n\n    // Make sure min <= max when only min or max is defined by user and the data is outside that range\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n\n  /**\n\t * Get the padding needed for the scale\n\t * @return {{top: number, left: number, bottom: number, right: number}} the necessary padding\n\t * @private\n\t */\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n\n  /**\n\t * Returns the scale tick objects\n\t * @return {Tick[]}\n\t * @since 2.7\n\t */\n  getTicks() {\n    return this.ticks;\n  }\n\n  /**\n\t * @return {string[]}\n\t */\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n\n  /**\n   * @return {import('../types.js').LabelItem[]}\n   */\n  getLabelItems(chartArea = this.chart.chartArea) {\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    return items;\n  }\n\n  // When a new layout is created, reset the data limits cache\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n\n  // These methods are ordered by lifecycle. Utilities then follow.\n  // Any function defined here is inherited by all scale types.\n  // Any function can be extended by the scale type\n\n  beforeUpdate() {\n    call(this.options.beforeUpdate, [this]);\n  }\n\n  /**\n\t * @param {number} maxWidth - the max width in pixels\n\t * @param {number} maxHeight - the max height in pixels\n\t * @param {{top: number, left: number, bottom: number, right: number}} margins - the space between the edge of the other scales and edge of the chart\n\t *   This space comes from two sources:\n\t *     - padding - space that's required to show the labels at the edges of the scale\n\t *     - thickness of scales or legends in another orientation\n\t */\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n\n    // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n    this.beforeUpdate();\n\n    // Absorb the master measurements\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n\n    // Dimensions\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n\n    // Data min/max\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n\n    this.beforeBuildTicks();\n\n    this.ticks = this.buildTicks() || [];\n\n    // Allow modification of ticks in callback.\n    this.afterBuildTicks();\n\n    // Compute tick rotation and fit using a sampled subset of labels\n    // We generally don't need to compute the size of every single label for determining scale size\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n    // configure is called twice, once here, once from core.controller.updateLayout.\n    // Here we haven't been positioned yet, but dimensions are correct.\n    // Variables set in configure are needed for calculateLabelRotation, and\n    // it's ok that coordinates are not correct there, only dimensions matter.\n    this.configure();\n\n    // Tick Rotation\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation(); // Preconditions: number of ticks and sizes of largest labels must be calculated beforehand\n    this.afterCalculateLabelRotation();\n\n    // Auto-skip\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n\n    if (samplingEnabled) {\n      // Generate labels using all non-skipped ticks\n      this._convertTicksToLabels(this.ticks);\n    }\n\n    this.beforeFit();\n    this.fit(); // Preconditions: label rotation and label sizes must be calculated beforehand\n    this.afterFit();\n\n    // IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\n\n    this.afterUpdate();\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      // by default vertical scales are from bottom to top, so pixels are reversed\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n\n  afterUpdate() {\n    call(this.options.afterUpdate, [this]);\n  }\n\n  //\n\n  beforeSetDimensions() {\n    call(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    if (this.isHorizontal()) {\n      // Reset position before calculating rotation\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n\n      // Reset position before calculating rotation\n      this.top = 0;\n      this.bottom = this.height;\n    }\n\n    // Reset padding\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    call(this.options.afterSetDimensions, [this]);\n  }\n\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    call(this.options[name], [this]);\n  }\n\n  // Data limits\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n\n  //\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  /**\n\t * @return {object[]} the ticks\n\t */\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n\n  beforeTickToLabelConversion() {\n    call(this.options.beforeTickToLabelConversion, [this]);\n  }\n  /**\n\t * Convert ticks to label strings\n\t * @param {Tick[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = call(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    call(this.options.afterTickToLabelConversion, [this]);\n  }\n\n  //\n\n  beforeCalculateLabelRotation() {\n    call(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n\n    // Estimate the width of each grid based on the canvas width, the maximum\n    // label width and the number of tick intervals\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n    // Allow 3 pixels x2 padding either side for label readability\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    call(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n\n  //\n\n  beforeFit() {\n    call(this.options.beforeFit, [this]);\n  }\n  fit() {\n    // Reset\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight; // fill all the height\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n\n      // Don't bother fitting the ticks if we are not showing the labels\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n\n        if (isHorizontal) {\n        // A horizontal axis is more constrained by the height.\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n        // A vertical axis is more constrained by the width. Labels are the\n        // dominant factor here, so get that length first and account for padding\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n\n    this._handleMargins();\n\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n\n      // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n      // which means that the right padding is dominated by the font height\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n\n      // Adjust padding taking into account changes in offsets\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n\n  /**\n\t * Handle margins and padding interactions\n\t * @private\n\t */\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n\n  afterFit() {\n    call(this.options.afterFit, [this]);\n  }\n\n  // Shared Methods\n  /**\n\t * @return {boolean}\n\t */\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  /**\n\t * @return {boolean}\n\t */\n  isFullSize() {\n    return this.options.fullSize;\n  }\n\n  /**\n\t * @param {Tick[]} ticks\n\t * @private\n\t */\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n\n    this.generateTickLabels(ticks);\n\n    // Ticks should be skipped when callback returns null or undef, so lets remove those.\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n\n    this.afterTickToLabelConversion();\n  }\n\n  /**\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n    }\n\n    return labelSizes;\n  }\n\n  /**\n\t * Returns {width, height, offset} objects for the first, last, widest, highest tick\n\t * labels where offset indicates the anchor point offset from the top in pixels.\n\t * @return {{ first: object, last: object, widest: object, highest: object, widths: Array, heights: array }}\n\t * @private\n\t */\n  _computeLabelSizes(ticks, length, maxTicksLimit) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n    for (i = 0; i < length; i += increment) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      // Undefined labels and arrays should not be measured\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        // if it is an array let's measure each element\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = /** @type {string} */ (label[j]);\n          // Undefined labels and arrays should not be measured\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n\n  /**\n\t * Used to get the label to display in the tooltip for the given value\n\t * @param {*} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value;\n  }\n\n  /**\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {*} value\n\t * @param {number} [index]\n\t * @return {number}\n\t */\n  getPixelForValue(value, index) { // eslint-disable-line no-unused-vars\n    return NaN;\n  }\n\n  /**\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} pixel\n\t * @return {*}\n\t */\n  getValueForPixel(pixel) {} // eslint-disable-line no-unused-vars\n\n  /**\n\t * Returns the location of the tick at the given index\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} index\n\t * @return {number}\n\t */\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  /**\n\t * Utility for getting the pixel location of a percentage of scale\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @param {number} decimal\n\t * @return {number}\n\t */\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n\n  /**\n\t * Returns the pixel for the minimum chart value\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\n\t * @return {number}\n\t */\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n\n  /**\n\t * @return {number}\n\t */\n  getBaseValue() {\n    const {min, max} = this;\n\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext(index) {\n    const ticks = this.ticks || [];\n\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n\n  /**\n\t * @return {number}\n\t * @private\n\t */\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n\n    // Calculate space needed by label in axis direction.\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n\n    // Calculate space needed for 1 tick in axis direction.\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n\n  /**\n\t * @return {boolean}\n\t * @private\n\t */\n  _isVisible() {\n    const display = this.options.display;\n\n    if (display !== 'auto') {\n      return !!display;\n    }\n\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position, border} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = borderOpts.display ? borderOpts.width : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const context = this.getContext(i);\n      const optsAtIndex = grid.setContext(context);\n      const optsAtIndexBorder = border.setContext(context);\n\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndexBorder.dash || [];\n      const borderDashOffset = optsAtIndexBorder.dashOffset;\n\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n\n      lineValue = getPixelForGridLine(this, i, offset);\n\n      // Skip if the pixel is out of the range\n      if (lineValue === undefined) {\n        continue;\n      }\n\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n\n    return items;\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n\n      if (isHorizontal) {\n        x = pixel;\n\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          // eslint-disable-next-line no-lonely-if\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n        if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n          x += (lineHeight / 2) * Math.sin(rotation);\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n\n      let backdrop;\n\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n\n        let top = textOffset - labelPadding.top;\n        let left = 0 - labelPadding.left;\n\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        default:\n          break;\n        }\n\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        default:\n          break;\n        }\n\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n\n          color: optsAtIndex.backdropColor,\n        };\n      }\n\n      items.push({\n        label,\n        font,\n        textOffset,\n        options: {\n          rotation,\n          color,\n          strokeColor,\n          strokeWidth,\n          textAlign: tickTextAlign,\n          textBaseline,\n          translation: [x, y],\n          backdrop,\n        }\n      });\n    }\n\n    return items;\n  }\n\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n\n    let align = 'center';\n\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n\n    return align;\n  }\n\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n\n    let textAlign;\n    let x;\n\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n\n    return {textAlign, x};\n  }\n\n  /**\n\t * @private\n\t */\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n\n    const chart = this.chart;\n    const position = this.options.position;\n\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n\n  /**\n   * @protected\n   */\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {\n    const {chart, ctx, options: {border, grid}} = this;\n    const borderOpts = border.setContext(this.getContext());\n    const axisWidth = border.display ? borderOpts.width : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.width;\n    ctx.strokeStyle = borderOpts.color;\n\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n\n    if (!optionTicks.display) {\n      return;\n    }\n\n    const ctx = this.ctx;\n\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n\n    const items = this.getLabelItems(chartArea);\n    for (const item of items) {\n      const renderTextOptions = item.options;\n      const tickFont = item.font;\n      const label = item.label;\n      const y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n    }\n\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n\n    if (!title.display) {\n      return;\n    }\n\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n\n  /**\n\t * @return {object[]}\n\t * @private\n\t */\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    const bz = valueOrDefault(opts.border && opts.border.z, 0);\n\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      // backward compatibility: draw has been overridden by custom scale\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: bz,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n\n  /**\n\t * Returns visible dataset metas that are attached to this scale\n\t * @param {string} [type] - if specified, also filter by dataset type\n\t * @return {object[]}\n\t */\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n\n  /**\n\t * @param {number} index\n\t * @return {object}\n\t * @protected\n \t */\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n\n  /**\n   * @protected\n   */\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n", "import {merge} from '../helpers/index.js';\nimport defaults, {overrides} from './core.defaults.js';\n\n/**\n * @typedef {{id: string, defaults: any, overrides?: any, defaultRoutes: any}} IChartComponent\n */\n\nexport default class TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t * @returns {string} The scope where items defaults were registered to.\n\t */\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n\n    if (isIChartComponent(proto)) {\n      // Make sure the parent is registered and note the scope where its defaults are.\n      parentScope = this.register(proto);\n    }\n\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n\n    if (id in items) {\n      // already registered\n      return scope;\n    }\n\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n\n    return scope;\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object?}\n\t */\n  get(id) {\n    return this.items[id];\n  }\n\n  /**\n\t * @param {IChartComponent} item\n\t */\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n\n    if (id in items) {\n      delete items[id];\n    }\n\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\n\nfunction registerDefaults(item, scope, parentScope) {\n  // Inherit the parent's defaults and keep existing defaults\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n\n  defaults.set(scope, itemDefaults);\n\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\n\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\n\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n", "import DatasetController from './core.datasetController.js';\nimport Element from './core.element.js';\nimport Scale from './core.scale.js';\nimport TypedRegistry from './core.typedRegistry.js';\nimport {each, callback as call, _capitalize} from '../helpers/helpers.core.js';\n\n/**\n * Please use the module's default export which provides a singleton instance\n * Note: class is exported for typedoc\n */\nexport class Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    // Order is important, Scale has Element in prototype chain,\n    // so Scales must be before Elements. Plugins are a fallback, so not listed here.\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  add(...args) {\n    this._each('register', args);\n  }\n\n  remove(...args) {\n    this._each('unregister', args);\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof DatasetController}\n\t */\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Element}\n\t */\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {object}\n\t */\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n\n  /**\n\t * @param {string} id\n\t * @returns {typeof Scale}\n\t */\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n\n  /**\n\t * @param  {...typeof DatasetController} args\n\t */\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n\n  /**\n\t * @param  {...typeof Element} args\n\t */\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n\n  /**\n\t * @param  {...any} args\n\t */\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n\n  /**\n\t * @param  {...typeof Scale} args\n\t */\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n\n  /**\n\t * @private\n\t */\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        // Handle loopable args\n        // Use case:\n        //  import * as plugins from './plugins.js';\n        //  Chart.register(plugins);\n        each(arg, item => {\n          // If there are mixed types in the loopable, make sure those are\n          // registered in correct registry\n          // Use case: (treemap exporting controller, elements etc)\n          //  import * as treemap from 'chartjs-chart-treemap.js';\n          //  Chart.register(treemap);\n\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    call(component['before' + camelMethod], [], component); // beforeRegister / beforeUnregister\n    registry[method](component);\n    call(component['after' + camelMethod], [], component); // afterRegister / afterUnregister\n  }\n\n  /**\n\t * @private\n\t */\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    // plugins is the fallback registry\n    return this.plugins;\n  }\n\n  /**\n\t * @private\n\t */\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n\n}\n\n// singleton instance\nexport default /* #__PURE__ */ new Registry();\n", "import registry from './core.registry.js';\nimport {callback as callCallback, isNullOrUndef, valueOrDefault} from '../helpers/helpers.core.js';\n\n/**\n * @typedef { import('./core.controller.js').default } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../plugins/plugin.tooltip.js').default } Tooltip\n */\n\n/**\n * @callback filterCallback\n * @param {{plugin: object, options: object}} value\n * @param {number} [index]\n * @param {array} [array]\n * @param {object} [thisArg]\n * @return {boolean}\n */\n\n\nexport default class PluginService {\n  constructor() {\n    this._init = [];\n  }\n\n  /**\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {object} [args] - Extra arguments to apply to the hook call.\n   * @param {filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n\n  /**\n\t * @private\n\t */\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callCallback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  invalidate() {\n    // When plugins are registered, there is the possibility of a double\n    // invalidate situation. In this case, we only want to invalidate once.\n    // If we invalidate multiple times, the `_oldCache` is lost and all of the\n    // plugins are restarted without being correctly stopped.\n    // See https://github.com/chartjs/Chart.js/issues/8147\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n\n    const descriptors = this._cache = this._createDescriptors(chart);\n\n    this._notifyStateChanges(chart);\n\n    return descriptors;\n  }\n\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    // options === false => all plugins are disabled\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n\n  /**\n\t * @param {Chart} chart\n\t * @private\n\t */\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\n\n/**\n * @param {import('./core.config.js').default} config\n */\nfunction allPlugins(config) {\n  const localIds = {};\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n\n  return {plugins, localIds};\n}\n\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\n\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\n\n  for (const plugin of plugins) {\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n    });\n  }\n\n  return result;\n}\n\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  if (local && plugin.defaults) {\n    // make sure plugin defaults are in scopes for local (not registered) plugins\n    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    // These are just defaults that plugins can override\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n", "import defaults, {overrides, descriptors} from './core.defaults.js';\nimport {mergeIf, resolveObjectKey, isArray, isFunction, valueOrDefault, isObject} from '../helpers/helpers.core.js';\nimport {_attachContext, _createResolver, _descriptors} from '../helpers/helpers.config.js';\n\nexport function getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction idMatchesAxis(id) {\n  if (id === 'x' || id === 'y' || id === 'r') {\n    return id;\n  }\n}\n\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\n\nexport function determineAxis(id, ...scaleOptions) {\n  if (idMatchesAxis(id)) {\n    return id;\n  }\n  for (const opts of scaleOptions) {\n    const axis = opts.axis\n      || axisFromPosition(opts.position)\n      || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n    if (axis) {\n      return axis;\n    }\n  }\n  throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\n\nfunction getAxisFromDataset(id, axis, dataset) {\n  if (dataset[axis + 'AxisID'] === id) {\n    return {axis};\n  }\n}\n\nfunction retrieveAxisFromDatasets(id, config) {\n  if (config.data && config.data.datasets) {\n    const boundDs = config.data.datasets.filter((d) => d.xAxisID === id || d.yAxisID === id);\n    if (boundDs.length) {\n      return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n    }\n  }\n  return {};\n}\n\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const scales = Object.create(null);\n\n  // First figure out first scale id's per axis.\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n\n  // Then merge dataset defaults to scale configs\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n\n  // apply scale defaults, if not overridden by dataset defaults\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n\n  return scales;\n}\n\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\n\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n\n  initOptions(config);\n\n  return config;\n}\n\nconst keyCache = new Map();\nconst keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\n\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\n\nexport default class Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n\n  get platform() {\n    return this._config.platform;\n  }\n\n  get type() {\n    return this._config.type;\n  }\n\n  set type(type) {\n    this._config.type = type;\n  }\n\n  get data() {\n    return this._config.data;\n  }\n\n  set data(data) {\n    this._config.data = initData(data);\n  }\n\n  get options() {\n    return this._config.options;\n  }\n\n  set options(options) {\n    this._config.options = options;\n  }\n\n  get plugins() {\n    return this._config.plugins;\n  }\n\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @return {string[][]}\n   */\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the option scope keys for resolving dataset animation options.\n   * These keys do not include the dataset itself, because it is not under options.\n   * @param {string} datasetType\n   * @param {string} transition\n   * @return {string[][]}\n   */\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        // The following are used for looking up the `animations` and `animation` keys\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving element options that belong\n   * to an dataset. These keys do not include the dataset itself, because it\n   * is not under options.\n   * @param {string} datasetType\n   * @param {string} elementType\n   * @return {string[][]}\n   */\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n\n  /**\n   * Returns the options scope keys for resolving plugin options.\n   * @param {{id: string, additionalOptionScopes?: string[]}} plugin\n   * @return {string[][]}\n   */\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n\n  /**\n   * @private\n   */\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n\n  /**\n   * Resolves the objects from options and defaults for option value resolution.\n   * @param {object} mainScope - The main scope object for options\n   * @param {string[][]} keyLists - The arrays of keys in resolution order\n   * @param {boolean} [resetCache] - reset the cache for this mainScope\n   */\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n\n    const scopes = new Set();\n\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n\n  /**\n   * Returns the option scopes for resolving chart options\n   * @return {object[]}\n   */\n  chartOptionScopes() {\n    const {options, type} = this;\n\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {}, // https://github.com/chartjs/Chart.js/issues/8531\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {string[]} names\n   * @param {function|object} context\n   * @param {string[]} [prefixes]\n   * @return {object}\n   */\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      // subResolver is passed to scriptable options. It should not resolve to hover options.\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n\n  /**\n   * @param {object[]} scopes\n   * @param {object} [context]\n   * @param {string[]} [prefixes]\n   * @param {{scriptable: boolean, indexable: boolean, allKeys?: boolean}} [descriptorDefaults]\n   */\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\n\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\n\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n", "import animator from './core.animator.js';\nimport defaults, {overrides} from './core.defaults.js';\nimport Interaction from './core.interaction.js';\nimport layouts from './core.layouts.js';\nimport {_detectPlatform} from '../platform/index.js';\nimport PluginService from './core.plugins.js';\nimport registry from './core.registry.js';\nimport Config, {determineAxis, getIndexAxis} from './core.config.js';\nimport {retinaScale, _isDomSupported} from '../helpers/helpers.dom.js';\nimport {each, callback as callCallback, uid, valueOrDefault, _elementsEqual, isNullOrUndef, setsEqual, defined, isFunction, _isClickEvent} from '../helpers/helpers.core.js';\nimport {clearCanvas, clipArea, createContext, unclipArea, _isPointInArea} from '../helpers/index.js';\n// @ts-ignore\nimport {version} from '../../package.json';\nimport {debounce} from '../helpers/helpers.extras.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').Point } Point\n */\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\n\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\n\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n\n  chart.notifyPlugins('afterRender');\n  callCallback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callCallback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\n/**\n * Chart.js can take a string id of a canvas element, a 2d context, or a canvas element itself.\n * Attempt to unwrap the item passed into the chart constructor so that it is a canvas element (if possible).\n */\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    // Support for array based queries (such as jQuery)\n    item = item[0];\n  }\n\n  if (item && item.canvas) {\n    // Support for any object associated to a canvas (including a context2d)\n    item = item.canvas;\n  }\n  return item;\n}\n\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\n\n/**\n * @param {ChartEvent} e\n * @param {ChartEvent|null} lastEvent\n * @param {boolean} inChartArea\n * @param {boolean} isClick\n * @returns {ChartEvent|null}\n */\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n  return scale.options.clip ? scale[field] : chartArea[field];\n}\n\nfunction getDatasetArea(meta, chartArea) {\n  const {xScale, yScale} = meta;\n  if (xScale && yScale) {\n    return {\n      left: getSizeForArea(xScale, chartArea, 'left'),\n      right: getSizeForArea(xScale, chartArea, 'right'),\n      top: getSizeForArea(yScale, chartArea, 'top'),\n      bottom: getSizeForArea(yScale, chartArea, 'bottom')\n    };\n  }\n  return chartArea;\n}\n\nclass Chart {\n\n  static defaults = defaults;\n  static instances = instances;\n  static overrides = overrides;\n  static registry = registry;\n  static version = version;\n  static getChart = getChart;\n\n  static register(...items) {\n    registry.add(...items);\n    invalidatePlugins();\n  }\n\n  static unregister(...items) {\n    registry.remove(...items);\n    invalidatePlugins();\n  }\n\n  // eslint-disable-next-line max-statements\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n      );\n    }\n\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    // Store the previously used aspect ratio to determine if a resize\n    // is needed during updates. Do this after _options is set since\n    // aspectRatio uses a getter\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    /** @type {?{attach?: function, detach?: function, resize?: function}} */\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n\n    // Add the chart instance to the global namespace\n    instances[this.id] = this;\n\n    if (!context || !canvas) {\n      // The given item is not a compatible context2d element, let's return before finalizing\n      // the chart initialization but after setting basic chart / controller properties that\n      // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n      // https://github.com/chartjs/Chart.js/issues/2807\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      // If aspectRatio is defined in options, use that.\n      return aspectRatio;\n    }\n\n    if (maintainAspectRatio && _aspectRatio) {\n      // If maintainAspectRatio is truthly and we had previously determined _aspectRatio, use that\n      return _aspectRatio;\n    }\n\n    // Calculate\n    return height ? width / height : null;\n  }\n\n  get data() {\n    return this.config.data;\n  }\n\n  set data(data) {\n    this.config.data = data;\n  }\n\n  get options() {\n    return this._options;\n  }\n\n  set options(options) {\n    this.config.options = options;\n  }\n\n  get registry() {\n    return registry;\n  }\n\n  /**\n\t * @private\n\t */\n  _initialize() {\n    // Before init plugin notification\n    this.notifyPlugins('beforeInit');\n\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n\n    this.bindEvents();\n\n    // After init plugin notification\n    this.notifyPlugins('afterInit');\n\n    return this;\n  }\n\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n\n  /**\n\t * Resize the chart to its container or to explicit dimensions.\n\t * @param {number} [width]\n\t * @param {number} [height]\n\t */\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n\n    this.notifyPlugins('resize', {size: newSize});\n\n    callCallback(options.onResize, [this, newSize], this);\n\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        // The resize update is delayed, only draw without updating.\n        this.render();\n      }\n    }\n  }\n\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n\n  /**\n\t * Builds a map of scale ID to scale object for future lookup.\n\t */\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n\n      scale.init(scaleOptions, options);\n    });\n    // clear up discarded scales\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n\n  /**\n\t * @private\n\t */\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n\n  /**\n\t * @private\n\t */\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n\n    this._removeUnreferencedMetasets();\n\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n\n    this._updateMetasets();\n    return newControllers;\n  }\n\n  /**\n\t * Reset the elements of all datasets\n\t * @private\n\t */\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n\n  /**\n\t* Resets the chart back to its state before the initial animation\n\t*/\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n\n  update(mode) {\n    const config = this.config;\n\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n\n    // plugins options references might have change, let's invalidate the cache\n    // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n    this._plugins.invalidate();\n\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    // Make sure dataset controllers are updated and new controllers are reset\n    const newControllers = this.buildOrUpdateControllers();\n\n    this.notifyPlugins('beforeElementsUpdate');\n\n    // Make sure all dataset controllers have correct meta data counts\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      // New controllers will be reset after the layout pass, so we only want to modify\n      // elements added to new datasets\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n\n    // Only reset the controllers if we have animations\n    if (!animsDisabled) {\n      // Can only reset the new controllers after the scales have been updated\n      // Reset is done to get the starting point for the initial animation\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n\n    this._updateDatasets(mode);\n\n    // Do this before render so that any plugins that need final scale updates can use it\n    this.notifyPlugins('afterUpdate', {mode});\n\n    this._layers.sort(compare2Level('z', '_idx'));\n\n    // Replay last event from before update, or set hover styles on active elements\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n\n    this.render();\n  }\n\n  /**\n   * @private\n   */\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n\n  /**\n   * @private\n   */\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      // The configured events have changed. Rebind.\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n\n  /**\n   * @private\n   */\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n\n  /**\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n\t * hook, in which case, plugins will not be called on `afterLayout`.\n\t * @private\n\t */\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n\n    layouts.update(this, this.width, this.height, minPadding);\n\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        // Skip drawing and configuring chartArea boxes when chartArea is zero or negative\n        return;\n      }\n\n      // configure is called twice, once in core.scale.update and once here.\n      // Here the boxes are fully updated and at their final positions.\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n\n    this.notifyPlugins('afterLayout');\n  }\n\n  /**\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n\t * @private\n\t */\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n\n  /**\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n\t * @private\n\t */\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n\n    meta.controller._update(mode);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    // Because of plugin hooks (before/afterDatasetsDraw), datasets can't\n    // currently be part of layers. Instead, we draw\n    // layers <= 0 before(default, backward compat), and the rest after\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this._drawDatasets();\n\n    // Rest of layers\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n\n    this.notifyPlugins('afterDraw');\n  }\n\n  /**\n\t * @private\n\t */\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n\n    return result;\n  }\n\n  /**\n\t * Gets the visible dataset metas in drawing order\n\t * @return {object[]}\n\t */\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n\n  /**\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n\t * @private\n\t */\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n\n  /**\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n\t * @private\n\t */\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = getDatasetArea(meta, this.chartArea);\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n\n    meta.controller.draw();\n\n    if (useClip) {\n      unclipArea(ctx);\n    }\n\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n\n  /**\n   * Checks whether the given point is in the chart area.\n   * @param {Point} point - in relative coordinates (see, e.g., getRelativePosition)\n   * @returns {boolean}\n   */\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n\n    return [];\n  }\n\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\t\t\t// See isDatasetVisible() comment\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n\n    return meta;\n  }\n\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n\n    const meta = this.getDatasetMeta(datasetIndex);\n\n    // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n    // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n\n  /**\n\t * @private\n\t */\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      // Animate visible state, so hide animation can be seen. This could be handled better if update / updateDataset returned a Promise.\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n\n  /**\n\t * @private\n\t */\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n\n    this._stop();\n    this.config.clearCache();\n\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n\n    delete instances[this.id];\n\n    this.notifyPlugins('afterDestroy');\n  }\n\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n\n  /**\n\t * @private\n\t */\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n\n  /**\n   * @private\n   */\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n\n    each(this.options.events, (type) => _add(type, listener));\n  }\n\n  /**\n   * @private\n   */\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n\n    let detached; // eslint-disable-line prefer-const\n    const attached = () => {\n      _remove('attach', attached);\n\n      this.attached = true;\n      this.resize();\n\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n\n    detached = () => {\n      this.attached = false;\n\n      _remove('resize', listener);\n\n      // Stop animating and remove metasets, so when re-attached, the animations start from beginning.\n      this._stop();\n      this._resize(0, 0);\n\n      _add('attach', attached);\n    };\n\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n\n  /**\n\t * Get active (hovered) elements\n\t * @returns array\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active (hovered) elements\n\t * @param {array} activeElements New active data points\n\t */\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n\n    if (changed) {\n      this._active = active;\n      // Make sure we don't use the previous mouse event to override the active elements in update.\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n\n  /**\n\t * Calls enabled plugins on the specified hook and with the given args.\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\n\t * returned value can be used, for instance, to interrupt the current action.\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n\t * @param {Object} [args] - Extra arguments to apply to the hook call.\n   * @param {import('./core.plugins.js').filterCallback} [filter] - Filtering function for limiting which plugins are notified\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\n\t */\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n\n  /**\n   * Check if a plugin with the specific ID is registered and enabled\n   * @param {string} pluginId - The ID of the plugin of which to check if it is enabled\n   * @returns {boolean}\n   */\n  isPluginEnabled(pluginId) {\n    return this._plugins._cache.filter(p => p.plugin.id === pluginId).length === 1;\n  }\n\n  /**\n\t * @private\n\t */\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n\n    if (changed || args.changed) {\n      this.render();\n    }\n\n    return this;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e the event to handle\n\t * @param {boolean} [replay] - true if the event was replayed by `update`\n   * @param {boolean} [inChartArea] - true if the event is inside chartArea\n\t * @return {boolean} true if the chart needs to re-render\n\t * @private\n\t */\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n\n    // If the event is replayed from `update`, we should evaluate with the final positions.\n    //\n    // The `replay`:\n    // It's the last event (excluding click) that has occurred before `update`.\n    // So mouse has not moved. It's also over the chart, because there is a `replay`.\n    //\n    // The why:\n    // If animations are active, the elements haven't moved yet compared to state before update.\n    // But if they will, we are activating the elements that would be active, if this check\n    // was done after the animations have completed. => \"final positions\".\n    // If there is no animations, the \"final\" and \"current\" positions are equal.\n    // This is done so we do not have to evaluate the active elements each animation frame\n    // - it would be expensive.\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n    if (inChartArea) {\n      // Set _lastEvent to null while we are processing the event handlers.\n      // This prevents recursion if the handler calls chart.update()\n      this._lastEvent = null;\n\n      // Invoke onHover hook\n      callCallback(options.onHover, [e, active, this], this);\n\n      if (isClick) {\n        callCallback(options.onClick, [e, active, this], this);\n      }\n    }\n\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n\n    this._lastEvent = lastEvent;\n\n    return changed;\n  }\n\n  /**\n   * @param {ChartEvent} e - The event\n   * @param {import('../types/index.js').ActiveElement[]} lastActive - Previously active elements\n   * @param {boolean} inChartArea - Is the envent inside chartArea\n   * @param {boolean} useFinalPosition - Should the evaluation be done with current or final (after animation) element positions\n   * @returns {import('../types/index.js').ActiveElement[]} - The active elements\n   * @pravate\n   */\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\n\n// @ts-ignore\nfunction invalidatePlugins() {\n  return each(Chart.instances, (chart) => chart._plugins.invalidate());\n}\n\nexport default Chart;\n", "import Element from '../core/core.element.js';\nimport {_angleBetween, getAngleFromPoint, TAU, HALF_PI, valueOrDefault} from '../helpers/index.js';\nimport {PI, _isBetween, _limitValue} from '../helpers/helpers.math.js';\nimport {_readValueToProps} from '../helpers/helpers.options.js';\nimport type {ArcOptions, Point} from '../types/index.js';\n\n\nfunction clipArc(ctx: CanvasRenderingContext2D, element: ArcElement, endAngle: number) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n\n  // Draw an inner border by clipping the arc and drawing a double-width border\n  // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\n/**\n * Parse border radius from the provided options\n */\nfunction parseBorderRadius(arc: ArcElement, innerRadius: number, outerRadius: number, angleDelta: number) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n  // Outer limits are complicated. We want to compute the available angular distance at\n  // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n  // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n  //\n  // If the borderRadius is large, that value can become negative.\n  // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n  // we know that the thickness term will dominate and compute the limits at that point\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\n\n/**\n * Convert (r, \uD835\uDF03) to (x, y)\n */\nfunction rThetaToXY(r: number, theta: number, x: number, y: number) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\n\n\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */\nfunction pathArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  end: number,\n  circular: boolean,\n) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n\n  let spacingOffset = 0;\n  const alpha = end - start;\n\n  if (spacing) {\n    // When spacing is present, it is the same for all items\n    // So we adjust the start and end angle of the arc such that\n    // the distance is the same as it would be without the spacing\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle);\n\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n\n  ctx.beginPath();\n\n  if (circular) {\n    // The first arc segments from point 1 to point a to point 2\n    const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n    ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n\n    // The corner segment from point 2 to point 3\n    if (outerEnd > 0) {\n      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n    }\n\n    // The line from point 3 to point 4\n    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\n\n    // The corner segment from point 4 to point 5\n    if (innerEnd > 0) {\n      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n    }\n\n    // The inner arc from point 5 to point b to point 6\n    const innerMidAdjustedAngle = ((endAngle - (innerEnd / innerRadius)) + (startAngle + (innerStart / innerRadius))) / 2;\n    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), innerMidAdjustedAngle, true);\n    ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + (innerStart / innerRadius), true);\n\n    // The corner segment from point 6 to point 7\n    if (innerStart > 0) {\n      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n    }\n\n    // The line from point 7 to point 8\n    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\n\n    // The corner segment from point 8 to point 1\n    if (outerStart > 0) {\n      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n    }\n  } else {\n    ctx.moveTo(x, y);\n\n    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n\n  ctx.closePath();\n}\n\nfunction drawArc(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\n\nfunction drawBorder(\n  ctx: CanvasRenderingContext2D,\n  element: ArcElement,\n  offset: number,\n  spacing: number,\n  circular: boolean,\n) {\n  const {fullCircles, startAngle, circumference, options} = element;\n  const {borderWidth, borderJoinStyle, borderDash, borderDashOffset} = options;\n  const inner = options.borderAlign === 'inner';\n\n  if (!borderWidth) {\n    return;\n  }\n\n  ctx.setLineDash(borderDash || []);\n  ctx.lineDashOffset = borderDashOffset;\n\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.stroke();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + (circumference % TAU || TAU);\n    }\n  }\n\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n\n  if (!fullCircles) {\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.stroke();\n  }\n}\n\nexport interface ArcProps extends Point {\n  startAngle: number;\n  endAngle: number;\n  innerRadius: number;\n  outerRadius: number;\n  circumference: number;\n}\n\nexport default class ArcElement extends Element<ArcProps, ArcOptions> {\n\n  static id = 'arc';\n\n  static defaults = {\n    borderAlign: 'center',\n    borderColor: '#fff',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: undefined,\n    borderRadius: 0,\n    borderWidth: 2,\n    offset: 0,\n    spacing: 0,\n    angle: undefined,\n    circular: true,\n  };\n\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor'\n  };\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash'\n  };\n\n  circumference: number;\n  endAngle: number;\n  fullCircles: number;\n  innerRadius: number;\n  outerRadius: number;\n  pixelMargin: number;\n  startAngle: number;\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(chartX: number, chartY: number, useFinalPosition: boolean) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n    return (betweenAngles && withinRadius);\n  }\n\n  getCenterPoint(useFinalPosition: boolean) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius'\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n\n  tooltipPosition(useFinalPosition: boolean) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n\n  draw(ctx: CanvasRenderingContext2D) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 4;\n    const spacing = (options.spacing || 0) / 2;\n    const circular = options.circular;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n\n    ctx.save();\n\n    const halfAngle = (this.startAngle + this.endAngle) / 2;\n    ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n    const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n    const radiusOffset = offset * fix;\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n\n    drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, circular);\n\n    ctx.restore();\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {_bezierInterpolation, _pointInLine, _steppedInterpolation} from '../helpers/helpers.interpolation.js';\nimport {_computeSegments, _boundSegments} from '../helpers/helpers.segment.js';\nimport {_steppedLineTo, _bezierCurveTo} from '../helpers/helpers.canvas.js';\nimport {_updateBezierControlPoints} from '../helpers/helpers.curve.js';\nimport {valueOrDefault} from '../helpers/index.js';\n\n/**\n * @typedef { import('./element.point.js').default } PointElement\n */\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\n\n/**\n * @returns {any}\n */\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n\n  return lineTo;\n}\n\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  // eslint-disable-next-line prefer-const\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n\n    prev = point;\n  }\n\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n\n  return !!loop;\n}\n\n/**\n * Create path from points, grouping by truncated x-coordinate\n * Points need to be in order by x-coordinate for this to work efficiently\n * @param {CanvasRenderingContext2D|Path2D} ctx - Context\n * @param {LineElement} line\n * @param {object} segment\n * @param {number} segment.start - start index of the segment, referring the points array\n * @param {number} segment.end - end index of the segment, referring the points array\n * @param {boolean} segment.loop - indicates that the segment is a loop\n * @param {object} params\n * @param {boolean} params.move - move to starting point (vs line to it)\n * @param {boolean} params.reverse - path the segment from end to start\n * @param {number} params.start - limit segment to points starting from `start` index\n * @param {number} params.end - limit segment to points ending at `start` + `count` index\n */\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      // Draw line to maxY and minY, using the average x-coordinate\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      // Line to y-value of last point in group. So the line continues\n      // from correct position. Not using move, to have solid path.\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n\n    if (point.skip) {\n      // If there is a skipped point inside a segment, spanGaps must be true\n      continue;\n    }\n\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0; // truncated x-coordinate\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      // Draw line to next x-position, using the first (or only)\n      // y-value in that group\n      ctx.lineTo(x, y);\n\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    // Keep track of the last y-value in group\n    lastY = y;\n  }\n  drawX();\n}\n\n/**\n * @param {LineElement} line - the line\n * @returns {function}\n * @private\n */\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\n\n/**\n * @private\n */\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n\n  return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\n\nconst usePath2D = typeof Path2D === 'function';\n\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\n\nexport default class LineElement extends Element {\n\n  static id = 'line';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderCapStyle: 'butt',\n    borderDash: [],\n    borderDashOffset: 0,\n    borderJoinStyle: 'miter',\n    borderWidth: 3,\n    capBezierPoints: true,\n    cubicInterpolationMode: 'default',\n    fill: false,\n    spanGaps: false,\n    stepped: false,\n    tension: 0,\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n\n  static descriptors = {\n    _scriptable: true,\n    _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n  };\n\n\n  constructor(cfg) {\n    super();\n\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n\n  get points() {\n    return this._points;\n  }\n\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n\n  /**\n\t * First non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n\n  /**\n\t * Last non-skipped point on this line\n\t * @returns {PointElement|undefined}\n\t */\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n\n  /**\n\t * Interpolate a point in this line at the same value on `property` as\n\t * the reference `point` provided\n\t * @param {PointElement} point - the reference point\n\t * @param {string} property - the property to match on\n\t * @returns {PointElement|undefined}\n\t */\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n\n    if (!segments.length) {\n      return;\n    }\n\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n\n  /**\n\t * Append a segment of this line to current path.\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} segment\n\t * @param {number} segment.start - start index of the segment, referring the points array\n \t * @param {number} segment.end - end index of the segment, referring the points array\n \t * @param {boolean} segment.loop - indicates that the segment is a loop\n\t * @param {object} params\n\t * @param {boolean} params.move - move to starting point (vs line to it)\n\t * @param {boolean} params.reverse - path the segment from end to start\n\t * @param {number} params.start - limit segment to points starting from `start` index\n\t * @param {number} params.end - limit segment to points ending at `start` + `count` index\n\t * @returns {undefined|boolean} - true if the segment is a full loop (path should be closed)\n\t */\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n\n  /**\n\t * Append all segments of this line to current path.\n\t * @param {CanvasRenderingContext2D|Path2D} ctx\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t * @returns {undefined|boolean} - true if line is a full loop (path should be closed)\n\t */\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n\n    start = start || 0;\n    count = count || (this.points.length - start);\n\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n\n  /**\n\t * Draw\n\t * @param {CanvasRenderingContext2D} ctx\n\t * @param {object} chartArea\n\t * @param {number} [start]\n\t * @param {number} [count]\n\t */\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n\n    if (points.length && options.borderWidth) {\n      ctx.save();\n\n      draw(ctx, this, start, count);\n\n      ctx.restore();\n    }\n\n    if (this.animated) {\n      // When line is animated, the control points and path are not cached.\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {drawPoint, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport type {\n  CartesianParsedData,\n  ChartArea,\n  Point,\n  PointHoverOptions,\n  PointOptions,\n} from '../types/index.js';\n\nfunction inRange(el: PointElement, pos: number, axis: 'x' | 'y', useFinalPosition?: boolean) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\n\nexport type PointProps = Point\n\nexport default class PointElement extends Element<PointProps, PointOptions & PointHoverOptions> {\n\n  static id = 'point';\n\n  parsed: CartesianParsedData;\n  skip?: boolean;\n  stop?: boolean;\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderWidth: 1,\n    hitRadius: 1,\n    hoverBorderWidth: 1,\n    hoverRadius: 4,\n    pointStyle: 'circle',\n    radius: 3,\n    rotation: 0\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  inRange(mouseX: number, mouseY: number, useFinalPosition?: boolean) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n\n  inXRange(mouseX: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseX, 'x', useFinalPosition);\n  }\n\n  inYRange(mouseY: number, useFinalPosition?: boolean) {\n    return inRange(this, mouseY, 'y', useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition?: boolean) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n\n  size(options?: Partial<PointOptions & PointHoverOptions>) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n\n  draw(ctx: CanvasRenderingContext2D, area: ChartArea) {\n    const options = this.options;\n\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n\n  getRange() {\n    const options = this.options || {};\n    // @ts-expect-error Fallbacks should never be hit in practice\n    return options.radius + options.hitRadius;\n  }\n}\n", "import Element from '../core/core.element.js';\nimport {isObject, _isBetween, _limitValue} from '../helpers/index.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {toTRBL, toTRBLCorners} from '../helpers/helpers.options.js';\n\n/** @typedef {{ x: number, y: number, base: number, horizontal: boolean, width: number, height: number }} BarProps */\n\n/**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param {BarElement} bar the bar\n * @param {boolean} [useFinalPosition]\n * @return {object} bounds of the bar\n * @private\n */\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = /** @type {BarProps} */ (bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition));\n\n  let left, right, top, bottom, half;\n\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n\n  return {left, top, right, bottom};\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n\n  // If the value is an object, assume the user knows what they are doing\n  // and apply as directed.\n  const enableBorder = enableBorderRadius || isObject(value);\n\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\n\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\n\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\n/**\n * Add a path of a rectangle to the current sub-path\n * @param {CanvasRenderingContext2D} ctx Context\n * @param {*} rect Bounding rect\n */\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\n\nexport default class BarElement extends Element {\n\n  static id = 'bar';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    borderSkipped: 'start',\n    borderWidth: 0,\n    borderRadius: 0,\n    inflateAmount: 'auto',\n    pointStyle: undefined\n  };\n\n  /**\n   * @type {any}\n   */\n  static defaultRoutes = {\n    backgroundColor: 'backgroundColor',\n    borderColor: 'borderColor'\n  };\n\n  constructor(cfg) {\n    super();\n\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n\n    ctx.save();\n\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = /** @type {BarProps} */ (this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition));\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\n", "import {DoughnutController, PolarAreaController} from '../index.js';\nimport type {Chart, ChartDataset} from '../types.js';\n\nexport interface ColorsPluginOptions {\n  enabled?: boolean;\n  forceOverride?: boolean;\n}\n\ninterface ColorsDescriptor {\n  backgroundColor?: unknown;\n  borderColor?: unknown;\n}\n\nconst BORDER_COLORS = [\n  'rgb(54, 162, 235)', // blue\n  'rgb(255, 99, 132)', // red\n  'rgb(255, 159, 64)', // orange\n  'rgb(255, 205, 86)', // yellow\n  'rgb(75, 192, 192)', // green\n  'rgb(153, 102, 255)', // purple\n  'rgb(201, 203, 207)' // grey\n];\n\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map(color => color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\n\nfunction getBorderColor(i: number) {\n  return BORDER_COLORS[i % BORDER_COLORS.length];\n}\n\nfunction getBackgroundColor(i: number) {\n  return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\n\nfunction colorizeDefaultDataset(dataset: ChartDataset, i: number) {\n  dataset.borderColor = getBorderColor(i);\n  dataset.backgroundColor = getBackgroundColor(i);\n\n  return ++i;\n}\n\nfunction colorizeDoughnutDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBorderColor(i++));\n\n  return i;\n}\n\nfunction colorizePolarAreaDataset(dataset: ChartDataset, i: number) {\n  dataset.backgroundColor = dataset.data.map(() => getBackgroundColor(i++));\n\n  return i;\n}\n\nfunction getColorizer(chart: Chart) {\n  let i = 0;\n\n  return (dataset: ChartDataset, datasetIndex: number) => {\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n\n    if (controller instanceof DoughnutController) {\n      i = colorizeDoughnutDataset(dataset, i);\n    } else if (controller instanceof PolarAreaController) {\n      i = colorizePolarAreaDataset(dataset, i);\n    } else if (controller) {\n      i = colorizeDefaultDataset(dataset, i);\n    }\n  };\n}\n\nfunction containsColorsDefinitions(\n  descriptors: ColorsDescriptor[] | Record<string, ColorsDescriptor>\n) {\n  let k: number | string;\n\n  for (k in descriptors) {\n    if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction containsColorsDefinition(\n  descriptor: ColorsDescriptor\n) {\n  return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\n\nexport default {\n  id: 'colors',\n\n  defaults: {\n    enabled: true,\n    forceOverride: false\n  } as ColorsPluginOptions,\n\n  beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) {\n    if (!options.enabled) {\n      return;\n    }\n\n    const {\n      data: {datasets},\n      options: chartOptions\n    } = chart.config;\n    const {elements} = chartOptions;\n\n    if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || (elements && containsColorsDefinitions(elements)))) {\n      return;\n    }\n\n    const colorizer = getColorizer(chart);\n\n    datasets.forEach(colorizer);\n  }\n};\n", "import {_limitValue, _lookupByKey, isNullOrUndef, resolve} from '../helpers/index.js';\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  /**\n   * Implementation of the Largest Triangle Three Buckets algorithm.\n   *\n   * This implementation is based on the original implementation by Sveinn Steinarsson\n   * in https://github.com/sveinn-steinarsson/flot-downsample/blob/master/jquery.flot.downsample.js\n   *\n   * The original implementation is MIT licensed.\n   */\n  const samples = options.samples || availableWidth;\n  // There are less points than the threshold, returning the whole array\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n\n  const decimated = [];\n\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  // Starting from offset\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n\n  decimated[sampledIndex++] = data[a];\n\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n\n    // Adding offset\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n\n    // Adding offset\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n\n    // Note that this is changed from the original algorithm which initializes these\n    // values to 1. The reason for this change is that if the area is small, nextA\n    // would never be set and thus a crash would occur in the next loop as `a` would become\n    // `undefined`. Since the area is always positive, but could be 0 in the case of a flat trace,\n    // initializing with a negative number is the correct solution.\n    maxArea = area = -1;\n\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n\n  // Include the last point\n  decimated[sampledIndex++] = data[endIndex];\n\n  return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n\n    if (truncX === prevX) {\n      // Determine `minY` / `maxY` and `avgX` while we stay within same x-position\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      // For first point in group, countX is `0`, so average will be `x` / 1.\n      // Use point.x here because we're computing the average data `x` value\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      // Push up to 4 points, 3 for the last interval and the first point for this interval\n      const lastIndex = i - 1;\n\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        // The interval is defined by 4 points: start, min, max, end.\n        // The starting point is already considered at this point, so we need to determine which\n        // of the other points to add. We need to sort these points to ensure the decimated data\n        // is still sorted and then ensure there are no duplicates.\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n\n      // lastIndex === startIndex will occur when a range has only 1 point which could\n      // happen with very uneven data\n      if (i > 0 && lastIndex !== startIndex) {\n        // Last point in the previous interval\n        decimated.push(data[lastIndex]);\n      }\n\n      // Start of the new interval\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n\n  return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {\n      configurable: true,\n      enumerable: true,\n      writable: true,\n      value: data,\n    });\n  }\n}\n\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n\n  let start = 0;\n  let count;\n\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n\n  return {start, count};\n}\n\nexport default {\n  id: 'decimation',\n\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      // The decimation plugin may have been previously enabled. Need to remove old `dataset._data` handlers\n      cleanDecimatedData(chart);\n      return;\n    }\n\n    // Assume the entire chart is available to show a few more points than needed\n    const availableWidth = chart.width;\n\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        // Decimation is only supported for lines that have an X indexAxis\n        return;\n      }\n\n      if (!meta.controller.supportsDecimation) {\n        // Only line datasets are supported\n        return;\n      }\n\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        // Only linear interpolation is supported\n        return;\n      }\n\n      if (chart.options.parsing) {\n        // Plugin only supports data that does not need parsing\n        return;\n      }\n\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        // No decimation is required until we are above this threshold\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n\n      if (isNullOrUndef(_data)) {\n        // First time we are seeing this dataset\n        // We override the 'data' property with a setter that stores the\n        // raw data in _data, but reads the decimated data from _decimated\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n\n      // Point the chart to the decimated data\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n\n      dataset._decimated = decimated;\n    });\n  },\n\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n", "import {_boundSegment, _boundSegments, _normalizeAngle} from '../../helpers/index.js';\n\nexport function _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n    if (!target.segments) {\n      // Special case for boundary not supporting `segments` (simpleArc)\n      // Bounds are provided as `target` for partial circle, or undefined for full circle\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n\n    // Get all segments from `target` that intersect the bounds of current segment of `line`\n    const targetSegments = _boundSegments(target, bounds);\n\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\n\nexport function _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\n\nexport function _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\n\nexport function _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\n\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {isArray} from '../../helpers/index.js';\nimport {_pointsFromSegments} from './filler.segment.js';\n\n/**\n * @param {PointElement[] | { x: number; y: number; }} boundary\n * @param {LineElement} line\n * @return {LineElement?}\n */\nexport function _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n\n  if (isArray(boundary)) {\n    _loop = true;\n    // @ts-ignore\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nexport function _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n", "import {isObject, isFinite, valueOrDefault} from '../../helpers/helpers.core.js';\n\n/**\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.line.js').default } LineElement\n * @typedef { import('../../types/index.js').FillTarget } FillTarget\n * @typedef { import('../../types/index.js').ComplexFillTarget } ComplexFillTarget\n */\n\nexport function _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n\n  if (!propagate) {\n    return fill;\n  }\n\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isFinite(fill)) {\n      return fill;\n    }\n\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n\n    if (target.visible) {\n      return fill;\n    }\n\n    visited.push(fill);\n    fill = target.fill;\n  }\n\n  return false;\n}\n\n/**\n * @param {LineElement} line\n * @param {number} index\n * @param {number} count\n */\nexport function _decodeFill(line, index, count) {\n  /** @type {string | {value: number}} */\n  const fill = parseFillOption(line);\n\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n\n  let target = parseFloat(fill);\n\n  if (isFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n\n  return target;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @returns {number | null}\n */\nexport function _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\n\n/**\n * @param {FillTarget | ComplexFillTarget} fill\n * @param {Scale} scale\n * @param {number} startValue\n * @returns {number | undefined}\n */\nexport function _getTargetValue(fill, scale, startValue) {\n  let value;\n\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    // @ts-ignore\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\n\n/**\n * @param {LineElement} line\n */\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n\n  if (fill === false || fill === null) {\n    return false;\n  }\n\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n", "/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nimport {LineElement} from '../../elements/index.js';\nimport {_isBetween} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\n\n/**\n * @param {{ chart: Chart; scale: Scale; index: number; line: LineElement; }} source\n * @return {LineElement}\n */\nexport function _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\n\n/**\n * @param {Scale} scale\n * @param {number} index\n * @return {LineElement[]}\n */\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\n\n/**\n * @param {PointElement[]} points\n * @param {PointElement} sourcePoint\n * @param {LineElement[]} linesBelow\n */\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      // First point of an segment -> need to add another point before this,\n      // from next line below.\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        // In the middle of an segment, no need to add more points.\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\n\n/**\n * @param {LineElement} line\n * @param {PointElement} sourcePoint\n * @param {string} property\n * @returns {{point?: PointElement, first?: boolean, last?: boolean}}\n */\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n", "import {TAU} from '../../helpers/index.js';\n\n// TODO: use elements.ArcElement instead\nexport class simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n", "import {isFinite} from '../../helpers/index.js';\nimport {_createBoundaryLine} from './filler.helper.js';\nimport {_getTargetPixel, _getTargetValue} from './filler.options.js';\nimport {_buildStackLine} from './filler.target.stack.js';\nimport {simpleArc} from './simpleArc.js';\n\n/**\n * @typedef { import('../../core/core.controller.js').default } Chart\n * @typedef { import('../../core/core.scale.js').default } Scale\n * @typedef { import('../../elements/element.point.js').default } PointElement\n */\n\nexport function _getTarget(source) {\n  const {chart, fill, line} = source;\n\n  if (isFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n\n  if (fill === 'shape') {\n    return true;\n  }\n\n  const boundary = computeBoundary(source);\n\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n\n  return _createBoundaryLine(boundary, line);\n}\n\n/**\n * @param {Chart} chart\n * @param {number} index\n */\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\n\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\n\n\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n\n  if (isFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n\n  return null;\n}\n\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\n", "import {clipArea, unclipArea} from '../../helpers/index.js';\nimport {_findSegmentEnd, _getBounds, _segments} from './filler.segment.js';\nimport {_getTarget} from './filler.target.js';\n\nexport function _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\n\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n\n  ctx.save();\n\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {line, target, color: below, scale, property});\n\n  ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\n\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n\n    ctx.beginPath();\n\n    const lineLoop = !!line.pathSegment(ctx, src);\n\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n\n    ctx.restore();\n  }\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\n", "/**\n * Plugin based on discussion from the following Chart.js issues:\n * @see https://github.com/chartjs/Chart.js/issues/2380#issuecomment-279961569\n * @see https://github.com/chartjs/Chart.js/issues/2440#issuecomment-256461897\n */\n\nimport LineElement from '../../elements/element.line.js';\nimport {_drawfill} from './filler.drawing.js';\nimport {_shouldApplyFill} from './filler.helper.js';\nimport {_decodeFill, _resolveTarget} from './filler.options.js';\n\nexport default {\n  id: 'filler',\n\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n\n      meta.$filler = source;\n      sources.push(source);\n    }\n\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n\n      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n", "import defaults from '../core/core.defaults.js';\nimport Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {addRoundedRectPath, drawPointLegend, renderText} from '../helpers/helpers.canvas.js';\nimport {\n  _isBetween,\n  callback as call,\n  clipArea,\n  getRtlAdapter,\n  overrideTextDirection,\n  restoreTextDirection,\n  toFont,\n  toPadding,\n  unclipArea,\n  valueOrDefault,\n} from '../helpers/index.js';\nimport {_alignStartEnd, _textX, _toLeftRightCenter} from '../helpers/helpers.extras.js';\nimport {toTRBLCorners} from '../helpers/helpers.options.js';\n\n/**\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n */\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\n\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n\nexport class Legend extends Element {\n\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this._added = false;\n\n    // Contains hit boxes for each dataset (in dataset order)\n    this.legendHitBoxes = [];\n\n    /**\n \t\t * @private\n \t\t */\n    this._hoveredItem = null;\n\n    // Are we in doughnut mode which has a different data type\n    this.doughnutMode = false;\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = call(labelOpts.generateLabels, [this.chart], this) || [];\n\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n\n    this.legendItems = legendItems;\n  }\n\n  fit() {\n    const {options, ctx} = this;\n\n    // The legend may not be displayed for a variety of reasons including\n    // the fact that the defaults got set to `false`.\n    // When the legend is not displayed, there are no guarantees that the options\n    // are correctly formatted so we need to bail out as early as possible.\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    let width, height;\n\n    ctx.font = labelFont.string;\n\n    if (this.isHorizontal()) {\n      width = this.maxWidth; // fill all the width\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight; // fill all the height\n      width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n    }\n\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n\n  /**\n\t * @private\n\t */\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n\n    return totalHeight;\n  }\n\n  _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n\n    let left = 0;\n    let col = 0;\n\n    this.legendItems.forEach((legendItem, i) => {\n      const {itemWidth, itemHeight} = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n\n      // If too tall, go to new column\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n\n      // Store the hitbox width and height here. Final position will be updated in `draw`\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n\n      // Get max width\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size\n\n    return totalWidth;\n  }\n\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n\n      this._draw();\n\n      unclipArea(ctx);\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n\n    this.drawTitle();\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n\n    // current position\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n\n      // Set the ctx for the box\n      ctx.save();\n\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n      if (labelOpts.usePointStyle) {\n        // Recalculate x and y for drawPoint() because its expecting\n        // x and y to be center of figure (instead of top left)\n        const drawOptions = {\n          radius: boxHeight * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n\n        // Draw pointStyle as legend symbol\n        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        // Draw box as legend symbol\n        // Adjust position when boxHeight < fontSize (want it centered)\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n\n        ctx.beginPath();\n\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n\n      ctx.restore();\n    };\n\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n\n    // Horizontal\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n\n    overrideTextDirection(this.ctx, opts.textDirection);\n\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor; // for strikethrough effect\n      ctx.fillStyle = legendItem.fontColor; // render in correct colour\n\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n\n      rtlHelper.setWidth(this.width);\n\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n\n      const realX = rtlHelper.x(x);\n\n      drawLegendBox(realX, y, legendItem);\n\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n\n      // Fill the actual label\n      fillText(rtlHelper.x(x), y, legendItem);\n\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else if (typeof legendItem.text !== 'string') {\n        const fontLineHeight = labelFont.lineHeight;\n        cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n\n    if (!titleOpts.display) {\n      return;\n    }\n\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n\n    // These defaults are used when the legend is vertical.\n    // When horizontal, they are computed below.\n    let left = this.left;\n    let maxWidth = this.width;\n\n    if (this.isHorizontal()) {\n      // Move left / right so that the title is above the legend lines\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      // Move down so that the title is above the legend stack in every alignment\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n\n    // Now that we know the left edge of the inner legend box, compute the correct\n    // X coordinate from the title alignment\n    const x = _alignStartEnd(position, left, left + maxWidth);\n\n    // Canvas setup\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n\n  /**\n\t * @private\n\t */\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n\n  /**\n\t * @private\n\t */\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      // See if we are touching one of the dataset boxes\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          // Touching an element\n          return this.legendItems[i];\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t */\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n\n    // Chart event already has relative position in it\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        call(opts.onLeave, [e, previous, this], this);\n      }\n\n      this._hoveredItem = hoveredItem;\n\n      if (hoveredItem && !sameItem) {\n        call(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      call(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\n\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n  const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n  const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n  return {itemWidth, itemHeight};\n}\n\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n  let legendItemText = legendItem.text;\n  if (legendItemText && typeof legendItemText !== 'string') {\n    legendItemText = legendItemText.reduce((a, b) => a.length > b.length ? a : b);\n  }\n  return boxWidth + (labelFont.size / 2) + ctx.measureText(legendItemText).width;\n}\n\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n  let itemHeight = _itemHeight;\n  if (typeof legendItem.text !== 'string') {\n    itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n  }\n  return itemHeight;\n}\n\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n  const labelHeight = legendItem.text ? legendItem.text.length : 0;\n  return fontLineHeight * labelHeight;\n}\n\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\n\nexport default {\n  id: 'legend',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Legend,\n\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n\n  // During the beforeUpdate step, the layout configuration needs to run\n  // This ensures that if the legend position changes (via an option update)\n  // the layout system respects the change. See https://github.com/chartjs/Chart.js/issues/7527\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n\n  // The labels need to be built after datasets are updated to ensure that colors\n  // and other styling are correct. See https://github.com/chartjs/Chart.js/issues/6968\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n\n\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n\n    // a callback that will handle\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n\n    onHover: null,\n    onLeave: null,\n\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      // Generates labels shown in the legend\n      // Valid properties to return:\n      // text : text to display\n      // fillStyle : fill of coloured box\n      // strokeStyle: stroke of coloured box\n      // hidden : if this legend item refers to a hidden item\n      // lineCap : cap style for line\n      // lineDash\n      // lineDashOffset :\n      // lineJoin :\n      // lineWidth :\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color, useBorderRadius, borderRadius}} = chart.legend.options;\n\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n\n            // Below is extra data used for toggling the datasets\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n", "import Element from '../core/core.element.js';\nimport layouts from '../core/core.layouts.js';\nimport {PI, isArray, toPadding, toFont} from '../helpers/index.js';\nimport {_toLeftRightCenter, _alignStartEnd} from '../helpers/helpers.extras.js';\nimport {renderText} from '../helpers/helpers.canvas.js';\n\nexport class Title extends Element {\n  /**\n\t * @param {{ ctx: any; options: any; chart: any; }} config\n\t */\n  constructor(config) {\n    super();\n\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n\n    this.left = 0;\n    this.top = 0;\n\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n\n    if (!opts.display) {\n      return;\n    }\n\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\n\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\n\nexport default {\n  id: 'title',\n\n  /**\n\t * For tests\n\t * @private\n\t */\n  _element: Title,\n\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000         // by default greater than legend (1000) to be above\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import {Title} from './plugin.title.js';\nimport layouts from '../core/core.layouts.js';\n\nconst map = new WeakMap();\n\nexport default {\n  id: 'subtitle',\n\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500         // by default greater than legend (1000) and smaller than title (2000)\n  },\n\n  defaultRoutes: {\n    color: 'color'\n  },\n\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n", "import Animations from '../core/core.animations.js';\nimport Element from '../core/core.element.js';\nimport {addRoundedRectPath} from '../helpers/helpers.canvas.js';\nimport {each, noop, isNullOrUndef, isArray, _elementsEqual, isObject} from '../helpers/helpers.core.js';\nimport {toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\nimport {getRtlAdapter, overrideTextDirection, restoreTextDirection} from '../helpers/helpers.rtl.js';\nimport {distanceBetweenPoints, _limitValue} from '../helpers/helpers.math.js';\nimport {createContext, drawPoint} from '../helpers/index.js';\n\n/**\n * @typedef { import('../platform/platform.base.js').Chart } Chart\n * @typedef { import('../types/index.js').ChartEvent } ChartEvent\n * @typedef { import('../types/index.js').ActiveElement } ActiveElement\n * @typedef { import('../core/core.interaction.js').InteractionItem } InteractionItem\n */\n\nconst positioners = {\n  /**\n\t * Average mode places the tooltip at the average position of the elements shown\n\t */\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n\n  /**\n\t * Gets the tooltip position nearest of the item nearest to the event position\n\t */\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n\n    return {\n      x,\n      y\n    };\n  }\n};\n\n// Helper to push or concat based on if the 2nd parameter is an array or not\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      // base = base.concat(toPush);\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n\n  return base;\n}\n\n/**\n * Returns array of strings split by newline\n * @param {*} str - The value to split by newline.\n * @returns {string|string[]} value if newline present - Returned from String split() method\n * @function\n */\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\n\n\n/**\n * Private helper to create a tooltip item model\n * @param {Chart} chart\n * @param {ActiveElement} item - {element, index, datasetIndex} to create the tooltip item for\n * @return new tooltip item\n */\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\n\n/**\n * Get the size of the tooltip\n */\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n\n  // Count of all lines in the body\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    // Body lines may include some extra height depending on boxHeight\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n\n  // Title width\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n\n  ctx.save();\n\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n\n  // Body width\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n\n  // Body lines may include some extra width due to the color box\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n\n  // Reset back to 0\n  widthPadding = 0;\n\n  // Footer width\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n\n  ctx.restore();\n\n  // Add padding\n  width += padding.width;\n\n  return {width, height};\n}\n\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n\n  return xAlign;\n}\n\n/**\n * Helper to get the alignment of a tooltip given the size\n */\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\n\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n  // eslint-disable-next-line prefer-const\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\n\n/**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\n\n/**\n * Helper to build before and after body lines\n */\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\n\nconst defaultCallbacks = {\n  // Args are: (tooltipItems, data)\n  beforeTitle: noop,\n  title(tooltipItems) {\n    if (tooltipItems.length > 0) {\n      const item = tooltipItems[0];\n      const labels = item.chart.data.labels;\n      const labelCount = labels ? labels.length : 0;\n\n      if (this && this.options && this.options.mode === 'dataset') {\n        return item.dataset.label || '';\n      } else if (item.label) {\n        return item.label;\n      } else if (labelCount > 0 && item.dataIndex < labelCount) {\n        return labels[item.dataIndex];\n      }\n    }\n\n    return '';\n  },\n  afterTitle: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeBody: noop,\n\n  // Args are: (tooltipItem, data)\n  beforeLabel: noop,\n  label(tooltipItem) {\n    if (this && this.options && this.options.mode === 'dataset') {\n      return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n    }\n\n    let label = tooltipItem.dataset.label || '';\n\n    if (label) {\n      label += ': ';\n    }\n    const value = tooltipItem.formattedValue;\n    if (!isNullOrUndef(value)) {\n      label += value;\n    }\n    return label;\n  },\n  labelColor(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      borderColor: options.borderColor,\n      backgroundColor: options.backgroundColor,\n      borderWidth: options.borderWidth,\n      borderDash: options.borderDash,\n      borderDashOffset: options.borderDashOffset,\n      borderRadius: 0,\n    };\n  },\n  labelTextColor() {\n    return this.options.bodyColor;\n  },\n  labelPointStyle(tooltipItem) {\n    const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n    const options = meta.controller.getStyle(tooltipItem.dataIndex);\n    return {\n      pointStyle: options.pointStyle,\n      rotation: options.rotation,\n    };\n  },\n  afterLabel: noop,\n\n  // Args are: (tooltipItems, data)\n  afterBody: noop,\n\n  // Args are: (tooltipItems, data)\n  beforeFooter: noop,\n  footer: noop,\n  afterFooter: noop\n};\n\n/**\n * Invoke callback from object with context and arguments.\n * If callback returns `undefined`, then will be invoked default callback.\n * @param {Record<keyof typeof defaultCallbacks, Function>} callbacks\n * @param {keyof typeof defaultCallbacks} name\n * @param {*} ctx\n * @param {*} arg\n * @returns {any}\n */\nfunction invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n  const result = callbacks[name].call(ctx, arg);\n\n  if (typeof result === 'undefined') {\n    return defaultCallbacks[name].call(ctx, arg);\n  }\n\n  return result;\n}\n\nexport class Tooltip extends Element {\n\n  /**\n   * @namespace Chart.Tooltip.positioners\n   */\n  static positioners = positioners;\n\n  constructor(config) {\n    super();\n\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    // TODO: V4, make this private, rename to `_labelStyles`, and combine with `labelPointStyles`\n    // and `labelTextColors` to create a single variable\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n\n  /**\n\t * @private\n\t */\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n\n    if (cached) {\n      return cached;\n    }\n\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n\n    return animations;\n  }\n\n  /**\n\t * @protected\n\t */\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n\n  getTitle(context, options) {\n    const {callbacks} = options;\n\n    const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n    const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n    const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n    return lines;\n  }\n\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems)\n    );\n  }\n\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n      pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n\n      bodyItems.push(bodyItem);\n    });\n\n    return bodyItems;\n  }\n\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(\n      invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems)\n    );\n  }\n\n  // Get the footer and beforeFooter and afterFooter lines\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n\n    const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n    const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n    const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n    return lines;\n  }\n\n  /**\n\t * @private\n\t */\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n\n    // If the user provided a filter function, use it to modify the tooltip items\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n\n    // If the user provided a sorting function, use it to modify the tooltip items\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n\n    // Determine colors for boxes\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n      labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n      labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n    });\n\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n\n        // Left draws bottom -> top, this y1 is on the bottom\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n\n        // Right draws top -> bottom, thus y1 is on the top\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n\n        // Top draws left -> right, thus x1 is on the left\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n\n        // Bottom draws right -> left, thus x1 is on the right\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.titleAlign, options);\n\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing; // Line Height and spacing\n\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n        }\n      }\n    }\n  }\n\n  /**\n\t * @private\n\t */\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColor = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2, // fit the circle in the box\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      // Recalculate x and y for drawPoint() because its expecting\n      // x and y to be center of figure (instead of top left)\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n\n      // Fill the point with white so that colours merge nicely if the opacity is < 1\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n\n      // Draw the point\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.fillStyle = labelColor.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      // Border\n      ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : (labelColor.borderWidth || 1); // TODO, v4 remove fallback\n      ctx.strokeStyle = labelColor.borderColor;\n      ctx.setLineDash(labelColor.borderDash || []);\n      ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n\n      // Fill a white rect so that colours merge nicely if the opacity is < 1\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n      const borderRadius = toTRBLCorners(labelColor.borderRadius);\n\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        // Normal rect\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        // Inner square\n        ctx.fillStyle = labelColor.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n\n    // restore fillStyle\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n\n    // Before body lines\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n\n    // Draw body lines now\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n\n      lines = bodyItem.lines;\n      // Draw Legend-like boxes if needed\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        // Reset for any lines that don't include colorbox\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n\n      each(bodyItem.after, fillLineOfText);\n    }\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n\n    // After body lines\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n\n      footerFont = toFont(options.footerFont);\n\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n\n    ctx.fill();\n\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n\n  /**\n\t * Update x/y animation targets when _active elements are animating too\n\t * @private\n\t */\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n\n  /**\n   * Determine if the tooltip will draw anything\n   * @returns {boolean} True if the tooltip will render\n   */\n  _willRender() {\n    return !!this.opacity;\n  }\n\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n\n    if (!opacity) {\n      return;\n    }\n\n    this._updateAnimationTarget(options);\n\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n\n    // IE11/Edge does not like very small opacities, so snap to 0\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n\n    const padding = toPadding(options.padding);\n\n    // Truthy/falsey value for empty tooltip\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n\n      // Draw Background\n      this.drawBackground(pt, ctx, tooltipSize, options);\n\n      overrideTextDirection(ctx, options.textDirection);\n\n      pt.y += padding.top;\n\n      // Titles\n      this.drawTitle(pt, ctx, options);\n\n      // Body\n      this.drawBody(pt, ctx, options);\n\n      // Footer\n      this.drawFooter(pt, ctx, options);\n\n      restoreTextDirection(ctx, options.textDirection);\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * Get active elements in the tooltip\n\t * @returns {Array} Array of elements that are active in the tooltip\n\t */\n  getActiveElements() {\n    return this._active || [];\n  }\n\n  /**\n\t * Set active elements in the tooltip\n\t * @param {array} activeElements Array of active datasetIndex/index pairs.\n\t * @param {object} eventPosition Synthetic event position used in positioning\n\t */\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n\n  /**\n\t * Handle an event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {boolean} true if the tooltip changed\n\t */\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n    // When there are multiple items shown, but the tooltip position is nearest mode\n    // an update may need to be made because our position may have changed even though\n    // the items are the same as before.\n    const positionChanged = this._positionChanged(active, e);\n\n    // Remember Last Actives\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n    // Only handle target event on tooltip change\n    if (changed) {\n      this._active = active;\n\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n\n        this.update(true, replay);\n      }\n    }\n\n    return changed;\n  }\n\n  /**\n\t * Helper for determining the active elements for event\n\t * @param {ChartEvent} e - The event to handle\n\t * @param {InteractionItem[]} lastActive - Previously active elements\n\t * @param {boolean} [replay] - This is a replayed event (from update)\n\t * @param {boolean} [inChartArea] - The event is inside chartArea\n\t * @returns {InteractionItem[]} - Active elements\n\t * @private\n\t */\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n\n    if (e.type === 'mouseout') {\n      return [];\n    }\n\n    if (!inChartArea) {\n      // Let user control the active elements outside chartArea. Eg. using Legend.\n      return lastActive;\n    }\n\n    // Find Active Elements for tooltips\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n    if (options.reverse) {\n      active.reverse();\n    }\n\n    return active;\n  }\n\n  /**\n\t * Determine if the active elements + event combination changes the\n\t * tooltip position\n\t * @param {array} active - Active elements\n\t * @param {ChartEvent} e - Event that triggered the position change\n\t * @returns {boolean} True if the position has changed\n\t */\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\n\nexport default {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n\n      if (chart.notifyPlugins('beforeTooltipDraw', {...args, cancelable: true}) === false) {\n        return;\n      }\n\n      tooltip.draw(chart.ctx);\n\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      // If the event is replayed from `update`, we should evaluate with the final positions.\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        // notify chart about the change, so it will render\n        args.changed = true;\n      }\n    }\n  },\n\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: defaultCallbacks\n  },\n\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n\n  // Resolve additionally from `interaction` options and defaults.\n  additionalOptionScopes: ['interaction']\n};\n", "import Scale from '../core/core.scale.js';\nimport {isNullOrUndef, valueOrDefault, _limitValue} from '../helpers/index.js';\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\n\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\n\nfunction _getLabelForValue(value) {\n  const labels = this.getLabels();\n\n  if (value >= 0 && value < labels.length) {\n    return labels[value];\n  }\n  return value;\n}\n\nexport default class CategoryScale extends Scale {\n\n  static id = 'category';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: _getLabelForValue\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n\n    // If we are viewing some subset of labels, slice the original array\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n\n  getLabelForValue(value) {\n    return _getLabelForValue.call(this, value);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    super.configure();\n\n    if (!this.isHorizontal()) {\n      // For backward compatibility, vertical category scale reverse is inverted.\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n\n  // Used to get data value locations. Value can either be an index or a numerical value\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  // Must override base implementation because it calls getPixelForValue\n  // and category scale can have duplicate values\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n\n  getBasePixel() {\n    return this.bottom;\n  }\n}\n", "import {isNullOrUndef} from '../helpers/helpers.core.js';\nimport {almostEquals, almostWhole, niceNum, _decimalPlaces, _setMinAndMaxByKey, sign, toRadians} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\n\n/**\n * Generate a set of linear ticks for an axis\n * 1. If generationOptions.min, generationOptions.max, and generationOptions.step are defined:\n *    if (max - min) / step is an integer, ticks are generated as [min, min + step, ..., max]\n *    Note that the generationOptions.maxCount setting is respected in this scenario\n *\n * 2. If generationOptions.min, generationOptions.max, and generationOptions.count is defined\n *    spacing = (max - min) / count\n *    Ticks are generated as [min, min + spacing, ..., max]\n *\n * 3. If generationOptions.count is defined\n *    spacing = (niceMax - niceMin) / count\n *\n * 4. Compute optimal spacing of ticks using niceNum algorithm\n *\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, dataRange) {\n  const ticks = [];\n  // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n  // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n  // for details.\n\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n\n  // Beyond MIN_SPACING floating point numbers being to lose precision\n  // such that we can't do the math necessary to generate ticks\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n\n  if (!isNullOrUndef(precision)) {\n    // If the user specified a precision, round to that number of decimal places\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    // Case 1: If min, max and stepSize are set and they make an evenly spaced scale use it.\n    // spacing = step;\n    // numSpaces = (max - min) / spacing;\n    // Note that we round here to handle the case where almostWhole translated an FP error\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    // Cases 2 & 3, we have a count specified. Handle optional user defined edges to the range.\n    // Sometimes these are no-ops, but it makes the code a lot clearer\n    // and when a user defined range is specified, we want the correct ticks\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    // Case 4\n    numSpaces = (niceMax - niceMin) / spacing;\n\n    // If very close to our rounded value, use it.\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n\n  // The spacing will have changed in cases 1, 2, and 3 so the factor cannot be computed\n  // until this point\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n\n      if (niceMin < min) {\n        j++; // Skip niceMin\n      }\n      // If the next nice tick is close to min, skip it\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n\n  for (; j < numSpaces; ++j) {\n    const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n    if (maxDefined && tickValue > max) {\n      break;\n    }\n    ticks.push({value: tickValue});\n  }\n\n  if (maxDefined && includeBounds && niceMax !== max) {\n    // If the previous tick is too close to max, replace it with max, else add max\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n\n  return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\n\nexport default class LinearScaleBase extends Scale {\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    /** @type {number} */\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n\n    return +raw;\n  }\n\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n\n    if (min === max) {\n      let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n\n      setMax(max + offset);\n\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    // eslint-disable-next-line prefer-const\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n\n    return maxTicks;\n  }\n\n  /**\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    // Figure out what the max number of ticks we can support it is based on the size of\n    // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n    // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n    // the graph. Make sure we always have at least 2 ticks\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks(numericGeneratorOptions, dataRange);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n\n    super.configure();\n\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n", "import {isFinite} from '../helpers/helpers.core.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {toRadians} from '../helpers/index.js';\n\nexport default class LinearScale extends LinearScaleBase {\n\n  static id = 'linear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.numeric\n    }\n  };\n\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? min : 0;\n    this.max = isFinite(max) ? max : 1;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n \t */\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n\n  // Utils\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\n", "import {finiteOrDefault, isFinite} from '../helpers/helpers.core.js';\nimport {formatNumber} from '../helpers/helpers.intl.js';\nimport {_setMinAndMaxByKey, log10} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\n\nconst log10Floor = v => Math.floor(log10(v));\nconst changeExponent = (v, m) => Math.pow(10, log10Floor(v) + m);\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, log10Floor(tickVal)));\n  return remain === 1;\n}\n\nfunction steps(min, max, rangeExp) {\n  const rangeStep = Math.pow(10, rangeExp);\n  const start = Math.floor(min / rangeStep);\n  const end = Math.ceil(max / rangeStep);\n  return end - start;\n}\n\nfunction startExp(min, max) {\n  const range = max - min;\n  let rangeExp = log10Floor(range);\n  while (steps(min, max, rangeExp) > 10) {\n    rangeExp++;\n  }\n  while (steps(min, max, rangeExp) < 10) {\n    rangeExp--;\n  }\n  return Math.min(rangeExp, log10Floor(min));\n}\n\n\n/**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {object[]} array of tick objects\n */\nfunction generateTicks(generationOptions, {min, max}) {\n  min = finiteOrDefault(generationOptions.min, min);\n  const ticks = [];\n  const minExp = log10Floor(min);\n  let exp = startExp(min, max);\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  const stepSize = Math.pow(10, exp);\n  const base = minExp > exp ? Math.pow(10, minExp) : 0;\n  const start = Math.round((min - base) * precision) / precision;\n  const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n  let significand = Math.floor((start - offset) / Math.pow(10, exp));\n  let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n  while (value < max) {\n    ticks.push({value, major: isMajor(value), significand});\n    if (significand >= 10) {\n      significand = significand < 15 ? 15 : 20;\n    } else {\n      significand++;\n    }\n    if (significand >= 20) {\n      exp++;\n      significand = 2;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n  }\n  const lastTick = finiteOrDefault(generationOptions.max, value);\n  ticks.push({value: lastTick, major: isMajor(lastTick), significand});\n\n  return ticks;\n}\n\nexport default class LogarithmicScale extends Scale {\n\n  static id = 'logarithmic';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    ticks: {\n      callback: Ticks.formatters.logarithmic,\n      major: {\n        enabled: true\n      }\n    }\n  };\n\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.start = undefined;\n    /** @type {number} */\n    this.end = undefined;\n    /** @type {number} */\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isFinite(value) && value > 0 ? value : null;\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n\n    this.min = isFinite(min) ? Math.max(0, min) : null;\n    this.max = isFinite(max) ? Math.max(0, max) : null;\n\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n\n    // if data has `0` in it or `beginAtZero` is true, min (non zero) value is at bottom\n    // of scale, and it does not equal suggestedMin, lower the min bound by one exp.\n    if (this._zero && this.min !== this._suggestedMin && !isFinite(this._userMin)) {\n      this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n    }\n\n    this.handleTickRangeOptions();\n  }\n\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n\n    if (min === max) {\n      if (min <= 0) { // includes null\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(changeExponent(min, -1));\n        setMax(changeExponent(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(changeExponent(max, -1));\n    }\n    if (max <= 0) {\n\n      setMax(changeExponent(min, +1));\n    }\n\n    this.min = min;\n    this.max = max;\n  }\n\n  buildTicks() {\n    const opts = this.options;\n\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n\n    // At this point, we need to update our max and min given the tick values,\n    // since we probably have expanded the range of the scale\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n\n    if (opts.reverse) {\n      ticks.reverse();\n\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n\n    return ticks;\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n\n  /**\n\t * @protected\n\t */\n  configure() {\n    const start = this.min;\n\n    super.configure();\n\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\n", "import defaults from '../core/core.defaults.js';\nimport {_longestText, addRoundedRectPath, renderText, _isPointInArea} from '../helpers/helpers.canvas.js';\nimport {HALF_PI, TAU, toDegrees, toRadians, _normalizeAngle, PI} from '../helpers/helpers.math.js';\nimport LinearScaleBase from './scale.linearbase.js';\nimport Ticks from '../core/core.ticks.js';\nimport {valueOrDefault, isArray, isFinite, callback as callCallback, isNullOrUndef} from '../helpers/helpers.core.js';\nimport {createContext, toFont, toPadding, toTRBLCorners} from '../helpers/helpers.options.js';\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\n\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\n\n/**\n * Helper function to fit a radial linear scale with point labels\n */\nfunction fitWithPointLabels(scale) {\n\n  // Right, this is really confusing and there is a lot of maths going on here\n  // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n  //\n  // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n  //\n  // Solution:\n  //\n  // We assume the radius of the polygon is half the size of the canvas at first\n  // at each index we check if the text overlaps.\n  //\n  // Where it does, we store that angle and that index.\n  //\n  // After finding the largest index and angle we calculate how much we need to remove\n  // from the shape radius to move the point inwards by that x.\n  //\n  // We average the left and right distances to get the maximum shape radius that can fit in the box\n  // along with labels.\n  //\n  // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n  // on each side, removing that from the size, halving it and adding the left x protrusion width.\n  //\n  // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n  // and position it in the most space efficient manner\n  //\n  // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n  // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n  // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n\n  // Now that text size is determined, compute the full positions\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\n\nfunction createPointLabelItem(scale, index, itemOpts) {\n  const outerDistance = scale.drawingArea;\n  const {extra, additionalAngle, padding, size} = itemOpts;\n  const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n  const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n  const y = yForAngle(pointLabelPosition.y, size.h, angle);\n  const textAlign = getTextAlignForAngle(angle);\n  const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n  return {\n    // if to draw or overlapped\n    visible: true,\n\n    // Text position\n    x: pointLabelPosition.x,\n    y,\n\n    // Text rendering data\n    textAlign,\n\n    // Bounding box\n    left,\n    top: y,\n    right: left + size.w,\n    bottom: y + size.h\n  };\n}\n\nfunction isNotOverlapped(item, area) {\n  if (!area) {\n    return true;\n  }\n  const {left, top, right, bottom} = item;\n  const apexesInArea = _isPointInArea({x: left, y: top}, area) || _isPointInArea({x: left, y: bottom}, area) ||\n    _isPointInArea({x: right, y: top}, area) || _isPointInArea({x: right, y: bottom}, area);\n  return !apexesInArea;\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const {centerPointLabels, display} = opts.pointLabels;\n  const itemOpts = {\n    extra: getTickBackdropHeight(opts) / 2,\n    additionalAngle: centerPointLabels ? PI / valueCount : 0\n  };\n  let area;\n\n  for (let i = 0; i < valueCount; i++) {\n    itemOpts.padding = padding[i];\n    itemOpts.size = labelSizes[i];\n\n    const item = createPointLabelItem(scale, i, itemOpts);\n    items.push(item);\n    if (display === 'auto') {\n      item.visible = isNotOverlapped(item, area);\n      if (item.visible) {\n        area = item;\n      }\n    }\n  }\n  return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n\n  return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\n\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\n\nfunction drawPointLabelBox(ctx, opts, item) {\n  const {left, top, right, bottom} = item;\n  const {backdropColor} = opts;\n\n  if (!isNullOrUndef(backdropColor)) {\n    const borderRadius = toTRBLCorners(opts.borderRadius);\n    const padding = toPadding(opts.backdropPadding);\n    ctx.fillStyle = backdropColor;\n\n    const backdropLeft = left - padding.left;\n    const backdropTop = top - padding.top;\n    const backdropWidth = right - left + padding.width;\n    const backdropHeight = bottom - top + padding.height;\n\n    if (Object.values(borderRadius).some(v => v !== 0)) {\n      ctx.beginPath();\n      addRoundedRectPath(ctx, {\n        x: backdropLeft,\n        y: backdropTop,\n        w: backdropWidth,\n        h: backdropHeight,\n        radius: borderRadius,\n      });\n      ctx.fill();\n    } else {\n      ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n    }\n  }\n}\n\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const item = scale._pointLabelItems[i];\n    if (!item.visible) {\n      // overlapping\n      continue;\n    }\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    drawPointLabelBox(ctx, optsAtIndex, item);\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign} = item;\n\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    // Draw circular arcs between the points\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    // Draw straight lines connecting each index\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n\n  const {color, lineWidth} = gridLineOpts;\n\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(borderOpts.dash);\n  ctx.lineDashOffset = borderOpts.dashOffset;\n\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\n\nexport default class RadialLinearScale extends LinearScaleBase {\n\n  static id = 'radialLinear';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    display: true,\n\n    // Boolean - Whether to animate scaling the chart from the centre\n    animate: true,\n    position: 'chartArea',\n\n    angleLines: {\n      display: true,\n      lineWidth: 1,\n      borderDash: [],\n      borderDashOffset: 0.0\n    },\n\n    grid: {\n      circular: false\n    },\n\n    startAngle: 0,\n\n    // label settings\n    ticks: {\n      // Boolean - Show a backdrop to the scale label\n      showLabelBackdrop: true,\n\n      callback: Ticks.formatters.numeric\n    },\n\n    pointLabels: {\n      backdropColor: undefined,\n\n      // Number - The backdrop padding above & below the label in pixels\n      backdropPadding: 2,\n\n      // Boolean - if true, show point labels\n      display: true,\n\n      // Number - Point label font size in pixels\n      font: {\n        size: 10\n      },\n\n      // Function - Used to convert point labels\n      callback(label) {\n        return label;\n      },\n\n      // Number - Additionl padding between scale and pointLabel\n      padding: 5,\n\n      // Boolean - if true, center point labels to slices in polar chart\n      centerPointLabels: false\n    }\n  };\n\n  static defaultRoutes = {\n    'angleLines.color': 'borderColor',\n    'pointLabels.color': 'color',\n    'ticks.color': 'color'\n  };\n\n  static descriptors = {\n    angleLines: {\n      _fallback: 'grid'\n    }\n  };\n\n  constructor(cfg) {\n    super(cfg);\n\n    /** @type {number} */\n    this.xCenter = undefined;\n    /** @type {number} */\n    this.yCenter = undefined;\n    /** @type {number} */\n    this.drawingArea = undefined;\n    /** @type {string[]} */\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n\n  setDimensions() {\n    // Set the unconstrained dimension before label rotation\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n\n    this.min = isFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isFinite(max) && !isNaN(max) ? max : 0;\n\n    // Common base implementation to handle min, max, beginAtZero\n    this.handleTickRangeOptions();\n  }\n\n  /**\n\t * Returns the maximum number of ticks based on the scale dimension\n\t * @protected\n\t */\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n\n    // Point labels\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callCallback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n\n  fit() {\n    const opts = this.options;\n\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n\n    // Take into account half font size + the yPadding of the top value\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid, border} = opts;\n    const labelCount = this._pointLabels.length;\n\n    let i, offset, position;\n\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const context = this.getContext(index);\n          const optsAtIndex = grid.setContext(context);\n          const optsAtIndexBorder = border.setContext(context);\n\n          drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n        }\n      });\n    }\n\n    if (angleLines.display) {\n      ctx.save();\n\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n\n        if (!lineWidth || !color) {\n          continue;\n        }\n\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n\n      ctx.restore();\n    }\n  }\n\n  /**\n\t * @protected\n\t */\n  drawBorder() {}\n\n  /**\n\t * @protected\n\t */\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n\n    if (!tickOpts.display) {\n      return;\n    }\n\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n        strokeColor: optsAtIndex.textStrokeColor,\n        strokeWidth: optsAtIndex.textStrokeWidth,\n      });\n    });\n\n    ctx.restore();\n  }\n\n  /**\n\t * @protected\n\t */\n  drawTitle() {}\n}\n", "import adapters from '../core/core.adapters.js';\nimport {callback as call, isFinite, isNullOrUndef, mergeIf, valueOrDefault} from '../helpers/helpers.core.js';\nimport {toRadians, isNumber, _limitValue} from '../helpers/helpers.math.js';\nimport Scale from '../core/core.scale.js';\nimport {_arrayUnique, _filterBetween, _lookup} from '../helpers/helpers.collection.js';\n\n/**\n * @typedef { import('../core/core.adapters.js').TimeUnit } Unit\n * @typedef {{common: boolean, size: number, steps?: number}} Interval\n * @typedef { import('../core/core.adapters.js').DateAdapter } DateAdapter\n */\n\n/**\n * @type {Object<Unit, Interval>}\n */\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\n\n/**\n * @type {Unit[]}\n */\nconst UNITS = /** @type Unit[] */ /* #__PURE__ */ (Object.keys(INTERVALS));\n\n/**\n * @param {number} a\n * @param {number} b\n */\nfunction sorter(a, b) {\n  return a - b;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {*} input\n * @return {number}\n */\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n\n  // Only parse if it's not a timestamp already\n  if (!isFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, /** @type {Unit} */ (parser))\n      : adapter.parse(value);\n  }\n\n  if (value === null) {\n    return null;\n  }\n\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n\n  return +value;\n}\n\n/**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @param {number} capacity\n * @return {object}\n */\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n\n  return UNITS[ilen - 1];\n}\n\n/**\n * Figures out what unit to format a set of ticks with\n * @param {TimeScale} scale\n * @param {number} numTicks\n * @param {Unit} minUnit\n * @param {number} min\n * @param {number} max\n * @return {Unit}\n */\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\n/**\n * @param {Unit} unit\n * @return {object}\n */\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\n\n/**\n * @param {object} ticks\n * @param {number} time\n * @param {number[]} [timestamps] - if defined, snap to these timestamps\n */\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\n\n/**\n * @param {TimeScale} scale\n * @param {object[]} ticks\n * @param {object} map\n * @param {Unit} majorUnit\n * @return {object[]}\n */\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\n\n/**\n * @param {TimeScale} scale\n * @param {number[]} values\n * @param {Unit|undefined} [majorUnit]\n * @return {object[]}\n */\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  /** @type {Object<number,object>} */\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n\n  // We set the major ticks separately from the above loop because calling startOf for every tick\n  // is expensive when there is a large number of ticks\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nexport default class TimeScale extends Scale {\n\n  static id = 'time';\n\n  /**\n   * @type {any}\n   */\n  static defaults = {\n    /**\n     * Scale boundary strategy (bypassed by min/max time options)\n     * - `data`: make sure data are fully visible, ticks outside are removed\n     * - `ticks`: make sure ticks are fully visible, data outside are truncated\n     * @see https://github.com/chartjs/Chart.js/pull/4556\n     * @since 2.7.0\n     */\n    bounds: 'data',\n\n    adapters: {},\n    time: {\n      parser: false, // false == a pattern string from or a custom callback that converts its argument to a timestamp\n      unit: false, // false == automatic or override with week, month, year, etc.\n      round: false, // none, or override with week, month, year, etc.\n      isoWeekday: false, // override week start day\n      minUnit: 'millisecond',\n      displayFormats: {}\n    },\n    ticks: {\n      /**\n       * Ticks generation input values:\n       * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n       * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n       * - 'labels': generates ticks from user given `data.labels` values ONLY.\n       * @see https://github.com/chartjs/Chart.js/pull/4507\n       * @since 2.7.0\n       */\n      source: 'auto',\n\n      callback: false,\n\n      major: {\n        enabled: false\n      }\n    }\n  };\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {{data: number[], labels: number[], all: number[]}} */\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n\n    /** @type {Unit} */\n    this._unit = 'day';\n    /** @type {Unit=} */\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n\n  init(scaleOpts, opts = {}) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    /** @type {DateAdapter} */\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n\n    adapter.init(opts);\n\n    // Backward compatibility: before introducing adapter, `displayFormats` was\n    // supposed to contain *all* unit/string pairs but this can't be resolved\n    // when loading the scale (adapters are loaded afterward), so let's populate\n    // missing formats on update\n    mergeIf(time.displayFormats, adapter.formats());\n\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n\n    super.init(scaleOpts);\n\n    this._normalized = opts.normalized;\n  }\n\n  /**\n\t * @param {*} raw\n\t * @param {number?} [index]\n\t * @return {number}\n\t */\n  parse(raw, index) { // eslint-disable-line no-unused-vars\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    // eslint-disable-next-line prefer-const\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n\n    /**\n\t\t * @param {object} bounds\n\t\t */\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n\n    // If we have user provided `min` and `max` labels / data bounds can be ignored\n    if (!minDefined || !maxDefined) {\n      // Labels are always considered, when user did not force bounds\n      _applyBounds(this._getLabelBounds());\n\n      // If `bounds` is `'ticks'` and `ticks.source` is `'labels'`,\n      // data bounds are ignored (and don't need to be determined)\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n\n    min = isFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n\n    // Make sure that max is strictly higher than min (required by the timeseries lookup table)\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n\n  /**\n\t * @private\n\t */\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n\n  /**\n\t * @return {object[]}\n\t */\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n\n    const min = this.min;\n    const max = this.max;\n\n    const ticks = _filterBetween(timestamps, min, max);\n\n    // PRIVATE\n    // determineUnitForFormatting relies on the number of ticks so we don't use it when\n    // autoSkip is enabled because we don't yet know what the final number of ticks will be\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n\n    if (options.reverse) {\n      ticks.reverse();\n    }\n\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n\n  afterAutoSkip() {\n    // Offsets for bar charts need to be handled with the auto skipped\n    // ticks. Once ticks have been skipped, we re-compute the offsets.\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n\n  /**\n\t * Returns the start and end offsets from edges in the form of {start, end}\n\t * where each value is a relative width to the scale and ranges between 0 and 1.\n\t * They add extra margins on the both sides by scaling down the original scale.\n\t * Offsets are added when the `offset` option is true.\n\t * @param {number[]} timestamps\n\t * @protected\n\t */\n  initOffsets(timestamps = []) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n\n  /**\n\t * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n\t * `minor` unit using the given scale time `options`.\n\t * Important: this method can return ticks outside the min and max range, it's the\n\t * responsibility of the calling code to clamp values if needed.\n\t * @protected\n\t */\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    // @ts-ignore\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n\n    // For 'week' unit, handle the first day of week option\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n\n    // Align first ticks on unit\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n    // Prevent browser from freezing in case user options request millions of milliseconds\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n\n    // @ts-ignore\n    return Object.keys(ticks).sort(sorter).map(x => +x);\n  }\n\n  /**\n\t * @param {number} value\n\t * @return {string}\n\t */\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n\n  /**\n\t * @param {number} value\n\t * @param {string|undefined} format\n\t * @return {string}\n\t */\n  format(value, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const fmt = format || formats[unit];\n    return this._adapter.format(value, fmt);\n  }\n\n  /**\n\t * Function to format an individual tick mark\n\t * @param {number} time\n\t * @param {number} index\n\t * @param {object[]} ticks\n\t * @param {string|undefined} [format]\n\t * @return {string}\n\t * @private\n\t */\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formatter = options.ticks.callback;\n\n    if (formatter) {\n      return call(formatter, [time, index, ticks], this);\n    }\n\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n\n    return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n  }\n\n  /**\n\t * @param {object[]} ticks\n\t */\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n\n  /**\n\t * @param {string} label\n\t * @return {{w:number, h:number}}\n\t * @private\n\t */\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n\n  /**\n\t * @param {number} exampleTime\n\t * @return {number}\n\t * @private\n\t */\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n\n    // pick the longest format (milliseconds) for guesstimation\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    // subtract 1 - if offset then there's one less label than tick\n    // if not offset then one half label padding is added to each end leaving room for one less label\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n\n  /**\n\t * @protected\n\t */\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const metas = this.getMatchingVisibleMetas();\n\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n\n    return (this._cache.data = this.normalize(timestamps));\n  }\n\n  /**\n\t * @protected\n\t */\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n\n  /**\n\t * @param {number[]} values\n\t * @protected\n\t */\n  normalize(values) {\n    // It seems to be somewhat faster to do sorting first\n    return _arrayUnique(values.sort(sorter));\n  }\n}\n", "import TimeScale from './scale.time.js';\nimport {_lookupByKey} from '../helpers/helpers.collection.js';\n\n/**\n * Linearly interpolates the given source `val` using the table. If value is out of bounds, values\n * at edges are used for the interpolation.\n * @param {object} table\n * @param {number} val\n * @param {boolean} [reverse] lookup time based on position instead of vice versa\n * @return {object}\n */\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nclass TimeSeriesScale extends TimeScale {\n\n  static id = 'timeseries';\n\n  /**\n   * @type {any}\n   */\n  static defaults = TimeScale.defaults;\n\n  /**\n\t * @param {object} props\n\t */\n  constructor(props) {\n    super(props);\n\n    /** @type {object[]} */\n    this._table = [];\n    /** @type {number} */\n    this._minPos = undefined;\n    /** @type {number} */\n    this._tableRange = undefined;\n  }\n\n  /**\n\t * @protected\n\t */\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n\n  /**\n\t * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n\t * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n\t * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n\t * extremity (left + width or top + height). Note that it would be more optimized to directly\n\t * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n\t * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n\t * @param {number[]} timestamps\n\t * @return {object[]}\n\t * @protected\n\t */\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n\n    if (items.length < 2) {\n      // In case there is less that 2 timestamps between min and max, the scale is defined by min and max\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n\n      // only add points that breaks the scale linearity\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n\n  /**\n    * Generates all timestamps defined in the data.\n    * Important: this method can return ticks outside the min and max range, it's the\n    * responsibility of the calling code to clamp values if needed.\n    * @protected\n    */\n  _generate() {\n    const min = this.min;\n    const max = this.max;\n    let timestamps = super.getDataTimestamps();\n    if (!timestamps.includes(min) || !timestamps.length) {\n      timestamps.splice(0, 0, min);\n    }\n    if (!timestamps.includes(max) || timestamps.length === 1) {\n      timestamps.push(max);\n    }\n    return timestamps.sort((a, b) => a - b);\n  }\n\n  /**\n\t * Returns all timestamps\n\t * @return {number[]}\n\t * @private\n\t */\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n\n    if (timestamps.length) {\n      return timestamps;\n    }\n\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      // If combining labels and data (data might not contain all labels),\n      // we need to recheck uniqueness and sort\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n\n    return timestamps;\n  }\n\n  /**\n\t * @param {number} value - Milliseconds since epoch (1 January 1970 00:00:00 UTC)\n\t * @return {number}\n\t */\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n\n  /**\n\t * @param {number} pixel\n\t * @return {number}\n\t */\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\n\nexport default TimeSeriesScale;\n", "export * from './controllers/index.js';\nexport * from './core/index.js';\nexport * from './elements/index.js';\nexport * from './platform/index.js';\nexport * from './plugins/index.js';\nexport * from './scales/index.js';\n\nimport * as controllers from './controllers/index.js';\nimport * as elements from './elements/index.js';\nimport * as plugins from './plugins/index.js';\nimport * as scales from './scales/index.js';\n\nexport {\n  controllers,\n  elements,\n  plugins,\n  scales,\n};\n\nexport const registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n", "import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n", "import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of days to be added.\n *\n * @returns The new date with the days added\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * const result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport function addDays(date, amount) {\n  const _date = toDate(date);\n  if (isNaN(amount)) return constructFrom(date, NaN);\n  if (!amount) {\n    // If 0 days, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n  _date.setDate(_date.getDate() + amount);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default addDays;\n", "import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount) {\n  const _date = toDate(date);\n  if (isNaN(amount)) return constructFrom(date, NaN);\n  if (!amount) {\n    // If 0 months, no-op to avoid changing times in the hour before end of DST\n    return _date;\n  }\n  const dayOfMonth = _date.getDate();\n\n  // The JS Date object supports date math by accepting out-of-bounds values for\n  // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n  // new Date(2020, 13, 1) returns 1 Feb 2021.  This is *almost* the behavior we\n  // want except that dates will wrap around the end of a month, meaning that\n  // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n  // we'll default to the end of the desired month by adding 1 to the desired\n  // month and using a date of 0 to back up one day to the end of the desired\n  // month.\n  const endOfDesiredMonth = constructFrom(date, _date.getTime());\n  endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n  const daysInMonth = endOfDesiredMonth.getDate();\n  if (dayOfMonth >= daysInMonth) {\n    // If we're already at the end of the month, then this is the correct date\n    // and we're done.\n    return endOfDesiredMonth;\n  } else {\n    // Otherwise, we now know that setting the original day-of-month value won't\n    // cause an overflow, so set the desired day-of-month. Note that we can't\n    // just set the date of `endOfDesiredMonth` because that object may have had\n    // its time changed in the unusual case where where a DST transition was on\n    // the last day of the month and its local time was in the hour skipped or\n    // repeated next to a DST transition.  So we use `date` instead which is\n    // guaranteed to still have the original time.\n    _date.setFullYear(\n      endOfDesiredMonth.getFullYear(),\n      endOfDesiredMonth.getMonth(),\n      dayOfMonth,\n    );\n    return _date;\n  }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n", "import { toDate } from \"./toDate.mjs\";\nimport { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of milliseconds to be added.\n *\n * @returns The new date with the milliseconds added\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport function addMilliseconds(date, amount) {\n  const timestamp = +toDate(date);\n  return constructFrom(date, timestamp + amount);\n}\n\n// Fallback for modularized imports:\nexport default addMilliseconds;\n", "import { addMilliseconds } from \"./addMilliseconds.mjs\";\nimport { millisecondsInHour } from \"./constants.mjs\";\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of hours to be added.\n *\n * @returns The new date with the hours added\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * const result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport function addHours(date, amount) {\n  return addMilliseconds(date, amount * millisecondsInHour);\n}\n\n// Fallback for modularized imports:\nexport default addHours;\n", "import { addMilliseconds } from \"./addMilliseconds.mjs\";\nimport { millisecondsInMinute } from \"./constants.mjs\";\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of minutes to be added.\n *\n * @returns The new date with the minutes added\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * const result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport function addMinutes(date, amount) {\n  return addMilliseconds(date, amount * millisecondsInMinute);\n}\n\n// Fallback for modularized imports:\nexport default addMinutes;\n", "import { addMonths } from \"./addMonths.mjs\";\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of quarters to be added.\n *\n * @returns The new date with the quarters added\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * const result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\nexport function addQuarters(date, amount) {\n  const months = amount * 3;\n  return addMonths(date, months);\n}\n\n// Fallback for modularized imports:\nexport default addQuarters;\n", "import { addMilliseconds } from \"./addMilliseconds.mjs\";\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of seconds to be added.\n *\n * @returns The new date with the seconds added\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * const result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport function addSeconds(date, amount) {\n  return addMilliseconds(date, amount * 1000);\n}\n\n// Fallback for modularized imports:\nexport default addSeconds;\n", "import { addDays } from \"./addDays.mjs\";\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of weeks to be added.\n *\n * @returns The new date with the weeks added\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * const result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport function addWeeks(date, amount) {\n  const days = amount * 7;\n  return addDays(date, days);\n}\n\n// Fallback for modularized imports:\nexport default addWeeks;\n", "import { addMonths } from \"./addMonths.mjs\";\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param amount - The amount of years to be added.\n *\n * @returns The new date with the years added\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport function addYears(date, amount) {\n  return addMonths(date, amount * 12);\n}\n\n// Fallback for modularized imports:\nexport default addYears;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The first date to compare\n * @param dateRight - The second date to compare\n *\n * @returns The result of the comparison\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * const result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * const result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * //   Wed Feb 11 1987 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport function compareAsc(dateLeft, dateRight) {\n  const _dateLeft = toDate(dateLeft);\n  const _dateRight = toDate(dateRight);\n\n  const diff = _dateLeft.getTime() - _dateRight.getTime();\n\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}\n\n// Fallback for modularized imports:\nexport default compareAsc;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of calendar months\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport function differenceInCalendarMonths(dateLeft, dateRight) {\n  const _dateLeft = toDate(dateLeft);\n  const _dateRight = toDate(dateRight);\n\n  const yearDiff = _dateLeft.getFullYear() - _dateRight.getFullYear();\n  const monthDiff = _dateLeft.getMonth() - _dateRight.getMonth();\n\n  return yearDiff * 12 + monthDiff;\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarMonths;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n\n * @returns The number of calendar years\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nexport function differenceInCalendarYears(dateLeft, dateRight) {\n  const _dateLeft = toDate(dateLeft);\n  const _dateRight = toDate(dateRight);\n\n  return _dateLeft.getFullYear() - _dateRight.getFullYear();\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarYears;\n", "import { differenceInCalendarDays } from \"./differenceInCalendarDays.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of full days according to the local timezone\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n *   new Date(2011, 6, 3, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n *\n * @example\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 1)\n * )\n * //=> 92\n */\nexport function differenceInDays(dateLeft, dateRight) {\n  const _dateLeft = toDate(dateLeft);\n  const _dateRight = toDate(dateRight);\n\n  const sign = compareLocalAsc(_dateLeft, _dateRight);\n  const difference = Math.abs(differenceInCalendarDays(_dateLeft, _dateRight));\n\n  _dateLeft.setDate(_dateLeft.getDate() - sign * difference);\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  const isLastDayNotFull = Number(\n    compareLocalAsc(_dateLeft, _dateRight) === -sign,\n  );\n  const result = sign * (difference - isLastDayNotFull);\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}\n\n// Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(dateLeft, dateRight) {\n  const diff =\n    dateLeft.getFullYear() - dateRight.getFullYear() ||\n    dateLeft.getMonth() - dateRight.getMonth() ||\n    dateLeft.getDate() - dateRight.getDate() ||\n    dateLeft.getHours() - dateRight.getHours() ||\n    dateLeft.getMinutes() - dateRight.getMinutes() ||\n    dateLeft.getSeconds() - dateRight.getSeconds() ||\n    dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1;\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}\n\n// Fallback for modularized imports:\nexport default differenceInDays;\n", "export function getRoundingMethod(method) {\n  return (number) => {\n    const round = method ? Math[method] : Math.trunc;\n    const result = round(number);\n    // Prevent negative zero\n    return result === 0 ? 0 : result;\n  };\n}\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of milliseconds\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * const result = differenceInMilliseconds(\n *   new Date(2014, 6, 2, 12, 30, 21, 700),\n *   new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport function differenceInMilliseconds(dateLeft, dateRight) {\n  return +toDate(dateLeft) - +toDate(dateRight);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMilliseconds;\n", "import { getRoundingMethod } from \"./_lib/getRoundingMethod.mjs\";\nimport { millisecondsInHour } from \"./constants.mjs\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.mjs\";\n\n/**\n * The {@link differenceInHours} function options.\n */\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of hours\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * const result = differenceInHours(\n *   new Date(2014, 6, 2, 19, 0),\n *   new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport function differenceInHours(dateLeft, dateRight, options) {\n  const diff =\n    differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n  return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInHours;\n", "import { getRoundingMethod } from \"./_lib/getRoundingMethod.mjs\";\nimport { millisecondsInMinute } from \"./constants.mjs\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.mjs\";\n\n/**\n * The {@link differenceInMinutes} function options.\n */\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the signed number of full (rounded towards 0) minutes between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of minutes\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * const result = differenceInMinutes(\n *   new Date(2014, 6, 2, 12, 20, 0),\n *   new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n *\n * @example\n * // How many minutes are between 10:01:59 and 10:00:00\n * const result = differenceInMinutes(\n *   new Date(2000, 0, 1, 10, 0, 0),\n *   new Date(2000, 0, 1, 10, 1, 59)\n * )\n * //=> -1\n */\nexport function differenceInMinutes(dateLeft, dateRight, options) {\n  const diff =\n    differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n  return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInMinutes;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of a day\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * const result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport function endOfDay(date) {\n  const _date = toDate(date);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfDay;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date) {\n  const _date = toDate(date);\n  const month = _date.getMonth();\n  _date.setFullYear(_date.getFullYear(), month + 1, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n", "import { endOfDay } from \"./endOfDay.mjs\";\nimport { endOfMonth } from \"./endOfMonth.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to check\n\n * @returns The date is the last day of a month\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * const result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport function isLastDayOfMonth(date) {\n  const _date = toDate(date);\n  return +endOfDay(_date) === +endOfMonth(_date);\n}\n\n// Fallback for modularized imports:\nexport default isLastDayOfMonth;\n", "import { compareAsc } from \"./compareAsc.mjs\";\nimport { differenceInCalendarMonths } from \"./differenceInCalendarMonths.mjs\";\nimport { isLastDayOfMonth } from \"./isLastDayOfMonth.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates using trunc as a default rounding method.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of full months\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * const result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport function differenceInMonths(dateLeft, dateRight) {\n  const _dateLeft = toDate(dateLeft);\n  const _dateRight = toDate(dateRight);\n\n  const sign = compareAsc(_dateLeft, _dateRight);\n  const difference = Math.abs(\n    differenceInCalendarMonths(_dateLeft, _dateRight),\n  );\n  let result;\n\n  // Check for the difference of less than month\n  if (difference < 1) {\n    result = 0;\n  } else {\n    if (_dateLeft.getMonth() === 1 && _dateLeft.getDate() > 27) {\n      // This will check if the date is end of Feb and assign a higher end of month date\n      // to compare it with Jan\n      _dateLeft.setDate(30);\n    }\n\n    _dateLeft.setMonth(_dateLeft.getMonth() - sign * difference);\n\n    // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n    // If so, result must be decreased by 1 in absolute value\n    let isLastMonthNotFull = compareAsc(_dateLeft, _dateRight) === -sign;\n\n    // Check for cases of one full calendar month\n    if (\n      isLastDayOfMonth(toDate(dateLeft)) &&\n      difference === 1 &&\n      compareAsc(dateLeft, _dateRight) === 1\n    ) {\n      isLastMonthNotFull = false;\n    }\n\n    result = sign * (difference - Number(isLastMonthNotFull));\n  }\n\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}\n\n// Fallback for modularized imports:\nexport default differenceInMonths;\n", "import { getRoundingMethod } from \"./_lib/getRoundingMethod.mjs\";\nimport { differenceInMonths } from \"./differenceInMonths.mjs\";\n\n/**\n * The {@link differenceInQuarters} function options.\n */\n\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of quarters between the given dates.\n *\n * @description\n * Get the number of quarters between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of full quarters\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * const result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport function differenceInQuarters(dateLeft, dateRight, options) {\n  const diff = differenceInMonths(dateLeft, dateRight) / 3;\n  return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInQuarters;\n", "import { getRoundingMethod } from \"./_lib/getRoundingMethod.mjs\";\nimport { differenceInMilliseconds } from \"./differenceInMilliseconds.mjs\";\n\n/**\n * The {@link differenceInSeconds} function options.\n */\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options.\n *\n * @returns The number of seconds\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * const result = differenceInSeconds(\n *   new Date(2014, 6, 2, 12, 30, 20, 0),\n *   new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport function differenceInSeconds(dateLeft, dateRight, options) {\n  const diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n  return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInSeconds;\n", "import { getRoundingMethod } from \"./_lib/getRoundingMethod.mjs\";\nimport { differenceInDays } from \"./differenceInDays.mjs\";\n\n/**\n * The {@link differenceInWeeks} function options.\n */\n\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between two dates. Fractional weeks are\n * truncated towards zero by default.\n *\n * One \"full week\" is the distance between a local time in one day to the same\n * local time 7 days earlier or later. A full week can sometimes be less than\n * or more than 7*24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 7*24-hour periods, use this instead:\n * `Math.trunc(differenceInHours(dateLeft, dateRight)/(7*24))|0`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n * @param options - An object with options\n *\n * @returns The number of full weeks\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * const result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n *\n * @example\n * // How many full weeks are between\n * // 1 March 2020 0:00 and 6 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 8 weeks (54 days),\n * // even if DST starts and the period has\n * // only 54*24-1 hours.\n * const result = differenceInWeeks(\n *   new Date(2020, 5, 1),\n *   new Date(2020, 2, 6)\n * )\n * //=> 8\n */\nexport function differenceInWeeks(dateLeft, dateRight, options) {\n  const diff = differenceInDays(dateLeft, dateRight) / 7;\n  return getRoundingMethod(options?.roundingMethod)(diff);\n}\n\n// Fallback for modularized imports:\nexport default differenceInWeeks;\n", "import { compareAsc } from \"./compareAsc.mjs\";\nimport { differenceInCalendarYears } from \"./differenceInCalendarYears.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateLeft - The later date\n * @param dateRight - The earlier date\n *\n * @returns The number of full years\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * const result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport function differenceInYears(dateLeft, dateRight) {\n  const _dateLeft = toDate(dateLeft);\n  const _dateRight = toDate(dateRight);\n\n  const sign = compareAsc(_dateLeft, _dateRight);\n  const difference = Math.abs(differenceInCalendarYears(_dateLeft, _dateRight));\n\n  // Set both dates to a valid leap year for accurate comparison when dealing\n  // with leap days\n  _dateLeft.setFullYear(1584);\n  _dateRight.setFullYear(1584);\n\n  // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n  // If so, result must be decreased by 1 in absolute value\n  const isLastYearNotFull = compareAsc(_dateLeft, _dateRight) === -sign;\n  const result = sign * (difference - +isLastYearNotFull);\n\n  // Prevent negative zero\n  return result === 0 ? 0 : result;\n}\n\n// Fallback for modularized imports:\nexport default differenceInYears;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a minute\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * const result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport function startOfMinute(date) {\n  const _date = toDate(date);\n  _date.setSeconds(0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMinute;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a quarter\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * const result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport function startOfQuarter(date) {\n  const _date = toDate(date);\n  const currentMonth = _date.getMonth();\n  const month = currentMonth - (currentMonth % 3);\n  _date.setMonth(month, 1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfQuarter;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date) {\n  const _date = toDate(date);\n  _date.setDate(1);\n  _date.setHours(0, 0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of a year\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * const result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport function endOfYear(date) {\n  const _date = toDate(date);\n  const year = _date.getFullYear();\n  _date.setFullYear(year + 1, 0, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfYear;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of an hour\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * const result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport function endOfHour(date) {\n  const _date = toDate(date);\n  _date.setMinutes(59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfHour;\n", "import { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link endOfWeek} function options.\n */\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a week\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * const result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport function endOfWeek(date, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date);\n  const day = _date.getDay();\n  const diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n\n  _date.setDate(_date.getDate() + diff);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfWeek;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of a minute\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * const result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport function endOfMinute(date) {\n  const _date = toDate(date);\n  _date.setSeconds(59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMinute;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of a quarter\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * const result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfQuarter(date) {\n  const _date = toDate(date);\n  const currentMonth = _date.getMonth();\n  const month = currentMonth - (currentMonth % 3) + 3;\n  _date.setMonth(month, 0);\n  _date.setHours(23, 59, 59, 999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfQuarter;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The end of a second\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * const result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport function endOfSecond(date) {\n  const _date = toDate(date);\n  _date.setMilliseconds(999);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfSecond;\n", "import { getDefaultOptions as getInternalDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * @name getDefaultOptions\n * @category Common Helpers\n * @summary Get default options.\n * @pure false\n *\n * @description\n * Returns an object that contains defaults for\n * `options.locale`, `options.weekStartsOn` and `options.firstWeekContainsDate`\n * arguments for all functions.\n *\n * You can change these with [setDefaultOptions](https://date-fns.org/docs/setDefaultOptions).\n *\n * @returns The default options\n *\n * @example\n * const result = getDefaultOptions()\n * //=> {}\n *\n * @example\n * setDefaultOptions({ weekStarsOn: 1, firstWeekContainsDate: 4 })\n * const result = getDefaultOptions()\n * //=> { weekStarsOn: 1, firstWeekContainsDate: 4 }\n */\nexport function getDefaultOptions() {\n  return Object.assign({}, getInternalDefaultOptions());\n}\n\n// Fallback for modularized imports:\nexport default getDefaultOptions;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The given date\n *\n * @returns The day of ISO week\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * const result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport function getISODay(date) {\n  const _date = toDate(date);\n  let day = _date.getDay();\n\n  if (day === 0) {\n    day = 7;\n  }\n\n  return day;\n}\n\n// Fallback for modularized imports:\nexport default getISODay;\n", "import { constructFrom } from \"./constructFrom.mjs\";\n\n/**\n * @name transpose\n * @category Generic Helpers\n * @summary Transpose the date to the given constructor.\n *\n * @description\n * The function transposes the date to the given constructor. It helps you\n * to transpose the date in the system time zone to say `UTCDate` or any other\n * date extension.\n *\n * @typeParam DateInputType - The input `Date` type derived from the passed argument.\n * @typeParam DateOutputType - The output `Date` type derived from the passed constructor.\n *\n * @param fromDate - The date to use values from\n * @param constructor - The date constructor to use\n *\n * @returns Date transposed to the given constructor\n *\n * @example\n * // Create July 10, 2022 00:00 in locale time zone\n * const date = new Date(2022, 6, 10)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0800 (Singapore Standard Time)'\n *\n * @example\n * // Transpose the date to July 10, 2022 00:00 in UTC\n * transpose(date, UTCDate)\n * //=> 'Sun Jul 10 2022 00:00:00 GMT+0000 (Coordinated Universal Time)'\n */\nexport function transpose(fromDate, constructor) {\n  const date =\n    constructor instanceof Date\n      ? constructFrom(constructor, 0)\n      : new constructor(0);\n  date.setFullYear(\n    fromDate.getFullYear(),\n    fromDate.getMonth(),\n    fromDate.getDate(),\n  );\n  date.setHours(\n    fromDate.getHours(),\n    fromDate.getMinutes(),\n    fromDate.getSeconds(),\n    fromDate.getMilliseconds(),\n  );\n  return date;\n}\n\n// Fallback for modularized imports:\nexport default transpose;\n", "import { transpose } from \"../../transpose.mjs\";\nimport { constructFrom } from \"../../constructFrom.mjs\";\n\nconst TIMEZONE_UNIT_PRIORITY = 10;\n\nexport class Setter {\n  subPriority = 0;\n\n  validate(_utcDate, _options) {\n    return true;\n  }\n}\n\nexport class ValueSetter extends Setter {\n  constructor(\n    value,\n\n    validateValue,\n\n    setValue,\n\n    priority,\n    subPriority,\n  ) {\n    super();\n    this.value = value;\n    this.validateValue = validateValue;\n    this.setValue = setValue;\n    this.priority = priority;\n    if (subPriority) {\n      this.subPriority = subPriority;\n    }\n  }\n\n  validate(date, options) {\n    return this.validateValue(date, this.value, options);\n  }\n\n  set(date, flags, options) {\n    return this.setValue(date, flags, this.value, options);\n  }\n}\n\nexport class DateToSystemTimezoneSetter extends Setter {\n  priority = TIMEZONE_UNIT_PRIORITY;\n  subPriority = -1;\n  set(date, flags) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(date, transpose(date, Date));\n  }\n}\n", "import { ValueSetter } from \"./Setter.mjs\";\n\nexport class Parser {\n  run(dateString, token, match, options) {\n    const result = this.parse(dateString, token, match, options);\n    if (!result) {\n      return null;\n    }\n\n    return {\n      setter: new ValueSetter(\n        result.value,\n        this.validate,\n        this.set,\n        this.priority,\n        this.subPriority,\n      ),\n      rest: result.rest,\n    };\n  }\n\n  validate(_utcDate, _value, _options) {\n    return true;\n  }\n}\n", "import { Parser } from \"../Parser.mjs\";\n\nexport class EraParser extends Parser {\n  priority = 140;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // AD, BC\n      case \"G\":\n      case \"GG\":\n      case \"GGG\":\n        return (\n          match.era(dateString, { width: \"abbreviated\" }) ||\n          match.era(dateString, { width: \"narrow\" })\n        );\n\n      // A, B\n      case \"GGGGG\":\n        return match.era(dateString, { width: \"narrow\" });\n      // Anno Domini, Before Christ\n      case \"GGGG\":\n      default:\n        return (\n          match.era(dateString, { width: \"wide\" }) ||\n          match.era(dateString, { width: \"abbreviated\" }) ||\n          match.era(dateString, { width: \"narrow\" })\n        );\n    }\n  }\n\n  set(date, flags, value) {\n    flags.era = value;\n    date.setFullYear(value, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"R\", \"u\", \"t\", \"T\"];\n}\n", "export const numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/, // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n  minute: /^[0-5]?\\d/, // 0 to 59\n  second: /^[0-5]?\\d/, // 0 to 59\n\n  singleDigit: /^\\d/, // 0 to 9\n  twoDigits: /^\\d{1,2}/, // 0 to 99\n  threeDigits: /^\\d{1,3}/, // 0 to 999\n  fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/, // 0 to 9999, -0 to -9999\n};\n\nexport const timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/,\n};\n", "import {\n  millisecondsInHour,\n  millisecondsInMinute,\n  millisecondsInSecond,\n} from \"../../constants.mjs\";\nimport { numericPatterns } from \"./constants.mjs\";\n\nexport function mapValue(parseFnResult, mapFn) {\n  if (!parseFnResult) {\n    return parseFnResult;\n  }\n\n  return {\n    value: mapFn(parseFnResult.value),\n    rest: parseFnResult.rest,\n  };\n}\n\nexport function parseNumericPattern(pattern, dateString) {\n  const matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  return {\n    value: parseInt(matchResult[0], 10),\n    rest: dateString.slice(matchResult[0].length),\n  };\n}\n\nexport function parseTimezonePattern(pattern, dateString) {\n  const matchResult = dateString.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  // Input is 'Z'\n  if (matchResult[0] === \"Z\") {\n    return {\n      value: 0,\n      rest: dateString.slice(1),\n    };\n  }\n\n  const sign = matchResult[1] === \"+\" ? 1 : -1;\n  const hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n  const minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n  const seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n\n  return {\n    value:\n      sign *\n      (hours * millisecondsInHour +\n        minutes * millisecondsInMinute +\n        seconds * millisecondsInSecond),\n    rest: dateString.slice(matchResult[0].length),\n  };\n}\n\nexport function parseAnyDigitsSigned(dateString) {\n  return parseNumericPattern(numericPatterns.anyDigitsSigned, dateString);\n}\n\nexport function parseNDigits(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigit, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigits, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigits, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigits, dateString);\n    default:\n      return parseNumericPattern(new RegExp(\"^\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\n\nexport function parseNDigitsSigned(n, dateString) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigitSigned, dateString);\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigitsSigned, dateString);\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigitsSigned, dateString);\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigitsSigned, dateString);\n    default:\n      return parseNumericPattern(new RegExp(\"^-?\\\\d{1,\" + n + \"}\"), dateString);\n  }\n}\n\nexport function dayPeriodEnumToHours(dayPeriod) {\n  switch (dayPeriod) {\n    case \"morning\":\n      return 4;\n    case \"evening\":\n      return 17;\n    case \"pm\":\n    case \"noon\":\n    case \"afternoon\":\n      return 12;\n    case \"am\":\n    case \"midnight\":\n    case \"night\":\n    default:\n      return 0;\n  }\n}\n\nexport function normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  const isCommonEra = currentYear > 0;\n  // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n  const absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n\n  let result;\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100;\n  } else {\n    const rangeEnd = absCurrentYear + 50;\n    const rangeEndCentury = Math.trunc(rangeEnd / 100) * 100;\n    const isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n  }\n\n  return isCommonEra ? result : 1 - result;\n}\n\nexport function isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n// | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n// |----------|-------|----|-------|-------|-------|\n// | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n// | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n// | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n// | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n// | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\nexport class YearParser extends Parser {\n  priority = 130;\n  incompatibleTokens = [\"Y\", \"R\", \"u\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n\n  parse(dateString, token, match) {\n    const valueCallback = (year) => ({\n      year,\n      isTwoDigitYear: token === \"yy\",\n    });\n\n    switch (token) {\n      case \"y\":\n        return mapValue(parseNDigits(4, dateString), valueCallback);\n      case \"yo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"year\",\n          }),\n          valueCallback,\n        );\n      default:\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }\n\n  validate(_date, value) {\n    return value.isTwoDigitYear || value.year > 0;\n  }\n\n  set(date, flags, value) {\n    const currentYear = date.getFullYear();\n\n    if (value.isTwoDigitYear) {\n      const normalizedTwoDigitYear = normalizeTwoDigitYear(\n        value.year,\n        currentYear,\n      );\n      date.setFullYear(normalizedTwoDigitYear, 0, 1);\n      date.setHours(0, 0, 0, 0);\n      return date;\n    }\n\n    const year =\n      !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n    date.setFullYear(year, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n}\n", "import { getWeekYear } from \"../../../getWeekYear.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, normalizeTwoDigitYear, parseNDigits } from \"../utils.mjs\";\n\n// Local week-numbering year\nexport class LocalWeekYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token, match) {\n    const valueCallback = (year) => ({\n      year,\n      isTwoDigitYear: token === \"YY\",\n    });\n\n    switch (token) {\n      case \"Y\":\n        return mapValue(parseNDigits(4, dateString), valueCallback);\n      case \"Yo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"year\",\n          }),\n          valueCallback,\n        );\n      default:\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n    }\n  }\n\n  validate(_date, value) {\n    return value.isTwoDigitYear || value.year > 0;\n  }\n\n  set(date, flags, value, options) {\n    const currentYear = getWeekYear(date, options);\n\n    if (value.isTwoDigitYear) {\n      const normalizedTwoDigitYear = normalizeTwoDigitYear(\n        value.year,\n        currentYear,\n      );\n      date.setFullYear(\n        normalizedTwoDigitYear,\n        0,\n        options.firstWeekContainsDate,\n      );\n      date.setHours(0, 0, 0, 0);\n      return startOfWeek(date, options);\n    }\n\n    const year =\n      !(\"era\" in flags) || flags.era === 1 ? value.year : 1 - value.year;\n    date.setFullYear(year, 0, options.firstWeekContainsDate);\n    date.setHours(0, 0, 0, 0);\n    return startOfWeek(date, options);\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"Q\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\n// ISO week-numbering year\nexport class ISOWeekYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token) {\n    if (token === \"R\") {\n      return parseNDigitsSigned(4, dateString);\n    }\n\n    return parseNDigitsSigned(token.length, dateString);\n  }\n\n  set(date, _flags, value) {\n    const firstWeekOfYear = constructFrom(date, 0);\n    firstWeekOfYear.setFullYear(value, 0, 4);\n    firstWeekOfYear.setHours(0, 0, 0, 0);\n    return startOfISOWeek(firstWeekOfYear);\n  }\n\n  incompatibleTokens = [\n    \"G\",\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"Q\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { parseNDigitsSigned } from \"../utils.mjs\";\n\nexport class ExtendedYearParser extends Parser {\n  priority = 130;\n\n  parse(dateString, token) {\n    if (token === \"u\") {\n      return parseNDigitsSigned(4, dateString);\n    }\n\n    return parseNDigitsSigned(token.length, dateString);\n  }\n\n  set(date, _flags, value) {\n    date.setFullYear(value, 0, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"G\", \"y\", \"Y\", \"R\", \"w\", \"I\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class QuarterParser extends Parser {\n  priority = 120;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"Q\":\n      case \"QQ\": // 01, 02, 03, 04\n        return parseNDigits(token.length, dateString);\n      // 1st, 2nd, 3rd, 4th\n      case \"Qo\":\n        return match.ordinalNumber(dateString, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"QQQ\":\n        return (\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"QQQQQ\":\n        return match.quarter(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"QQQQ\":\n      default:\n        return (\n          match.quarter(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 4;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth((value - 1) * 3, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { parseNDigits } from \"../utils.mjs\";\n\nexport class StandAloneQuarterParser extends Parser {\n  priority = 120;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // 1, 2, 3, 4\n      case \"q\":\n      case \"qq\": // 01, 02, 03, 04\n        return parseNDigits(token.length, dateString);\n      // 1st, 2nd, 3rd, 4th\n      case \"qo\":\n        return match.ordinalNumber(dateString, { unit: \"quarter\" });\n      // Q1, Q2, Q3, Q4\n      case \"qqq\":\n        return (\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\",\n          })\n        );\n\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case \"qqqqq\":\n        return match.quarter(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // 1st quarter, 2nd quarter, ...\n      case \"qqqq\":\n      default:\n        return (\n          match.quarter(dateString, {\n            width: \"wide\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.quarter(dateString, {\n            width: \"narrow\",\n            context: \"standalone\",\n          })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 4;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth((value - 1) * 3, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MonthParser extends Parser {\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n\n  priority = 110;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => value - 1;\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"M\":\n        return mapValue(\n          parseNumericPattern(numericPatterns.month, dateString),\n          valueCallback,\n        );\n      // 01, 02, ..., 12\n      case \"MM\":\n        return mapValue(parseNDigits(2, dateString), valueCallback);\n      // 1st, 2nd, ..., 12th\n      case \"Mo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"month\",\n          }),\n          valueCallback,\n        );\n      // Jan, Feb, ..., Dec\n      case \"MMM\":\n        return (\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // J, F, ..., D\n      case \"MMMMM\":\n        return match.month(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // January, February, ..., December\n      case \"MMMM\":\n      default:\n        return (\n          match.month(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(value, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class StandAloneMonthParser extends Parser {\n  priority = 110;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => value - 1;\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case \"L\":\n        return mapValue(\n          parseNumericPattern(numericPatterns.month, dateString),\n          valueCallback,\n        );\n      // 01, 02, ..., 12\n      case \"LL\":\n        return mapValue(parseNDigits(2, dateString), valueCallback);\n      // 1st, 2nd, ..., 12th\n      case \"Lo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"month\",\n          }),\n          valueCallback,\n        );\n      // Jan, Feb, ..., Dec\n      case \"LLL\":\n        return (\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // J, F, ..., D\n      case \"LLLLL\":\n        return match.month(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // January, February, ..., December\n      case \"LLLL\":\n      default:\n        return (\n          match.month(dateString, { width: \"wide\", context: \"standalone\" }) ||\n          match.month(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.month(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(value, 1);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { getWeek } from \"./getWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * The {@link setWeek} function options.\n */\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The week of the new date\n * @param options - An object with options\n *\n * @returns The new date with the local week set\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * const result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * const result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport function setWeek(date, week, options) {\n  const _date = toDate(date);\n  const diff = getWeek(_date, options) - week;\n  _date.setDate(_date.getDate() - diff * 7);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setWeek;\n", "import { setWeek } from \"../../../setWeek.mjs\";\nimport { startOfWeek } from \"../../../startOfWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// Local week of year\nexport class LocalWeekParser extends Parser {\n  priority = 100;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"w\":\n        return parseNumericPattern(numericPatterns.week, dateString);\n      case \"wo\":\n        return match.ordinalNumber(dateString, { unit: \"week\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 53;\n  }\n\n  set(date, _flags, value, options) {\n    return startOfWeek(setWeek(date, value, options), options);\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"i\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { getISOWeek } from \"./getISOWeek.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param week - The ISO week of the new date\n *\n * @returns The new date with the ISO week set\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * const result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport function setISOWeek(date, week) {\n  const _date = toDate(date);\n  const diff = getISOWeek(_date) - week;\n  _date.setDate(_date.getDate() - diff * 7);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default setISOWeek;\n", "import { setISOWeek } from \"../../../setISOWeek.mjs\";\nimport { startOfISOWeek } from \"../../../startOfISOWeek.mjs\";\nimport { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\n// ISO week of year\nexport class ISOWeekParser extends Parser {\n  priority = 100;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"I\":\n        return parseNumericPattern(numericPatterns.week, dateString);\n      case \"Io\":\n        return match.ordinalNumber(dateString, { unit: \"week\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 53;\n  }\n\n  set(date, _flags, value) {\n    return startOfISOWeek(setISOWeek(date, value));\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n  isLeapYearIndex,\n  parseNDigits,\n  parseNumericPattern,\n} from \"../utils.mjs\";\n\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst DAYS_IN_MONTH_LEAP_YEAR = [\n  31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,\n];\n\n// Day of the month\nexport class DateParser extends Parser {\n  priority = 90;\n  subPriority = 1;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"d\":\n        return parseNumericPattern(numericPatterns.date, dateString);\n      case \"do\":\n        return match.ordinalNumber(dateString, { unit: \"date\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(date, value) {\n    const year = date.getFullYear();\n    const isLeapYear = isLeapYearIndex(year);\n    const month = date.getMonth();\n    if (isLeapYear) {\n      return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month];\n    } else {\n      return value >= 1 && value <= DAYS_IN_MONTH[month];\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setDate(value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"w\",\n    \"I\",\n    \"D\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport {\n  isLeapYearIndex,\n  parseNDigits,\n  parseNumericPattern,\n} from \"../utils.mjs\";\n\nexport class DayOfYearParser extends Parser {\n  priority = 90;\n\n  subpriority = 1;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"D\":\n      case \"DD\":\n        return parseNumericPattern(numericPatterns.dayOfYear, dateString);\n      case \"Do\":\n        return match.ordinalNumber(dateString, { unit: \"date\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(date, value) {\n    const year = date.getFullYear();\n    const isLeapYear = isLeapYearIndex(year);\n    if (isLeapYear) {\n      return value >= 1 && value <= 366;\n    } else {\n      return value >= 1 && value <= 365;\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setMonth(0, value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"Y\",\n    \"R\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"I\",\n    \"d\",\n    \"E\",\n    \"i\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { addDays } from \"./addDays.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.mjs\";\n\n/**\n * The {@link setDay} function options.\n */\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the week of the new date\n * @param options - An object with options.\n *\n * @returns The new date with the day of the week set\n *\n * @example\n * // Set week day to Sunday, with the default weekStartsOn of Sunday:\n * const result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // Set week day to Sunday, with a weekStartsOn of Monday:\n * const result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setDay(date, day, options) {\n  const defaultOptions = getDefaultOptions();\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  const _date = toDate(date);\n  const currentDay = _date.getDay();\n\n  const remainder = day % 7;\n  const dayIndex = (remainder + 7) % 7;\n\n  const delta = 7 - weekStartsOn;\n  const diff =\n    day < 0 || day > 6\n      ? day - ((currentDay + delta) % 7)\n      : ((dayIndex + delta) % 7) - ((currentDay + delta) % 7);\n  return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setDay;\n", "import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\n\n// Day of week\nexport class DayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      // Tue\n      case \"E\":\n      case \"EE\":\n      case \"EEE\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // T\n      case \"EEEEE\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"EEEEEE\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // Tuesday\n      case \"EEEE\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"D\", \"i\", \"e\", \"c\", \"t\", \"T\"];\n}\n", "import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Local day of week\nexport class LocalDayParser extends Parser {\n  priority = 90;\n  parse(dateString, token, match, options) {\n    const valueCallback = (value) => {\n      // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n      const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n      return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n    };\n\n    switch (token) {\n      // 3\n      case \"e\":\n      case \"ee\": // 03\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      // 3rd\n      case \"eo\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"day\",\n          }),\n          valueCallback,\n        );\n      // Tue\n      case \"eee\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // T\n      case \"eeeee\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      // Tu\n      case \"eeeeee\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n\n      // Tuesday\n      case \"eeee\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"formatting\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"formatting\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"formatting\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"i\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { setDay } from \"../../../setDay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// Stand-alone local day of week\nexport class StandAloneLocalDayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match, options) {\n    const valueCallback = (value) => {\n      // We want here floor instead of trunc, so we get -7 for value 0 instead of 0\n      const wholeWeekDays = Math.floor((value - 1) / 7) * 7;\n      return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays;\n    };\n\n    switch (token) {\n      // 3\n      case \"c\":\n      case \"cc\": // 03\n        return mapValue(parseNDigits(token.length, dateString), valueCallback);\n      // 3rd\n      case \"co\":\n        return mapValue(\n          match.ordinalNumber(dateString, {\n            unit: \"day\",\n          }),\n          valueCallback,\n        );\n      // Tue\n      case \"ccc\":\n        return (\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // T\n      case \"ccccc\":\n        return match.day(dateString, {\n          width: \"narrow\",\n          context: \"standalone\",\n        });\n      // Tu\n      case \"cccccc\":\n        return (\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n\n      // Tuesday\n      case \"cccc\":\n      default:\n        return (\n          match.day(dateString, { width: \"wide\", context: \"standalone\" }) ||\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"standalone\",\n          }) ||\n          match.day(dateString, { width: \"short\", context: \"standalone\" }) ||\n          match.day(dateString, { width: \"narrow\", context: \"standalone\" })\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 6;\n  }\n\n  set(date, _flags, value, options) {\n    date = setDay(date, value, options);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"R\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"I\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"i\",\n    \"e\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { addDays } from \"./addDays.mjs\";\nimport { getISODay } from \"./getISODay.mjs\";\nimport { toDate } from \"./toDate.mjs\";\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The date to be changed\n * @param day - The day of the ISO week of the new date\n *\n * @returns The new date with the day of the ISO week set\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * const result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport function setISODay(date, day) {\n  const _date = toDate(date);\n  const currentDay = getISODay(_date);\n  const diff = day - currentDay;\n  return addDays(_date, diff);\n}\n\n// Fallback for modularized imports:\nexport default setISODay;\n", "import { setISODay } from \"../../../setISODay.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\n// ISO day of week\nexport class ISODayParser extends Parser {\n  priority = 90;\n\n  parse(dateString, token, match) {\n    const valueCallback = (value) => {\n      if (value === 0) {\n        return 7;\n      }\n      return value;\n    };\n\n    switch (token) {\n      // 2\n      case \"i\":\n      case \"ii\": // 02\n        return parseNDigits(token.length, dateString);\n      // 2nd\n      case \"io\":\n        return match.ordinalNumber(dateString, { unit: \"day\" });\n      // Tue\n      case \"iii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"short\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n      // T\n      case \"iiiii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          }),\n          valueCallback,\n        );\n      // Tu\n      case \"iiiiii\":\n        return mapValue(\n          match.day(dateString, {\n            width: \"short\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n      // Tuesday\n      case \"iiii\":\n      default:\n        return mapValue(\n          match.day(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n            match.day(dateString, {\n              width: \"abbreviated\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"short\",\n              context: \"formatting\",\n            }) ||\n            match.day(dateString, {\n              width: \"narrow\",\n              context: \"formatting\",\n            }),\n          valueCallback,\n        );\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 7;\n  }\n\n  set(date, _flags, value) {\n    date = setISODay(date, value);\n    date.setHours(0, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\n    \"y\",\n    \"Y\",\n    \"u\",\n    \"q\",\n    \"Q\",\n    \"M\",\n    \"L\",\n    \"w\",\n    \"d\",\n    \"D\",\n    \"E\",\n    \"e\",\n    \"c\",\n    \"t\",\n    \"T\",\n  ];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"a\":\n      case \"aa\":\n      case \"aaa\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"aaaaa\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"aaaa\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"b\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\nexport class AMPMMidnightParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"b\":\n      case \"bb\":\n      case \"bbb\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"bbbbb\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"bbbb\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"B\", \"H\", \"k\", \"t\", \"T\"];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { dayPeriodEnumToHours } from \"../utils.mjs\";\n\n// in the morning, in the afternoon, in the evening, at night\nexport class DayPeriodParser extends Parser {\n  priority = 80;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"B\":\n      case \"BB\":\n      case \"BBB\":\n        return (\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n\n      case \"BBBBB\":\n        return match.dayPeriod(dateString, {\n          width: \"narrow\",\n          context: \"formatting\",\n        });\n      case \"BBBB\":\n      default:\n        return (\n          match.dayPeriod(dateString, {\n            width: \"wide\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"abbreviated\",\n            context: \"formatting\",\n          }) ||\n          match.dayPeriod(dateString, {\n            width: \"narrow\",\n            context: \"formatting\",\n          })\n        );\n    }\n  }\n\n  set(date, _flags, value) {\n    date.setHours(dayPeriodEnumToHours(value), 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1to12Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"h\":\n        return parseNumericPattern(numericPatterns.hour12h, dateString);\n      case \"ho\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 12;\n  }\n\n  set(date, _flags, value) {\n    const isPM = date.getHours() >= 12;\n    if (isPM && value < 12) {\n      date.setHours(value + 12, 0, 0, 0);\n    } else if (!isPM && value === 12) {\n      date.setHours(0, 0, 0, 0);\n    } else {\n      date.setHours(value, 0, 0, 0);\n    }\n    return date;\n  }\n\n  incompatibleTokens = [\"H\", \"K\", \"k\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0to23Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"H\":\n        return parseNumericPattern(numericPatterns.hour23h, dateString);\n      case \"Ho\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 23;\n  }\n\n  set(date, _flags, value) {\n    date.setHours(value, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"h\", \"K\", \"k\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour0To11Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"K\":\n        return parseNumericPattern(numericPatterns.hour11h, dateString);\n      case \"Ko\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 11;\n  }\n\n  set(date, _flags, value) {\n    const isPM = date.getHours() >= 12;\n    if (isPM && value < 12) {\n      date.setHours(value + 12, 0, 0, 0);\n    } else {\n      date.setHours(value, 0, 0, 0);\n    }\n    return date;\n  }\n\n  incompatibleTokens = [\"h\", \"H\", \"k\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class Hour1To24Parser extends Parser {\n  priority = 70;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"k\":\n        return parseNumericPattern(numericPatterns.hour24h, dateString);\n      case \"ko\":\n        return match.ordinalNumber(dateString, { unit: \"hour\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 1 && value <= 24;\n  }\n\n  set(date, _flags, value) {\n    const hours = value <= 24 ? value % 24 : value;\n    date.setHours(hours, 0, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"a\", \"b\", \"h\", \"H\", \"K\", \"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class MinuteParser extends Parser {\n  priority = 60;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"m\":\n        return parseNumericPattern(numericPatterns.minute, dateString);\n      case \"mo\":\n        return match.ordinalNumber(dateString, { unit: \"minute\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 59;\n  }\n\n  set(date, _flags, value) {\n    date.setMinutes(value, 0, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n", "import { numericPatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseNDigits, parseNumericPattern } from \"../utils.mjs\";\n\nexport class SecondParser extends Parser {\n  priority = 50;\n\n  parse(dateString, token, match) {\n    switch (token) {\n      case \"s\":\n        return parseNumericPattern(numericPatterns.second, dateString);\n      case \"so\":\n        return match.ordinalNumber(dateString, { unit: \"second\" });\n      default:\n        return parseNDigits(token.length, dateString);\n    }\n  }\n\n  validate(_date, value) {\n    return value >= 0 && value <= 59;\n  }\n\n  set(date, _flags, value) {\n    date.setSeconds(value, 0);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n", "import { Parser } from \"../Parser.mjs\";\nimport { mapValue, parseNDigits } from \"../utils.mjs\";\n\nexport class FractionOfSecondParser extends Parser {\n  priority = 30;\n\n  parse(dateString, token) {\n    const valueCallback = (value) =>\n      Math.trunc(value * Math.pow(10, -token.length + 3));\n    return mapValue(parseNDigits(token.length, dateString), valueCallback);\n  }\n\n  set(date, _flags, value) {\n    date.setMilliseconds(value);\n    return date;\n  }\n\n  incompatibleTokens = [\"t\", \"T\"];\n}\n", "import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601. +00:00 is `'Z'`)\nexport class ISOTimezoneWithZParser extends Parser {\n  priority = 10;\n\n  parse(dateString, token) {\n    switch (token) {\n      case \"X\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalMinutes,\n          dateString,\n        );\n      case \"XX\":\n        return parseTimezonePattern(timezonePatterns.basic, dateString);\n      case \"XXXX\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalSeconds,\n          dateString,\n        );\n      case \"XXXXX\":\n        return parseTimezonePattern(\n          timezonePatterns.extendedOptionalSeconds,\n          dateString,\n        );\n      case \"XXX\":\n      default:\n        return parseTimezonePattern(timezonePatterns.extended, dateString);\n    }\n  }\n\n  set(date, flags, value) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(\n      date,\n      date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n    );\n  }\n\n  incompatibleTokens = [\"t\", \"T\", \"x\"];\n}\n", "import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { getTimezoneOffsetInMilliseconds } from \"../../../_lib/getTimezoneOffsetInMilliseconds.mjs\";\nimport { timezonePatterns } from \"../constants.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseTimezonePattern } from \"../utils.mjs\";\n\n// Timezone (ISO-8601)\nexport class ISOTimezoneParser extends Parser {\n  priority = 10;\n\n  parse(dateString, token) {\n    switch (token) {\n      case \"x\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalMinutes,\n          dateString,\n        );\n      case \"xx\":\n        return parseTimezonePattern(timezonePatterns.basic, dateString);\n      case \"xxxx\":\n        return parseTimezonePattern(\n          timezonePatterns.basicOptionalSeconds,\n          dateString,\n        );\n      case \"xxxxx\":\n        return parseTimezonePattern(\n          timezonePatterns.extendedOptionalSeconds,\n          dateString,\n        );\n      case \"xxx\":\n      default:\n        return parseTimezonePattern(timezonePatterns.extended, dateString);\n    }\n  }\n\n  set(date, flags, value) {\n    if (flags.timestampIsSet) return date;\n    return constructFrom(\n      date,\n      date.getTime() - getTimezoneOffsetInMilliseconds(date) - value,\n    );\n  }\n\n  incompatibleTokens = [\"t\", \"T\", \"X\"];\n}\n", "import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampSecondsParser extends Parser {\n  priority = 40;\n\n  parse(dateString) {\n    return parseAnyDigitsSigned(dateString);\n  }\n\n  set(date, _flags, value) {\n    return [constructFrom(date, value * 1000), { timestampIsSet: true }];\n  }\n\n  incompatibleTokens = \"*\";\n}\n", "import { constructFrom } from \"../../../constructFrom.mjs\";\nimport { Parser } from \"../Parser.mjs\";\nimport { parseAnyDigitsSigned } from \"../utils.mjs\";\n\nexport class TimestampMillisecondsParser extends Parser {\n  priority = 20;\n\n  parse(dateString) {\n    return parseAnyDigitsSigned(dateString);\n  }\n\n  set(date, _flags, value) {\n    return [constructFrom(date, value), { timestampIsSet: true }];\n  }\n\n  incompatibleTokens = \"*\";\n}\n", "import { EraParser } from \"./parsers/EraParser.mjs\";\nimport { YearParser } from \"./parsers/YearParser.mjs\";\nimport { LocalWeekYearParser } from \"./parsers/LocalWeekYearParser.mjs\";\nimport { ISOWeekYearParser } from \"./parsers/ISOWeekYearParser.mjs\";\nimport { ExtendedYearParser } from \"./parsers/ExtendedYearParser.mjs\";\nimport { QuarterParser } from \"./parsers/QuarterParser.mjs\";\nimport { StandAloneQuarterParser } from \"./parsers/StandAloneQuarterParser.mjs\";\nimport { MonthParser } from \"./parsers/MonthParser.mjs\";\nimport { StandAloneMonthParser } from \"./parsers/StandAloneMonthParser.mjs\";\nimport { LocalWeekParser } from \"./parsers/LocalWeekParser.mjs\";\nimport { ISOWeekParser } from \"./parsers/ISOWeekParser.mjs\";\nimport { DateParser } from \"./parsers/DateParser.mjs\";\nimport { DayOfYearParser } from \"./parsers/DayOfYearParser.mjs\";\nimport { DayParser } from \"./parsers/DayParser.mjs\";\nimport { LocalDayParser } from \"./parsers/LocalDayParser.mjs\";\nimport { StandAloneLocalDayParser } from \"./parsers/StandAloneLocalDayParser.mjs\";\nimport { ISODayParser } from \"./parsers/ISODayParser.mjs\";\nimport { AMPMParser } from \"./parsers/AMPMParser.mjs\";\nimport { AMPMMidnightParser } from \"./parsers/AMPMMidnightParser.mjs\";\nimport { DayPeriodParser } from \"./parsers/DayPeriodParser.mjs\";\nimport { Hour1to12Parser } from \"./parsers/Hour1to12Parser.mjs\";\nimport { Hour0to23Parser } from \"./parsers/Hour0to23Parser.mjs\";\nimport { Hour0To11Parser } from \"./parsers/Hour0To11Parser.mjs\";\nimport { Hour1To24Parser } from \"./parsers/Hour1To24Parser.mjs\";\nimport { MinuteParser } from \"./parsers/MinuteParser.mjs\";\nimport { SecondParser } from \"./parsers/SecondParser.mjs\";\nimport { FractionOfSecondParser } from \"./parsers/FractionOfSecondParser.mjs\";\nimport { ISOTimezoneWithZParser } from \"./parsers/ISOTimezoneWithZParser.mjs\";\nimport { ISOTimezoneParser } from \"./parsers/ISOTimezoneParser.mjs\";\nimport { TimestampSecondsParser } from \"./parsers/TimestampSecondsParser.mjs\";\nimport { TimestampMillisecondsParser } from \"./parsers/TimestampMillisecondsParser.mjs\";\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- It's ok, we want any here\nexport const parsers = {\n  G: new EraParser(),\n  y: new YearParser(),\n  Y: new LocalWeekYearParser(),\n  R: new ISOWeekYearParser(),\n  u: new ExtendedYearParser(),\n  Q: new QuarterParser(),\n  q: new StandAloneQuarterParser(),\n  M: new MonthParser(),\n  L: new StandAloneMonthParser(),\n  w: new LocalWeekParser(),\n  I: new ISOWeekParser(),\n  d: new DateParser(),\n  D: new DayOfYearParser(),\n  E: new DayParser(),\n  e: new LocalDayParser(),\n  c: new StandAloneLocalDayParser(),\n  i: new ISODayParser(),\n  a: new AMPMParser(),\n  b: new AMPMMidnightParser(),\n  B: new DayPeriodParser(),\n  h: new Hour1to12Parser(),\n  H: new Hour0to23Parser(),\n  K: new Hour0To11Parser(),\n  k: new Hour1To24Parser(),\n  m: new MinuteParser(),\n  s: new SecondParser(),\n  S: new FractionOfSecondParser(),\n  X: new ISOTimezoneWithZParser(),\n  x: new ISOTimezoneParser(),\n  t: new TimestampSecondsParser(),\n  T: new TimestampMillisecondsParser(),\n};\n", "import { constructFrom } from \"./constructFrom.mjs\";\nimport { getDefaultOptions } from \"./getDefaultOptions.mjs\";\nimport { defaultLocale } from \"./_lib/defaultLocale.mjs\";\nimport { toDate } from \"./toDate.mjs\";\nimport { longFormatters } from \"./_lib/format/longFormatters.mjs\";\nimport {\n  isProtectedDayOfYearToken,\n  isProtectedWeekYearToken,\n  warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.mjs\";\nimport { parsers } from \"./parse/_lib/parsers.mjs\";\nimport { DateToSystemTimezoneSetter } from \"./parse/_lib/Setter.mjs\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { longFormatters, parsers };\n\n/**\n * The {@link parse} function options.\n */\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n  /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\n\nconst notWhitespaceRegExp = /\\S/;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > \u26A0\uFE0F Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Not all tokens are compatible. Combinations that don't make sense or could lead to bugs are prohibited\n * and will throw `RangeError`. For example usage of 24-hour format token with AM/PM token will throw an exception:\n *\n * ```javascript\n * parse('23 AM', 'HH a', new Date())\n * //=> RangeError: The format string mustn't contain `HH` and `a` at the same time\n * ```\n *\n * See the compatibility table: https://docs.google.com/spreadsheets/d/e/2PACX-1vQOPU3xUhplll6dyoMmVUXHKl_8CRDs6_ueLmex3SoqwhuolkuN3O05l4rqx5h1dKX8eb46Ul-CCSrq/pubhtml?gid=0&single=true\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 7     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 7     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Sun           | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Sun           |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 01, 02, ..., 11, 00               |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 001, ..., 999                |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Long localized date             |  NA | P       | 05/29/1453                        | 5,8   |\n * |                                 |     | PP      | May 29, 1453                      |       |\n * |                                 |     | PPP     | May 29th, 1453                    |       |\n * |                                 |     | PPPP    | Sunday, May 29th, 1453            | 2,5,8 |\n * | Long localized time             |  NA | p       | 12:00 AM                          | 5,8   |\n * |                                 |     | pp      | 12:00:00 AM                       |       |\n * | Combination of date and time    |  NA | Pp      | 05/29/1453, 12:00 AM              |       |\n * |                                 |     | PPpp    | May 29, 1453, 12:00:00 AM         |       |\n * |                                 |     | PPPpp   | May 29th, 1453 at ...             |       |\n * |                                 |     | PPPPpp  | Sunday, May 29th, 1453 at ...     | 2,5,8 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `referenceDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear](https://date-fns.org/docs/setISOWeekYear)\n *    and [setWeekYear](https://date-fns.org/docs/setWeekYear)).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 6. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 7. `D` and `DD` tokens represent days of the year but they are ofthen confused with days of the month.\n *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 8. `P+` tokens do not have a defined priority since they are merely aliases to other tokens based\n *    on the given locale.\n *\n *    using `en-US` locale: `P` => `MM/dd/yyyy`\n *    using `en-US` locale: `p` => `hh:mm a`\n *    using `pt-BR` locale: `P` => `dd/MM/yyyy`\n *    using `pt-BR` locale: `p` => `HH:mm`\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `referenceDate` which works as a context of parsing.\n *\n * `referenceDate` must be passed for correct work of the function.\n * If you're not sure which `referenceDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `referenceDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `referenceDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param dateStr - The string to parse\n * @param formatStr - The string of tokens\n * @param referenceDate - defines values missing from the parsed dateString\n * @param options - An object with options.\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @returns The parsed date\n *\n * @throws `options.locale` must contain `match` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport function parse(dateStr, formatStr, referenceDate, options) {\n  const defaultOptions = getDefaultOptions();\n  const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n  const firstWeekContainsDate =\n    options?.firstWeekContainsDate ??\n    options?.locale?.options?.firstWeekContainsDate ??\n    defaultOptions.firstWeekContainsDate ??\n    defaultOptions.locale?.options?.firstWeekContainsDate ??\n    1;\n\n  const weekStartsOn =\n    options?.weekStartsOn ??\n    options?.locale?.options?.weekStartsOn ??\n    defaultOptions.weekStartsOn ??\n    defaultOptions.locale?.options?.weekStartsOn ??\n    0;\n\n  if (formatStr === \"\") {\n    if (dateStr === \"\") {\n      return toDate(referenceDate);\n    } else {\n      return constructFrom(referenceDate, NaN);\n    }\n  }\n\n  const subFnOptions = {\n    firstWeekContainsDate,\n    weekStartsOn,\n    locale,\n  };\n\n  // If timezone isn't specified, it will be set to the system timezone\n  const setters = [new DateToSystemTimezoneSetter()];\n\n  const tokens = formatStr\n    .match(longFormattingTokensRegExp)\n    .map((substring) => {\n      const firstCharacter = substring[0];\n      if (firstCharacter in longFormatters) {\n        const longFormatter = longFormatters[firstCharacter];\n        return longFormatter(substring, locale.formatLong);\n      }\n      return substring;\n    })\n    .join(\"\")\n    .match(formattingTokensRegExp);\n\n  const usedTokens = [];\n\n  for (let token of tokens) {\n    if (\n      !options?.useAdditionalWeekYearTokens &&\n      isProtectedWeekYearToken(token)\n    ) {\n      warnOrThrowProtectedError(token, formatStr, dateStr);\n    }\n    if (\n      !options?.useAdditionalDayOfYearTokens &&\n      isProtectedDayOfYearToken(token)\n    ) {\n      warnOrThrowProtectedError(token, formatStr, dateStr);\n    }\n\n    const firstCharacter = token[0];\n    const parser = parsers[firstCharacter];\n    if (parser) {\n      const { incompatibleTokens } = parser;\n      if (Array.isArray(incompatibleTokens)) {\n        const incompatibleToken = usedTokens.find(\n          (usedToken) =>\n            incompatibleTokens.includes(usedToken.token) ||\n            usedToken.token === firstCharacter,\n        );\n        if (incompatibleToken) {\n          throw new RangeError(\n            `The format string mustn't contain \\`${incompatibleToken.fullToken}\\` and \\`${token}\\` at the same time`,\n          );\n        }\n      } else if (parser.incompatibleTokens === \"*\" && usedTokens.length > 0) {\n        throw new RangeError(\n          `The format string mustn't contain \\`${token}\\` and any other token at the same time`,\n        );\n      }\n\n      usedTokens.push({ token: firstCharacter, fullToken: token });\n\n      const parseResult = parser.run(\n        dateStr,\n        token,\n        locale.match,\n        subFnOptions,\n      );\n\n      if (!parseResult) {\n        return constructFrom(referenceDate, NaN);\n      }\n\n      setters.push(parseResult.setter);\n\n      dateStr = parseResult.rest;\n    } else {\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError(\n          \"Format string contains an unescaped latin alphabet character `\" +\n            firstCharacter +\n            \"`\",\n        );\n      }\n\n      // Replace two single quote characters with one single quote character\n      if (token === \"''\") {\n        token = \"'\";\n      } else if (firstCharacter === \"'\") {\n        token = cleanEscapedString(token);\n      }\n\n      // Cut token from string, or, if string doesn't match the token, return Invalid Date\n      if (dateStr.indexOf(token) === 0) {\n        dateStr = dateStr.slice(token.length);\n      } else {\n        return constructFrom(referenceDate, NaN);\n      }\n    }\n  }\n\n  // Check if the remaining input contains something other than whitespace\n  if (dateStr.length > 0 && notWhitespaceRegExp.test(dateStr)) {\n    return constructFrom(referenceDate, NaN);\n  }\n\n  const uniquePrioritySetters = setters\n    .map((setter) => setter.priority)\n    .sort((a, b) => b - a)\n    .filter((priority, index, array) => array.indexOf(priority) === index)\n    .map((priority) =>\n      setters\n        .filter((setter) => setter.priority === priority)\n        .sort((a, b) => b.subPriority - a.subPriority),\n    )\n    .map((setterArray) => setterArray[0]);\n\n  let date = toDate(referenceDate);\n\n  if (isNaN(date.getTime())) {\n    return constructFrom(referenceDate, NaN);\n  }\n\n  const flags = {};\n  for (const setter of uniquePrioritySetters) {\n    if (!setter.validate(date, subFnOptions)) {\n      return constructFrom(referenceDate, NaN);\n    }\n\n    const result = setter.set(date, flags, subFnOptions);\n    // Result is tuple (date, flags)\n    if (Array.isArray(result)) {\n      date = result[0];\n      Object.assign(flags, result[1]);\n      // Result is date\n    } else {\n      date = result;\n    }\n  }\n\n  return constructFrom(referenceDate, date);\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default parse;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of an hour\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * const result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport function startOfHour(date) {\n  const _date = toDate(date);\n  _date.setMinutes(0, 0, 0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfHour;\n", "import { toDate } from \"./toDate.mjs\";\n\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The original date\n *\n * @returns The start of a second\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * const result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport function startOfSecond(date) {\n  const _date = toDate(date);\n  _date.setMilliseconds(0);\n  return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfSecond;\n", "import { millisecondsInHour, millisecondsInMinute } from \"./constants.mjs\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n  const additionalDigits = options?.additionalDigits ?? 2;\n  const dateStrings = splitDateString(argument);\n\n  let date;\n  if (dateStrings.date) {\n    const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n    date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n  }\n\n  if (!date || isNaN(date.getTime())) {\n    return new Date(NaN);\n  }\n\n  const timestamp = date.getTime();\n  let time = 0;\n  let offset;\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n    if (isNaN(time)) {\n      return new Date(NaN);\n    }\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n    if (isNaN(offset)) {\n      return new Date(NaN);\n    }\n  } else {\n    const dirtyDate = new Date(timestamp + time);\n    // JS parsed string assuming it's in UTC timezone\n    // but we need it to be parsed in our timezone\n    // so we use utc values to build date in our timezone.\n    // Year values from 0 to 99 map to the years 1900 to 1999\n    // so set year explicitly with setFullYear.\n    const result = new Date(0);\n    result.setFullYear(\n      dirtyDate.getUTCFullYear(),\n      dirtyDate.getUTCMonth(),\n      dirtyDate.getUTCDate(),\n    );\n    result.setHours(\n      dirtyDate.getUTCHours(),\n      dirtyDate.getUTCMinutes(),\n      dirtyDate.getUTCSeconds(),\n      dirtyDate.getUTCMilliseconds(),\n    );\n    return result;\n  }\n\n  return new Date(timestamp + time + offset);\n}\n\nconst patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n  /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n  /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n  const dateStrings = {};\n  const array = dateString.split(patterns.dateTimeDelimiter);\n  let timeString;\n\n  // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n  if (array.length > 2) {\n    return dateStrings;\n  }\n\n  if (/:/.test(array[0])) {\n    timeString = array[0];\n  } else {\n    dateStrings.date = array[0];\n    timeString = array[1];\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(\n        dateStrings.date.length,\n        dateString.length,\n      );\n    }\n  }\n\n  if (timeString) {\n    const token = patterns.timezone.exec(timeString);\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], \"\");\n      dateStrings.timezone = token[1];\n    } else {\n      dateStrings.time = timeString;\n    }\n  }\n\n  return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  const regex = new RegExp(\n    \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n      (4 + additionalDigits) +\n      \"})|(\\\\d{2}|[+-]\\\\d{\" +\n      (2 + additionalDigits) +\n      \"})$)\",\n  );\n\n  const captures = dateString.match(regex);\n  // Invalid ISO-formatted year\n  if (!captures) return { year: NaN, restDateString: \"\" };\n\n  const year = captures[1] ? parseInt(captures[1]) : null;\n  const century = captures[2] ? parseInt(captures[2]) : null;\n\n  // either year or century is null, not both\n  return {\n    year: century === null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length),\n  };\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return new Date(NaN);\n\n  const captures = dateString.match(dateRegex);\n  // Invalid ISO-formatted string\n  if (!captures) return new Date(NaN);\n\n  const isWeekDate = !!captures[4];\n  const dayOfYear = parseDateUnit(captures[1]);\n  const month = parseDateUnit(captures[2]) - 1;\n  const day = parseDateUnit(captures[3]);\n  const week = parseDateUnit(captures[4]);\n  const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    const date = new Date(0);\n    if (\n      !validateDate(year, month, day) ||\n      !validateDayOfYearDate(year, dayOfYear)\n    ) {\n      return new Date(NaN);\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n    return date;\n  }\n}\n\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n  const captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  const hours = parseTimeUnit(captures[1]);\n  const minutes = parseTimeUnit(captures[2]);\n  const seconds = parseTimeUnit(captures[3]);\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n\n  return (\n    hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n  );\n}\n\nfunction parseTimeUnit(value) {\n  return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === \"Z\") return 0;\n\n  const captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n\n  const sign = captures[1] === \"+\" ? -1 : 1;\n  const hours = parseInt(captures[2]);\n  const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n  if (!validateTimezone(hours, minutes)) {\n    return NaN;\n  }\n\n  return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  const date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  const fourthOfJanuaryDay = date.getUTCDay() || 7;\n  const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n  return (\n    month >= 0 &&\n    month <= 11 &&\n    date >= 1 &&\n    date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n  );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n  return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  if (hours === 24) {\n    return minutes === 0 && seconds === 0;\n  }\n\n  return (\n    seconds >= 0 &&\n    seconds < 60 &&\n    minutes >= 0 &&\n    minutes < 60 &&\n    hours >= 0 &&\n    hours < 25\n  );\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n", "/*!\n * chartjs-adapter-date-fns v3.0.0\n * https://www.chartjs.org\n * (c) 2022 chartjs-adapter-date-fns Contributors\n * Released under the MIT license\n */\nimport { _adapters } from 'chart.js';\nimport { toDate, parse, parseISO, isValid, format, addYears, addQuarters, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addMilliseconds, differenceInYears, differenceInQuarters, differenceInMonths, differenceInWeeks, differenceInDays, differenceInHours, differenceInMinutes, differenceInSeconds, differenceInMilliseconds, startOfYear, startOfQuarter, startOfMonth, startOfWeek, startOfDay, startOfHour, startOfMinute, startOfSecond, endOfYear, endOfQuarter, endOfMonth, endOfWeek, endOfDay, endOfHour, endOfMinute, endOfSecond } from 'date-fns';\n\nconst FORMATS = {\n  datetime: 'MMM d, yyyy, h:mm:ss aaaa',\n  millisecond: 'h:mm:ss.SSS aaaa',\n  second: 'h:mm:ss aaaa',\n  minute: 'h:mm aaaa',\n  hour: 'ha',\n  day: 'MMM d',\n  week: 'PP',\n  month: 'MMM yyyy',\n  quarter: 'qqq - yyyy',\n  year: 'yyyy'\n};\n\n_adapters._date.override({\n  _id: 'date-fns', // DEBUG\n\n  formats: function() {\n    return FORMATS;\n  },\n\n  parse: function(value, fmt) {\n    if (value === null || typeof value === 'undefined') {\n      return null;\n    }\n    const type = typeof value;\n    if (type === 'number' || value instanceof Date) {\n      value = toDate(value);\n    } else if (type === 'string') {\n      if (typeof fmt === 'string') {\n        value = parse(value, fmt, new Date(), this.options);\n      } else {\n        value = parseISO(value, this.options);\n      }\n    }\n    return isValid(value) ? value.getTime() : null;\n  },\n\n  format: function(time, fmt) {\n    return format(time, fmt, this.options);\n  },\n\n  add: function(time, amount, unit) {\n    switch (unit) {\n    case 'millisecond': return addMilliseconds(time, amount);\n    case 'second': return addSeconds(time, amount);\n    case 'minute': return addMinutes(time, amount);\n    case 'hour': return addHours(time, amount);\n    case 'day': return addDays(time, amount);\n    case 'week': return addWeeks(time, amount);\n    case 'month': return addMonths(time, amount);\n    case 'quarter': return addQuarters(time, amount);\n    case 'year': return addYears(time, amount);\n    default: return time;\n    }\n  },\n\n  diff: function(max, min, unit) {\n    switch (unit) {\n    case 'millisecond': return differenceInMilliseconds(max, min);\n    case 'second': return differenceInSeconds(max, min);\n    case 'minute': return differenceInMinutes(max, min);\n    case 'hour': return differenceInHours(max, min);\n    case 'day': return differenceInDays(max, min);\n    case 'week': return differenceInWeeks(max, min);\n    case 'month': return differenceInMonths(max, min);\n    case 'quarter': return differenceInQuarters(max, min);\n    case 'year': return differenceInYears(max, min);\n    default: return 0;\n    }\n  },\n\n  startOf: function(time, unit, weekday) {\n    switch (unit) {\n    case 'second': return startOfSecond(time);\n    case 'minute': return startOfMinute(time);\n    case 'hour': return startOfHour(time);\n    case 'day': return startOfDay(time);\n    case 'week': return startOfWeek(time);\n    case 'isoWeek': return startOfWeek(time, {weekStartsOn: +weekday});\n    case 'month': return startOfMonth(time);\n    case 'quarter': return startOfQuarter(time);\n    case 'year': return startOfYear(time);\n    default: return time;\n    }\n  },\n\n  endOf: function(time, unit) {\n    switch (unit) {\n    case 'second': return endOfSecond(time);\n    case 'minute': return endOfMinute(time);\n    case 'hour': return endOfHour(time);\n    case 'day': return endOfDay(time);\n    case 'week': return endOfWeek(time);\n    case 'month': return endOfMonth(time);\n    case 'quarter': return endOfQuarter(time);\n    case 'year': return endOfYear(time);\n    default: return time;\n    }\n  }\n});\n", "import { Controller } from '@hotwired/stimulus'\nimport { chartInfo, chartConfig } from '../utils/chart'\nimport Chart from 'chart.js/auto'\nimport 'chartjs-adapter-date-fns'\nimport { toZonedTime } from 'date-fns-tz'\n\nexport default class ChartsController extends Controller {\n  static targets = ['chartCanvas', 'chartLoader', 'accordion'];\n  static values = {\n    onConnect: Boolean,\n    chartType: String,\n    recordType: String,\n    timeZone: String,\n    recordId: Number\n  };\n\n  async connect () {\n    if (this.onConnectValue || (!this.onConnectValue && this.accordionTarget.getAttribute('aria-expanded') === 'true')) {\n      this.buildChart()\n    }\n\n    if (!this.onConnectValue && this.accordionTarget) {\n      const bodies = document.querySelectorAll('[id^=\"accordion-collapse-body-\"]')\n\n      bodies.forEach((body) => {\n        body.classList.add('hidden')\n        const idNumber = body.id.replace('accordion-collapse-body-', '')\n        const heading = document.getElementById(`accordion-collapse-heading-${idNumber}`)\n\n        if (heading) {\n          heading.setAttribute('aria-expanded', 'false')\n        }\n      })\n    }\n  }\n\n  async buildChart () {\n    if (this.chartCanvasTarget.getAttribute('data-chart-created') !== 'true') {\n      try {\n        const data = await this.fetchApiData()\n        if (typeof (data) === 'string') throw data\n\n        const labels = data.labels.map(time => toZonedTime(new Date(time), this.timeZoneValue))\n        const datasets = Object.keys(data.values).map((key) =>\n          this.buildDataset(key, data.values[key])\n        )\n\n        const ctx = this.chartCanvasTarget.getContext('2d')\n        this.chart = new Chart(ctx, {\n          type: 'line',\n          data: {\n            labels: labels,\n            datasets\n          },\n          options: chartConfig(this.recordTypeValue, this.chartTypeValue, this.timeZoneValue)\n        })\n\n        this.chart.resize(800, 250)\n        this.chartLoaderTarget.classList.add('hidden')\n        this.chartCanvasTarget.setAttribute('data-chart-created', true)\n        return this.chart\n      } catch (error) {\n        this.updateChartLoader()\n        console.error('Error building chart:', error)\n      }\n    }\n  }\n\n  async fetchApiData () {\n    try {\n      const url =\n        this.recordTypeValue === 'location'\n          ? `/api/v1/charts/locations/${this.recordIdValue}/${this.chartTypeValue}`\n          : `/api/v1/charts/assets/${this.recordIdValue}`\n\n      const response = await fetch(url)\n      const data = await response.json()\n      return data.success === false ? data.message : data[this.chartTypeValue]\n    } catch (error) {\n      console.error('Error fetching data:', error)\n    } finally {\n      this.updateChartLoader()\n    }\n  }\n\n  buildDataset (type, data) {\n    const { name, colorHex } = chartInfo(\n      this.recordTypeValue,\n      this.chartTypeValue,\n      type\n    )\n\n    return {\n      label: name,\n      data,\n      borderColor: colorHex,\n      backgroundColor: `${colorHex}80`\n    }\n  }\n\n  updateChartLoader () {\n    this.chartLoaderTarget.classList.remove('hidden')\n    this.chartLoaderTarget.innerHTML =\n      \"<p class='text-center'>Error while building the chart</p>\"\n  }\n\n  disconnect () {\n    if (this.chart) {\n      this.chart.destroy()\n      this.chart = null\n    }\n    this.chartCanvasTarget.setAttribute('data-chart-created', false)\n    this.chartLoaderTarget.classList.remove('hidden')\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nconst VALID_EXTENSIONS = ['pdf', 'csv', 'xlsx', 'xls']\nconst ERROR_MESSAGES = {\n  count: 'Can not select multiple files',\n  extension: 'File type must be pdf, csv, xls, or xlsx'\n}\n\nexport default class DragDropController extends Controller {\n  static targets = [\n    'fileField',\n    'fileDetailContainer',\n    'errorContainer'\n  ]\n\n  allowDrop (e) {\n    e.preventDefault()\n  }\n\n  browseFile () {\n    this.errorContainerTarget.innerText = ''\n    this.fileFieldTarget.click()\n  }\n\n  handleFileDropped (e) {\n    e.preventDefault()\n    this.errorContainerTarget.innerText = ''\n\n    const files = e.dataTransfer.files\n    if (this._checkFile(files)) {\n      this.fileFieldTarget.files = this._addFileList(files)\n      this.fileDetailContainerTarget.innerText = this.fileFieldTarget.files[0].name\n    }\n  }\n\n  _checkFile (files) {\n    return (this._checkFilesCount(files) && this._checkFileExtension(files))\n  }\n\n  _checkFilesCount (files) {\n    const check = files.length === 1\n    if (!check) { this.errorContainerTarget.innerText = ERROR_MESSAGES.count }\n\n    return check\n  }\n\n  _checkFileExtension (files) {\n    const check = VALID_EXTENSIONS.includes(files[0].name.split('.').pop())\n    if (!check) { this.errorContainerTarget.innerText = ERROR_MESSAGES.extension }\n\n    return check\n  }\n\n  _addFileList (files) {\n    const obj = new DataTransfer()\n    for (let i = 0, len = files.length; i < len; i++) {\n      obj.items.add(files[i])\n    }\n\n    return obj.files\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class ReportController extends Controller {\n  static targets = [\n    'fileContainer',\n    'fileDetailContainer',\n    'urlContainer',\n    'fileField',\n    'selectField',\n    'bulkUploadField'\n  ]\n\n  static values = {\n    isBulkUpload: Boolean\n  }\n\n  connect () {\n    if (!this.isBulkUploadValue) {\n      this.fileDetailContainerTarget.innerText = ''\n      this.updateAttachmentField()\n    }\n  }\n\n  updateAttachmentField () {\n    if (this.selectFieldTarget.value === 'url') {\n      this.fileContainerTarget.classList.add('hidden')\n      this.urlContainerTarget.classList.remove('hidden')\n    } else if (this.selectFieldTarget.value === 'upload') {\n      this.urlContainerTarget.classList.add('hidden')\n      this.fileContainerTarget.classList.remove('hidden')\n    } else {\n      this.urlContainerTarget.classList.add('hidden')\n      this.fileContainerTarget.classList.add('hidden')\n    }\n  }\n\n  handleFileUpload ({ target }) {\n    if (this.isBulkUploadValue) {\n      this.fileDetailContainerTarget.innerText = `${target.files.length} files uploaded`\n    } else {\n      this.fileDetailContainerTarget.innerText = target.files[0].name\n    }\n  }\n\n  openFolderBrowseWindow () {\n    this.bulkUploadFieldTarget.click()\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nconst SHELTER_SETUP_FORM_DATA_KEY = 'shelterSetupFormData'\n\nexport default class ShelterSetupController extends Controller {\n  static values = { clearForm: Boolean };\n  static targets = ['modal', 'modalCloseButton', 'modalHeader'];\n\n  connect () {\n    this.changeHandler = (e) => this.handleInputChange(e)\n    this.element.querySelectorAll(\"input[type='text']\").forEach((input) => {\n      input.addEventListener('change', this.changeHandler)\n    })\n    this.setFormData()\n  }\n\n  disconnect () {\n    this.element.querySelectorAll(\"input[type='text']\").forEach((input) => {\n      input.removeEventListener('change', this.changeHandler)\n    })\n  }\n\n  setFormData () {\n    const formData =\n      JSON.parse(window.sessionStorage.getItem(SHELTER_SETUP_FORM_DATA_KEY)) || {}\n    this.element\n      .querySelectorAll(\"input[type='text']\")\n      .forEach((input) => {\n        if (input.value === null || input.value === '') {\n          input.value = formData[input.id] || ''\n        }\n      })\n  }\n\n  handleFormSubmit () {\n    window.sessionStorage.removeItem(SHELTER_SETUP_FORM_DATA_KEY)\n  }\n\n  handleClearForm () {\n    if (\n      window.confirm(\n        'Are you sure you want to proceed? All data will be lost!!!'\n      )\n    ) {\n      window.sessionStorage.removeItem(SHELTER_SETUP_FORM_DATA_KEY)\n      this.setFormData()\n    }\n  }\n\n  handleInputChange (e) {\n    const { id, value } = e.currentTarget\n    this.updateSessionStorage(id, value)\n  }\n\n  updateSessionStorage (id, value) {\n    const formData =\n      JSON.parse(window.sessionStorage.getItem(SHELTER_SETUP_FORM_DATA_KEY)) || {}\n    formData[id] = value\n    window.sessionStorage.setItem(\n      SHELTER_SETUP_FORM_DATA_KEY,\n      JSON.stringify(formData)\n    )\n  }\n}\n", "import { embedDashboard } from '@superset-ui/embedded-sdk'\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class SupersetDashboardController extends Controller {\n  static targets = ['supersetDashboard'];\n\n  connect () {\n    fetch('api/v1/superset/maintenance_dashboard')\n      .then((response) => response.json())\n      .then((data) => {\n        const { guestToken, dashboardId, domain } = data\n\n        embedDashboard({\n          id: dashboardId,\n          supersetDomain: domain,\n          mountPoint: this.supersetDashboardTarget,\n          fetchGuestToken: () => guestToken,\n          dashboardUiConfig: { hideTitle: true }\n        })\n\n        const iframe = this.supersetDashboardTarget.querySelector('iframe')\n\n        if (iframe) {\n          iframe.style.width = '100%'\n          iframe.style.height = '138rem'\n        }\n      })\n      .catch((error) => {\n        console.error('Error embeding dashboard:', error)\n      })\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class TabsController extends Controller {\n  static targets = ['tab', 'tabContent'];\n\n  connect () {\n    const currentTab = new URLSearchParams(window.location.search).get('current_tab')\n\n    if (currentTab === null) {\n      this.activateTab(this.tabTargets[0])\n    } else {\n      const matchingTab = this.tabTargets.find(tab => tab.dataset.pathName === currentTab)\n      if (matchingTab) {\n        this.activateTab(matchingTab)\n      }\n    }\n  }\n\n  changeTab (event) {\n    const tabId = event.target.dataset.tab\n    const selectedTab = this.tabTargets.find(tab => tab.dataset.tab === tabId)\n    this.updateUrlParams(selectedTab.dataset.pathName)\n    this.activateTab(selectedTab)\n  }\n\n  activateTab (tab) {\n    const tabContentId = tab.dataset.tab\n\n    this.tabContentTargets.forEach(tabContent => tabContent.classList.add('hidden'))\n    document.getElementById(tabContentId).classList.remove('hidden')\n\n    this.tabTargets.forEach(btn => btn.classList.remove('active'))\n    tab.classList.add('active')\n  }\n\n  updateUrlParams (currentTabName) {\n    const urlSearchParams = new URLSearchParams(window.location.search)\n    urlSearchParams.set('current_tab', currentTabName)\n    window.history.replaceState({}, '', `${window.location.pathname}?${urlSearchParams}`)\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class FlashController extends Controller {\n  closeFlash (e) {\n    this.element?.remove()\n  }\n\n  renderFlash (messageContent, type) {\n    if (messageContent === '' || type === '') return\n\n    const flashContainer = document.getElementById('flash-messages-container')\n\n    if (flashContainer) {\n      const flashElement = `\n        <div data-controller=\"flash\" class=\"alert alert-${type}\" role=\"alert\">\n          <div class=\"alert-header\">\n            <div class=\"flex items-center mr-2\">\n              <h6 class=\"alert-header-title\">${type.charAt(0).toUpperCase() + type.slice(1)}</h6>\n            </div>\n            <button type=\"button\" data-action=\"click->flash#closeFlash\">\n              <svg xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" class=\"close-icon\" viewBox=\"0 0 20 20\">\n                <path fill-rule=\"evenodd\" d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\" clip-rule=\"evenodd\"></path>\n              </svg>\n            </button>\n          </div>\n          <div class=\"alert-description\">\n            ${messageContent}\n          </div>\n        </div>`\n      flashContainer.innerHTML = flashElement\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport FlashController from './flash_controller'\n\nexport default class VconnAssemblySetupController extends Controller {\n  static values = { currentStep: Number }\n  static targets = [\n    'form',\n    'stepContent',\n    'stepLoader',\n    'prevButton',\n    'nextButton'\n  ];\n\n  showLoader (e) {\n    this.stepContentTarget.classList.add('hidden')\n    this.stepLoaderTarget.classList.remove('hidden')\n    this.prevButtonTarget.disabled = true\n    this.nextButtonTarget.disabled = true\n    this.nextButtonTarget.classList.add('!text-gray-400')\n\n    if (e && e.currentTarget) {\n      const form = e.currentTarget.closest('form')\n      form.requestSubmit()\n    }\n  }\n\n  submitForm (e) {\n    if (!this.hasFormTarget) {\n      return\n    }\n\n    const isNext = e.currentTarget.dataset.isNext === 'true'\n    if (isNext) {\n      if (this.formTarget.checkValidity()) {\n        const formAction = this.formTarget.action\n        const url = new URL(formAction)\n        const params = new URLSearchParams(url.search)\n        const currentStepKey = params.get('current_step_key')\n\n        if (currentStepKey === 'verify_vconn_data') {\n          FlashController.prototype.renderFlash('VConn Kiosk setup in progress, it may take some time.', 'success')\n        }\n\n        this.showLoader()\n        this.formTarget.requestSubmit()\n      } else {\n        this.formTarget.reportValidity()\n      }\n    } else {\n      this.formTarget.noValidate = true\n      const extraInput = document.createElement('input')\n      extraInput.type = 'hidden'\n      extraInput.name = 'nav_back'\n      extraInput.value = true\n      this.formTarget.appendChild(extraInput)\n\n      this.showLoader()\n      this.formTarget.requestSubmit()\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport FlashController from './flash_controller'\n\nexport default class ReplacementController extends Controller {\n  static targets = ['form', 'content', 'overlay']\n\n  showLoader () {\n    if (this.formTarget.checkValidity()) {\n      FlashController.prototype.renderFlash('Syncing Data, it may take some time.', 'success')\n      this.overlayTarget.classList.remove('hidden')\n      this.contentTarget.classList.add('hidden')\n    }\n  }\n}\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "import { Html5Qrcode } from 'html5-qrcode'\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class QrScannerController extends Controller {\n  connect () {\n    this.modalTarget = document.getElementById('qrScannerModal')\n    if (!this.modalTarget) throw new Error('QR scanner modal target not found')\n\n    this.modalCloseButtonTarget = this.modalTarget.querySelector('.modal-close-icon')\n    this.modalHeaderTarget = this.modalTarget.querySelector('.modal-header')\n\n    if (!this.modalCloseButtonTarget) throw new Error('Modal close button target not found')\n    if (!this.modalHeaderTarget) throw new Error('Modal header target not found')\n\n    this.clickHandler = () => this.closeQrScanner()\n    this.modalCloseButtonTarget.addEventListener('click', this.clickHandler)\n  }\n\n  disconnect () {\n    if (this.modalCloseButtonTarget && this.clickHandler) {\n      this.modalCloseButtonTarget.removeEventListener('click', this.clickHandler)\n    }\n  }\n\n  handleFiledFocusOut (e) {\n    const { id } = e.currentTarget\n    let value = e.target.value\n\n    if (value && id.includes('gocodes')) {\n      value = value.trim()?.split('/').pop().replace(/-/g, '')\n    } else if (value && id.includes('mac_address')) {\n      value = value.replace(/[-:]/g, '').toUpperCase().match(/.{1,2}/g).join(':')\n    }\n\n    e.target.value = value\n  }\n\n  closeQrScanner () {\n    this.qrCodeReader?.stop()\n    this.stream?.getTracks().forEach((track) => {\n      this.modalTarget.classList.add('hidden')\n      track.stop()\n    })\n  }\n\n  qrboxFunction (viewfinderWidth, viewfinderHeight) {\n    const minEdgePercentage = 0.9\n    const minEdgeSize = Math.min(viewfinderWidth, viewfinderHeight)\n    const qrboxSize = Math.floor(minEdgeSize * minEdgePercentage)\n    return {\n      width: qrboxSize,\n      height: qrboxSize\n    }\n  }\n\n  handleOpenQrCodeScanner (event) {\n    const { inputId, inputTitle, attributeName } = event.params\n    this.modalHeaderTarget.innerHTML = `Scan ${inputTitle} of ${attributeName}`\n\n    navigator.mediaDevices\n      .getUserMedia({ video: true })\n      .then((stream) => {\n        this.modalTarget.classList.remove('hidden')\n        this.stream = stream\n        this.qrCodeReader = new Html5Qrcode('qrScannerModalCameraReader')\n        this.qrCodeReader.start(\n          { facingMode: 'environment' },\n          {\n            fps: 10,\n            qrbox: this.qrboxFunction\n          },\n          (qrCodeMessage) => {\n            const inputField = document.getElementById(inputId)\n            inputField.value = inputField.id.includes('gocodes')\n              ? qrCodeMessage.split('/').pop()\n              : qrCodeMessage\n\n            // eslint-disable-next-line\n            inputField.dispatchEvent(new Event('change'))\n            this.modalCloseButtonTarget.click()\n            this.closeQrScanner()\n          }\n        )\n      })\n      .catch(() => {\n        this.modalTarget.classList.add('hidden')\n        window.alert(\n          `To use this feature, please grant permission to access your camera.\\n\\n\n          1. Click on the camera icon in the browser's address bar.\n          2. In the dropdown, select 'Site settings' or 'Permissions'.\n          3. Set 'Camera' permissions to 'Allow' or 'Ask'.\n          4. Reload the page to apply the changes.`\n        )\n      })\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class DriveIntegrationController extends Controller {\n  static targets = ['content', 'overlay']\n\n  showLoader () {\n    this.overlayTarget.classList.remove('hidden')\n    this.contentTarget.classList.add('hidden')\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport TomSelect from 'tom-select'\n\nexport default class WorkordersController extends Controller {\n  static targets = ['selector', 'usersHolder', 'editUsers', 'emailField', 'emailInput', 'emailError'];\n\n  connect () {\n    if (this.hasSelectorTarget) {\n      this.initializeTomSelect(this.selectorTarget)\n    }\n  }\n\n  disconnect () {\n    this.tomSelect.destroy()\n    this.tomSelect = null\n  }\n\n  initializeTomSelect (selectorElement) {\n    this.tomSelect = new TomSelect(selectorElement, {\n      create: false,\n      sortField: {\n        field: 'text',\n        direction: 'asc'\n      },\n      searchField: ['text'],\n      plugins: ['remove_button'],\n      placeholder: 'Select activity types'\n    })\n  }\n\n  toggleEditStatusForm (event) {\n    const statusType = event.currentTarget.dataset.statusType\n    const form = this.element.querySelector(`#workorder-${statusType}`)\n    const holder = this.element.querySelector(`#edit-${statusType}`)\n\n    if (form && holder) {\n      event.preventDefault()\n      form.classList.toggle('hidden')\n      holder.classList.toggle('hidden')\n    }\n  }\n\n  toggleOptionsField (event) {\n    const checkbox = event.target\n\n    if (checkbox.name === 'should_create_bulk_workorders') {\n      const bulkField = this.element.querySelector('[data-bulk-field]')\n\n      if (checkbox.checked) {\n        bulkField.classList.remove('hidden')\n        this.selectorTarget.setAttribute('required', 'required')\n      } else {\n        bulkField.classList.add('hidden')\n        this.selectorTarget.removeAttribute('required')\n      }\n    }\n\n    if (checkbox.name === 'should_send_completion_email') {\n      const emailField = this.element.querySelector('[data-email-field]')\n\n      if (checkbox.checked) {\n        emailField.classList.remove('hidden')\n        this.emailInputTarget.setAttribute('required', 'required')\n      } else {\n        emailField.classList.add('hidden')\n        this.emailInputTarget.removeAttribute('required')\n        this.clearError()\n      }\n    }\n  }\n\n  validateEmails () {\n    const value = this.emailInputTarget.value\n    const emails = value.split(',').map(email => email.trim()).filter(email => email.length > 0)\n\n    const invalidEmails = emails.filter(email => !this.isValidEmail(email))\n\n    if (invalidEmails.length > 0) {\n      this.showError(`Invalid email(s): ${invalidEmails.join(', ')}`)\n    } else {\n      this.clearError()\n    }\n  }\n\n  isValidEmail (email) {\n    return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)\n  }\n\n  showError (message) {\n    this.emailErrorTarget.textContent = message\n    this.emailErrorTarget.classList.remove('hidden')\n  }\n\n  clearError () {\n    this.emailErrorTarget.textContent = ''\n    this.emailErrorTarget.classList.add('hidden')\n  }\n\n  toggleEditUsersForm (event) {\n    event.preventDefault()\n    this.usersHolderTarget.classList.toggle('hidden')\n    this.editUsersTarget.classList.toggle('hidden')\n  }\n}\n", null, null, null, null, null, null, "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n  return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};", "var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}", "var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases \u2013 research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};", "export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}", "export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}", "export default function format(str) {\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  return [].concat(args).reduce(function (p, c) {\n    return p.replace(/%s/, c);\n  }, str);\n}", "import format from \"./format.js\";\nimport { modifierPhases } from \"../enums.js\";\nvar INVALID_MODIFIER_ERROR = 'Popper: modifier \"%s\" provided an invalid %s property, expected %s but got %s';\nvar MISSING_DEPENDENCY_ERROR = 'Popper: modifier \"%s\" requires \"%s\", but \"%s\" modifier is not available';\nvar VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];\nexport default function validateModifiers(modifiers) {\n  modifiers.forEach(function (modifier) {\n    [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`\n    .filter(function (value, index, self) {\n      return self.indexOf(value) === index;\n    }).forEach(function (key) {\n      switch (key) {\n        case 'name':\n          if (typeof modifier.name !== 'string') {\n            console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '\"name\"', '\"string\"', \"\\\"\" + String(modifier.name) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'enabled':\n          if (typeof modifier.enabled !== 'boolean') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"enabled\"', '\"boolean\"', \"\\\"\" + String(modifier.enabled) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'phase':\n          if (modifierPhases.indexOf(modifier.phase) < 0) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"phase\"', \"either \" + modifierPhases.join(', '), \"\\\"\" + String(modifier.phase) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'fn':\n          if (typeof modifier.fn !== 'function') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"fn\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'effect':\n          if (modifier.effect != null && typeof modifier.effect !== 'function') {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"effect\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'requires':\n          if (modifier.requires != null && !Array.isArray(modifier.requires)) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"requires\"', '\"array\"', \"\\\"\" + String(modifier.requires) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'requiresIfExists':\n          if (!Array.isArray(modifier.requiresIfExists)) {\n            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '\"requiresIfExists\"', '\"array\"', \"\\\"\" + String(modifier.requiresIfExists) + \"\\\"\"));\n          }\n\n          break;\n\n        case 'options':\n        case 'data':\n          break;\n\n        default:\n          console.error(\"PopperJS: an invalid property has been provided to the \\\"\" + modifier.name + \"\\\" modifier, valid properties are \" + VALID_PROPERTIES.map(function (s) {\n            return \"\\\"\" + s + \"\\\"\";\n          }).join(', ') + \"; but \\\"\" + key + \"\\\" was provided.\");\n      }\n\n      modifier.requires && modifier.requires.forEach(function (requirement) {\n        if (modifiers.find(function (mod) {\n          return mod.name === requirement;\n        }) == null) {\n          console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));\n        }\n      });\n    });\n  });\n}", "export default function uniqueBy(arr, fn) {\n  var identifiers = new Set();\n  return arr.filter(function (item) {\n    var identifier = fn(item);\n\n    if (!identifiers.has(identifier)) {\n      identifiers.add(identifier);\n      return true;\n    }\n  });\n}", "export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update \u2013 it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update \u2013 it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", null, null, null, null, null, null, null, null, null, null, null, "import { Controller } from '@hotwired/stimulus'\nimport { Carousel } from 'flowbite'\n\nexport default class CarouselController extends Controller {\n  static values = {\n    containerId: String,\n    itemsCount: Number\n  };\n\n  connect () {\n    this.createCarousel()\n  }\n\n  createCarousel () {\n    const carouselElement = document.getElementById(this.containerIdValue)\n    const instanceOptions = {\n      id: this.containerIdValue,\n      override: true\n    }\n    const items = this.createItems()\n    const options = this.createOptions()\n    this.carousel = new Carousel(carouselElement, items, options, instanceOptions)\n  }\n\n  prevSlide () {\n    this.carousel.prev()\n  }\n\n  nextSlide () {\n    this.carousel.next()\n  }\n\n  createItems () {\n    const items = []\n\n    for (let i = 0; i < this.itemsCountValue; i++) {\n      items.push({\n        position: i,\n        el: document.getElementById(`carousel-item-${i}`)\n      })\n    }\n    return items\n  }\n\n  createOptions () {\n    const options = {\n      defaultPosition: 0,\n      interval: 5000,\n\n      indicators: {\n        activeClasses: 'bg-primary',\n        inactiveClasses:\n          'bg-primary-200 hover:bg-primary',\n        items: this.createIndicatorItems()\n      }\n    }\n    return options\n  }\n\n  createIndicatorItems () {\n    const items = []\n\n    for (let i = 0; i < this.itemsCountValue; i++) {\n      items.push({\n        position: i,\n        el: document.getElementById(`carousel-indicator-${i}`)\n      })\n    }\n    return items\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class FieldQaController extends Controller {\n  static targets = ['modal', 'form', 'loader', 'content', 'scanner']\n\n  connect () {\n    this.timer = setTimeout(() => {\n      if (this.hasFormTarget) {\n        this.formTarget.requestSubmit()\n      }\n    }, 1000)\n  }\n\n  disconnect () {\n    if (this.timer) {\n      clearTimeout(this.timer)\n      this.timer = null\n    }\n  }\n\n  open () {\n    this.modalTarget.classList.remove('hidden')\n  }\n\n  close () {\n    this.modalTarget.classList.add('hidden')\n  }\n\n  showSpinLoader (e) {\n    if (this.hasScannerTarget && !this.scannerTarget.checkValidity()) {\n      return\n    }\n\n    if (this.hasLoaderTarget) {\n      this.loaderTarget.classList.remove('hidden')\n      this.contentTarget.classList.add('hidden')\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class ShelterTestSuiteController extends Controller {\n  static targets = ['loader', 'content'];\n\n  showSpinLoader (e) {\n    if (this.hasLoaderTarget) {\n      this.loaderTarget.classList.remove('hidden')\n      this.contentTarget.classList.add('hidden')\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class RedirectQrSupportController extends Controller {\n  static targets = ['modal', 'form', 'transit'];\n\n  connect () {\n    console.log('connect')\n    this.interval = setInterval(() => {\n      this.hasTransitTarget && this.transitTarget.reload()\n    }, 5000)\n  }\n\n  open (e) {\n    this.hasModalTarget && this.modalTarget.classList.remove('hidden')\n  }\n\n  submitForm (e) {\n    if (this.formTarget.checkValidity()) {\n      this.formTarget.requestSubmit()\n      this.close()\n    } else {\n      this.formTarget.reportValidity()\n    }\n  }\n\n  close (e) {\n    this.hasModalTarget && this.modalTarget.classList.add('hidden')\n  }\n\n  disconnect () {\n    clearInterval(this.interval)\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nclass SearchFormController extends Controller {\n  connect () { }\n\n  submit (e) {\n    e.preventDefault()\n    const params = new URLSearchParams(window.location.search)\n    this.element.querySelectorAll('input').forEach(el => {\n      params.set(el.name, el.value)\n    })\n    window.location.search = params\n  }\n}\n\nclass ToggleController extends Controller {\n  toggleControl (event) {\n    event.target.closest('form').requestSubmit()\n  }\n}\n\nclass TextSearchController extends Controller {\n  connect () {\n    this.init()\n  }\n\n  init () {\n    const params = new URLSearchParams(window.location.search)\n    if (params.has(this.element.name)) { this.element.value = params.get(this.element.name) }\n  }\n}\n\nexport { ToggleController, TextSearchController, SearchFormController }\n", "import { Controller } from '@hotwired/stimulus'\nimport TomSelect from 'tom-select'\n\nexport default class ToplightControlsController extends Controller {\n  async connect () {\n    this.initializeTomSelects()\n    this.setupInputStyles('location_id-ts-control')\n    this.setupInputStyles('toplight_color-ts-control')\n\n    const element = document.getElementByClass('ts-control')\n    if (element) {\n      if (window.innerWidth < 1024) {\n        element.classList.add('h-[4rem]', '!text-4xl')\n      }\n    }\n  }\n\n  initializeTomSelects () {\n    document.querySelectorAll('select').forEach((elem) => {\n      this.tomSelect = new TomSelect(`#${elem.id}`, {\n        create: false,\n        sortField: {\n          field: 'text',\n          direction: 'asc'\n        },\n        render: {\n          option: this.renderHandler('option'),\n          item: this.renderHandler('item'),\n          no_results: this.renderHandler('no_results', 'No Results Found')\n        }\n      })\n    })\n  }\n\n  renderHandler (type, noResultsText = null) {\n    return data => {\n      const div = document.createElement('div')\n      div.className = 'flex align-items-center'\n\n      const span = document.createElement('span')\n      span.className = 'flex-grow-1 text-4xl lg:text-base p-4 lg:p-1'\n      span.innerText = type === 'no_results' ? noResultsText : data.text\n\n      div.append(span)\n      return div\n    }\n  }\n\n  setupInputStyles (inputId) {\n    const element = document.getElementById(inputId)\n    if (element) {\n      if (window.innerWidth < 1024) {\n        element.classList.add('h-[4rem]', '!text-4xl')\n      }\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class DropdownController extends Controller {\n  toggleSubmenu (event) {\n    const submenuId = event.currentTarget.id.replace('btndropdown', 'submenu')\n    const submenu = document.getElementById(submenuId)\n    const icon = event.currentTarget.querySelector('svg')\n\n    if (submenu) {\n      submenu.classList.toggle('hidden')\n      icon.classList.toggle('rotate-0')\n      icon.classList.toggle('-rotate-90')\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class PduControlsController extends Controller {\n  static targets = ['content', 'loader']\n\n  showLoader (event) {\n    const confirmMessage = event.target.dataset.confirmMessage || 'Are you sure you want to Reboot/ Turn On PDU outlet?'\n    const userConfirmed = window.confirm(confirmMessage)\n\n    if (userConfirmed) {\n      console.log('Showing Loader')\n      this.loaderTarget.classList.remove('hidden')\n      this.contentTarget.classList.add('hidden')\n    } else {\n      event.preventDefault()\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n  static targets = ['input']\n  static values = {\n    currentUser: String\n  };\n\n  clearInput (event) {\n    if (this.hasInputTarget) {\n      this.inputTarget.value = ''\n      console.log('Input cleared successfully!')\n    }\n  }\n\n  editComment (event) {\n    const commentOwnerId = event.currentTarget.dataset.commentOwner\n\n    if (this.hasCurrentUserValue) {\n      if (commentOwnerId !== this.currentUserValue) {\n        event.preventDefault()\n      }\n    }\n  }\n\n  toggleDropdown (event) {\n    const dropdownId = event.currentTarget.id.replace('button-', 'dropdown-')\n    const dropdown = document.getElementById(dropdownId)\n    const icon = event.currentTarget.querySelector('svg')\n\n    if (dropdown && icon) {\n      dropdown.classList.toggle('hidden')\n      icon.classList.toggle('-rotate-90')\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport TomSelect from 'tom-select'\n\nexport default class HeartbeatsController extends Controller {\n  async connect () {\n    this.initializeTomSelects()\n  }\n\n  initializeTomSelects () {\n    document.querySelectorAll('select').forEach((elem) => {\n      this.tomSelect = new TomSelect(`#${elem.id}`, {\n        create: false,\n        sortField: {\n          field: 'text',\n          direction: 'asc'\n        }\n      })\n    })\n  }\n}\n", "/* global FileReader */\nimport { Controller } from '@hotwired/stimulus'\nimport FlashController from './flash_controller'\n\nexport default class WorkorderUploadsController extends Controller {\n  static targets = ['input', 'form', 'previewContainer', 'submit', 'overlay', 'content']\n\n  connect () {\n    this.files = []\n  }\n\n  handleFiles (event) {\n    const remaining = this.formTarget.dataset.workorderUploadsRemainingValue\n    const remainingValue = parseInt(remaining, 10)\n\n    const selectedFiles = Array.from(event.target.files)\n    const allowedCount = remainingValue - this.files.length\n    if (allowedCount <= 0) {\n      alert(`You can only upload ${remainingValue} image(s) total.`)\n      this.inputTarget.value = null\n      return\n    }\n\n    const filesToAdd = selectedFiles.slice(0, allowedCount)\n    this.files = [...this.files, ...filesToAdd]\n    this.renderPreviews()\n    this.inputTarget.value = null\n  }\n\n  renderPreviews () {\n    this.previewContainerTarget.innerHTML = ''\n    const closeIconMarkup = document.getElementById('close-icon-template').innerHTML.trim()\n\n    this.files.forEach((file, index) => {\n      const reader = new FileReader()\n      reader.onload = (e) => {\n        const wrapper = document.createElement('div')\n        wrapper.classList.add('relative', 'inline-block', 'mr-2', 'mb-2')\n\n        wrapper.innerHTML = `\n          <img src=\"${e.target.result}\" class=\"w-32 h-32 object-cover rounded shadow\" />\n          <button type=\"button\" data-index=\"${index}\"\n            class=\"m-1 absolute top-0 right-0 bg-error-100 text-error-500 rounded-sm w-5 h-5 flex items-center justify-center shadow-md hover:bg-error-200 transition\"\n            data-action=\"click->workorder-uploads#removeFile\"\n            aria-label=\"Remove image\">\n            ${closeIconMarkup}\n          </button>\n        `\n        this.previewContainerTarget.appendChild(wrapper)\n      }\n      reader.readAsDataURL(file)\n    })\n  }\n\n  removeFile (event) {\n    const index = parseInt(event.target.dataset.index)\n    this.files.splice(index, 1)\n    this.renderPreviews()\n  }\n\n  confirmAndSubmit (event) {\n    event.preventDefault()\n    if (confirm('Are you sure you want to delete this image?')) {\n      this.showLoader()\n      event.target.closest('form').requestSubmit()\n    }\n  }\n\n  submitForm (event) {\n    event.preventDefault()\n\n    if (this.files.length === 0) {\n      alert('Please select at least one image before submitting.')\n      return\n    }\n\n    const dataTransfer = new DataTransfer()\n    this.files.forEach(file => dataTransfer.items.add(file))\n    this.inputTarget.files = dataTransfer.files\n\n    const form = this.formTarget\n    if (form.checkValidity()) {\n      FlashController.prototype.renderFlash('Uploading images, it may take some time.', 'success')\n      this.showLoader()\n      form.requestSubmit()\n    }\n  }\n\n  showLoader () {\n    if (this.hasOverlayTarget && this.hasContentTarget) {\n      this.overlayTarget.classList.remove('hidden')\n      this.contentTarget.classList.add('hidden')\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\n\nexport default class WorkordersCarouselController extends Controller {\n  static values = {\n    currentIndex: Number,\n    itemsCount: Number,\n    autoplayInterval: Number\n  }\n\n  connect () {\n    this.showSlide(this.currentIndexValue)\n    this.startAutoplay()\n  }\n\n  disconnect () {\n    this.stopAutoplay()\n  }\n\n  showSlide (index) {\n    for (let i = 0; i < this.itemsCountValue; i++) {\n      const el = document.getElementById(`carousel-item-${i}`)\n      if (el) el.classList.add('hidden')\n\n      const dot = document.getElementById(`carousel-indicator-${i}`)\n      if (dot) {\n        dot.classList.remove('bg-primary-300')\n        dot.classList.add('bg-gray-300')\n      }\n    }\n\n    const currentEl = document.getElementById(`carousel-item-${index}`)\n    if (currentEl) currentEl.classList.remove('hidden')\n\n    const activeDot = document.getElementById(`carousel-indicator-${index}`)\n    if (activeDot) {\n      activeDot.classList.remove('bg-gray-300')\n      activeDot.classList.add('bg-primary-300')\n    }\n  }\n\n  nextSlide () {\n    this.currentIndexValue = (this.currentIndexValue + 1) % this.itemsCountValue\n    this.showSlide(this.currentIndexValue)\n  }\n\n  prevSlide () {\n    this.currentIndexValue =\n      (this.currentIndexValue - 1 + this.itemsCountValue) % this.itemsCountValue\n    this.showSlide(this.currentIndexValue)\n  }\n\n  goToSlide (event) {\n    const index = parseInt(event.params.goToSlide) % this.itemsCountValue\n    if (!isNaN(index)) {\n      this.currentIndexValue = index\n      this.showSlide(index)\n    }\n  }\n\n  startAutoplay () {\n    this.stopAutoplay()\n    this.timer = setInterval(() => {\n      this.nextSlide()\n    }, this.autoplayIntervalValue || 5000)\n  }\n\n  stopAutoplay () {\n    if (this.timer) clearInterval(this.timer)\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport FlashController from './flash_controller'\n\nexport default class PairShelterController extends Controller {\n  static values = { currentStep: Number }\n  static targets = [\n    'form',\n    'stepContent',\n    'stepLoader',\n    'prevButton',\n    'nextButton',\n    'resetButton',\n    'skipGdsCck'\n  ];\n\n  showLoader (e) {\n    this.stepContentTarget.classList.add('hidden')\n    this.stepLoaderTarget.classList.remove('hidden')\n    this.prevButtonTarget.disabled = true\n    this.nextButtonTarget.disabled = true\n    this.nextButtonTarget.classList.add('!text-gray-400')\n\n    if (e && e.currentTarget) {\n      const form = e.currentTarget.closest('form')\n      form.requestSubmit()\n    }\n  }\n\n  addFormAction (action) {\n    const extraInput = document.createElement('input')\n    extraInput.type = 'hidden'\n    extraInput.name = action\n    extraInput.value = true\n    this.formTarget.appendChild(extraInput)\n  }\n\n  skipGds (e) {\n    const chk = e.target\n    if (chk.checked) {\n      const els = document.querySelectorAll('input[name^=\"pair_gds[\"]')\n      els.forEach(e => {\n        e.disabled = true\n        e.required = false\n      })\n      this.gdsSkipped = true\n    } else {\n      const els = document.querySelectorAll('input[name^=\"pair_gds[\"]')\n      els.forEach(e => {\n        e.disabled = false\n        e.required = true\n      })\n      this.gdsSkipped = false\n    }\n  }\n\n  toggleShelter2Field (e) {\n    const chk = e.target\n    const shelter2Field = document.getElementById('shelter_2_field')\n    const shelter2Input = document.querySelector('input[name=\"combo_shelters[shelter_2_gocodes_label]\"]')\n\n    if (chk.checked) {\n      if (shelter2Field) {\n        shelter2Field.style.display = 'none'\n      }\n      if (shelter2Input) {\n        shelter2Input.disabled = true\n        shelter2Input.required = false\n        shelter2Input.value = ''\n      }\n    } else {\n      if (shelter2Field) {\n        shelter2Field.style.display = 'block'\n      }\n      if (shelter2Input) {\n        shelter2Input.disabled = false\n        shelter2Input.required = false\n      }\n    }\n  }\n\n  submitForm (e) {\n    if (!this.hasFormTarget) {\n      return\n    }\n\n    const navAction = e.currentTarget.dataset.navAction\n    console.log(navAction)\n\n    if (navAction === 'next') {\n      if (this.formTarget.checkValidity()) {\n        const formAction = this.formTarget.action\n        const url = new URL(formAction)\n        const params = new URLSearchParams(url.search)\n        const currentStepKey = params.get('current_step_key')\n\n        if (currentStepKey === 'pair') {\n          FlashController.prototype.renderFlash('Shelter pairing processing.', 'success')\n        }\n\n        if (this.gdsSkipped) {\n          if (!confirm('GDS data entry is required for all shelters except Urban Panels. Are you sure you wish to continue?')) { return }\n        }\n\n        this.showLoader()\n        this.formTarget.requestSubmit()\n      } else {\n        this.formTarget.reportValidity()\n      }\n    } else if (navAction === 'reset') {\n      this.formTarget.noValidate = true\n      this.addFormAction('reset')\n      this.showLoader()\n      this.formTarget.requestSubmit()\n    } else {\n      this.formTarget.noValidate = true\n      this.addFormAction('nav_back')\n\n      this.showLoader()\n      this.formTarget.requestSubmit()\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport flatpickr from 'flatpickr'\n\nexport default class extends Controller {\n  static targets = ['picker', 'start', 'end', 'form', 'menu', 'timezone', 'button']\n\n  connect () {\n    this.boundHandleClickOutside = this.handleClickOutside.bind(this)\n  }\n\n  disconnect () {\n    document.removeEventListener('click', this.boundHandleClickOutside)\n    if (this.fp) {\n      this.fp.destroy()\n      this.fp = null\n    }\n  }\n\n  toggleDropdown (event) {\n    event.stopPropagation()\n\n    if (this.menuTarget.classList.contains('hidden')) {\n      this.menuTarget.classList.remove('hidden')\n      setTimeout(() => {\n        document.addEventListener('click', this.boundHandleClickOutside)\n      }, 0)\n    } else {\n      this.closeDropdown()\n    }\n  }\n\n  closeDropdown () {\n    this.menuTarget.classList.add('hidden')\n    document.removeEventListener('click', this.boundHandleClickOutside)\n  }\n\n  handleClickOutside (event) {\n    if (\n      !this.element.contains(event.target) &&\n      (!this.fp || !this.fp.calendarContainer.contains(event.target))\n    ) {\n      this.closeDropdown()\n      this.closeDatepicker()\n    }\n  }\n\n  openDatepicker (event) {\n    event.preventDefault()\n    event.stopPropagation()\n\n    if (this.fp) {\n      this.fp.open()\n      return\n    }\n\n    this.fp = flatpickr(this.pickerTarget, {\n      mode: 'range',\n      dateFormat: 'Y-m-d',\n      disable: [(date) => date > new Date()],\n      defaultDate: [this.startTarget.value, this.endTarget.value],\n      monthSelectorType: 'static',\n      appendTo: this.element,\n      onReady: (selectedDates, dateStr, instance) => {\n        this.fp = instance\n        this.positionCalendar(instance)\n      },\n      onClose: (selectedDates) => {\n        this.handleClose(selectedDates)\n      }\n    })\n\n    this.fp.open()\n  }\n\n  positionCalendar (instance) {\n    window.requestAnimationFrame(() => {\n      instance.calendarContainer.classList.add('!opacity-0')\n      instance.calendarContainer.classList.remove('translate-x-[-125px]')\n\n      const menuRect = this.menuTarget.getBoundingClientRect()\n      const calendarRect = instance.calendarContainer.getBoundingClientRect()\n\n      const horizontalOffset = menuRect.right + 10 - calendarRect.left\n      const verticalOffset = menuRect.top - calendarRect.top\n\n      instance.calendarContainer.style.transform = `translate(${horizontalOffset}px, ${verticalOffset}px)`\n      instance.calendarContainer.style.transformOrigin = 'top left'\n\n      setTimeout(() => {\n        instance.calendarContainer.classList.remove('!opacity-0')\n      }, 300)\n    })\n  }\n\n  closeDatepicker () {\n    if (this.fp && this.fp.isOpen) {\n      this.fp.close()\n    }\n  }\n\n  handleClose (selectedDates) {\n    if (selectedDates.length === 2) {\n      const startDate = selectedDates[0].toISOString().split('T')[0]\n      const endDate = selectedDates[1].toISOString().split('T')[0]\n\n      this.startTarget.value = startDate\n      this.endTarget.value = endDate\n      this.timezoneTarget.value = window.localTimezone\n\n      this.closeDropdown()\n      this.formTarget.requestSubmit()\n    }\n  }\n}\n", "import { Controller } from '@hotwired/stimulus'\nimport TomSelect from 'tom-select'\n\nexport default class ShelterSelectorController extends Controller {\n  static targets = ['selector']\n\n  connect () {\n    if (this.hasSelectorTarget) {\n      this.initializeTomSelect(this.selectorTarget)\n    }\n  }\n\n  disconnect () {\n    if (this.tomSelect) {\n      this.tomSelect.destroy()\n      this.tomSelect = null\n    }\n  }\n\n  initializeTomSelect (selectorElement) {\n    this.tomSelect = new TomSelect(selectorElement, {\n      create: false,\n      sortField: {\n        field: 'text',\n        direction: 'asc'\n      },\n      searchField: ['text'],\n      placeholder: 'Select a shelter',\n      onChange: (value) => {\n        this.changeShelter(value)\n      },\n      onInitialize: () => {\n        this.applyWidth()\n      }\n    })\n\n    setTimeout(() => this.applyWidth(), 10)\n  }\n\n  applyWidth () {\n    const tsWrapper = this.element.querySelector('.ts-wrapper')\n    const tsControl = this.element.querySelector('.ts-control')\n\n    if (tsWrapper) {\n      tsWrapper.style.width = '100%'\n      tsWrapper.style.minWidth = '250px'\n    }\n\n    if (tsControl) {\n      tsControl.style.width = '100%'\n      tsControl.style.minWidth = '250px'\n    }\n  }\n\n  changeShelter (shelterId) {\n    const form = this.element.querySelector('form')\n    if (form && shelterId) {\n      form.submit()\n    }\n  }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from './application'\n\nimport ChartsController from './charts_controller'\nimport DragDropController from './drag_drop_controller'\nimport ReportsController from './reports_controller'\nimport ShelterSetupController from './shelter_setup_controller'\nimport SupersetDashboardController from './superset_dashboard_controller'\nimport TabsController from './tabs_controller'\nimport VconnAssemblySetupController from './vconn_assembly_setup_controller'\nimport ReplacementController from './replacement_controller'\nimport QrScannerController from './qr_scanner_controller'\nimport FlashController from './flash_controller'\nimport DriveIntegrationController from './drive_integration_controller'\nimport WorkordersController from './workorders_controller'\nimport CarouselController from './carousel_controller'\nimport FieldQaController from './field_qa_controller'\nimport ShelterTestSuiteController from './shelter_test_suite_controller'\nimport RedirectQrSupportController from './redirect_qr_support_controller'\nimport { ToggleController, TextSearchController, SearchFormController } from './toggle_controller'\nimport ToplightControlsController from './toplight_controls_controller'\nimport DropdownController from './dropdown_controller'\nimport PduControlsController from './pdu_controls_controller'\nimport WorkorderCommentsController from './workorder_comments_controller'\nimport HeartbeatsController from './heartbeats_controller'\nimport WorkorderUploadsController from './workorder_uploads_controller'\nimport WorkordersCarouselController from './workorders_carousel_controller'\nimport PairShelterController from './pair_shelter_controller'\nimport CustomDatepickerController from './custom_datepicker_controller'\nimport ShelterSelectorController from './shelter_selector_controller'\n\napplication.register('charts', ChartsController)\napplication.register('drag-drop', DragDropController)\napplication.register('reports', ReportsController)\napplication.register('shelter-setup', ShelterSetupController)\napplication.register('superset-dashboard', SupersetDashboardController)\napplication.register('tabs', TabsController)\napplication.register('vconn-assembly-setup', VconnAssemblySetupController)\napplication.register('replacement', ReplacementController)\napplication.register('qr-scanner', QrScannerController)\napplication.register('flash', FlashController)\napplication.register('drive-integration', DriveIntegrationController)\napplication.register('workorders', WorkordersController)\napplication.register('carousel', CarouselController)\napplication.register('field-qa', FieldQaController)\napplication.register('shelter-test-suite', ShelterTestSuiteController)\napplication.register('redirect-qr-support', RedirectQrSupportController)\napplication.register('toggle', ToggleController)\napplication.register('text-search', TextSearchController)\napplication.register('search-form', SearchFormController)\napplication.register('toplight-controls', ToplightControlsController)\napplication.register('dropdown', DropdownController)\napplication.register('pdu-controls', PduControlsController)\napplication.register('workorder-comments', WorkorderCommentsController)\napplication.register('heartbeats', HeartbeatsController)\napplication.register('workorder-uploads', WorkorderUploadsController)\napplication.register('workorder-carousel', WorkordersCarouselController)\napplication.register('pair-shelter', PairShelterController)\napplication.register('custom-datepicker', CustomDatepickerController)\napplication.register('shelter-selector', ShelterSelectorController)\n", "/*\nTurbo 7.1.0\nCopyright \u00A9 2021 Basecamp, LLC\n */\n(function () {\n    if (window.Reflect === undefined || window.customElements === undefined ||\n        window.customElements.polyfillWrapFlushCallback) {\n        return;\n    }\n    const BuiltInHTMLElement = HTMLElement;\n    const wrapperForTheName = {\n        'HTMLElement': function HTMLElement() {\n            return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n        }\n    };\n    window.HTMLElement =\n        wrapperForTheName['HTMLElement'];\n    HTMLElement.prototype = BuiltInHTMLElement.prototype;\n    HTMLElement.prototype.constructor = HTMLElement;\n    Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function(submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap;\nfunction findSubmitterFromClickTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    const candidate = element ? element.closest(\"input, button\") : null;\n    return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n    const submitter = findSubmitterFromClickTarget(event.target);\n    if (submitter && submitter.form) {\n        submittersByForm.set(submitter.form, submitter);\n    }\n}\n(function () {\n    if (\"submitter\" in Event.prototype)\n        return;\n    let prototype;\n    if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n        prototype = window.SubmitEvent.prototype;\n    }\n    else if (\"SubmitEvent\" in window) {\n        return;\n    }\n    else {\n        prototype = window.Event.prototype;\n    }\n    addEventListener(\"click\", clickCaptured, true);\n    Object.defineProperty(prototype, \"submitter\", {\n        get() {\n            if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n                return submittersByForm.get(this.target);\n            }\n        }\n    });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n    FrameLoadingStyle[\"eager\"] = \"eager\";\n    FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    static get observedAttributes() {\n        return [\"disabled\", \"loading\", \"src\"];\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        const { src } = this;\n        this.src = null;\n        this.src = src;\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\n        }\n        else if (name == \"src\") {\n            this.delegate.sourceURLChanged();\n        }\n        else {\n            this.delegate.disabledChanged();\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\");\n    }\n    set src(value) {\n        if (value) {\n            this.setAttribute(\"src\", value);\n        }\n        else {\n            this.removeAttribute(\"src\");\n        }\n    }\n    get loading() {\n        return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n    }\n    set loading(value) {\n        if (value) {\n            this.setAttribute(\"loading\", value);\n        }\n        else {\n            this.removeAttribute(\"loading\");\n        }\n    }\n    get disabled() {\n        return this.hasAttribute(\"disabled\");\n    }\n    set disabled(value) {\n        if (value) {\n            this.setAttribute(\"disabled\", \"\");\n        }\n        else {\n            this.removeAttribute(\"disabled\");\n        }\n    }\n    get autoscroll() {\n        return this.hasAttribute(\"autoscroll\");\n    }\n    set autoscroll(value) {\n        if (value) {\n            this.setAttribute(\"autoscroll\", \"\");\n        }\n        else {\n            this.removeAttribute(\"autoscroll\");\n        }\n    }\n    get complete() {\n        return !this.delegate.isLoading;\n    }\n    get isActive() {\n        return this.ownerDocument === document && !this.isPreview;\n    }\n    get isPreview() {\n        var _a, _b;\n        return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n    }\n}\nfunction frameLoadingStyleFromString(style) {\n    switch (style.toLowerCase()) {\n        case \"lazy\": return FrameLoadingStyle.lazy;\n        default: return FrameLoadingStyle.eager;\n    }\n}\n\nfunction expandURL(locatable) {\n    return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n    let anchorMatch;\n    if (url.hash) {\n        return url.hash.slice(1);\n    }\n    else if (anchorMatch = url.href.match(/#(.*)$/)) {\n        return anchorMatch[1];\n    }\n}\nfunction getAction(form, submitter) {\n    const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n    return expandURL(action);\n}\nfunction getExtension(url) {\n    return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n    return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n    const prefix = getPrefix(url);\n    return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n    return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n    const anchor = getAnchor(url);\n    return anchor != null\n        ? url.href.slice(0, -(anchor.length + 1))\n        : url.href;\n}\nfunction toCacheKey(url) {\n    return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n    return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n    return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n    return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n    return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n    return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n    constructor(response) {\n        this.response = response;\n    }\n    get succeeded() {\n        return this.response.ok;\n    }\n    get failed() {\n        return !this.succeeded;\n    }\n    get clientError() {\n        return this.statusCode >= 400 && this.statusCode <= 499;\n    }\n    get serverError() {\n        return this.statusCode >= 500 && this.statusCode <= 599;\n    }\n    get redirected() {\n        return this.response.redirected;\n    }\n    get location() {\n        return expandURL(this.response.url);\n    }\n    get isHTML() {\n        return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n    }\n    get statusCode() {\n        return this.response.status;\n    }\n    get contentType() {\n        return this.header(\"Content-Type\");\n    }\n    get responseText() {\n        return this.response.clone().text();\n    }\n    get responseHTML() {\n        if (this.isHTML) {\n            return this.response.clone().text();\n        }\n        else {\n            return Promise.resolve(undefined);\n        }\n    }\n    header(name) {\n        return this.response.headers.get(name);\n    }\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, { cancelable, bubbles: true, detail });\n    if (target && target.isConnected) {\n        target.dispatchEvent(event);\n    }\n    else {\n        document.documentElement.dispatchEvent(event);\n    }\n    return event;\n}\nfunction nextAnimationFrame() {\n    return new Promise(resolve => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n    return new Promise(resolve => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n    return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n    return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n    const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map(line => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n        const value = values[i] == undefined ? \"\" : values[i];\n        return result + string + value;\n    }, \"\");\n}\nfunction uuid() {\n    return Array.apply(null, { length: 36 }).map((_, i) => {\n        if (i == 8 || i == 13 || i == 18 || i == 23) {\n            return \"-\";\n        }\n        else if (i == 14) {\n            return \"4\";\n        }\n        else if (i == 19) {\n            return (Math.floor(Math.random() * 4) + 8).toString(16);\n        }\n        else {\n            return Math.floor(Math.random() * 15).toString(16);\n        }\n    }).join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n    for (const value of elements.map(element => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n        if (typeof value == \"string\")\n            return value;\n    }\n    return null;\n}\nfunction markAsBusy(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.setAttribute(\"busy\", \"\");\n        }\n        element.setAttribute(\"aria-busy\", \"true\");\n    }\n}\nfunction clearBusyState(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.removeAttribute(\"busy\");\n        }\n        element.removeAttribute(\"aria-busy\");\n    }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n    FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n    FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n    FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n    FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n    FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n    switch (method.toLowerCase()) {\n        case \"get\": return FetchMethod.get;\n        case \"post\": return FetchMethod.post;\n        case \"put\": return FetchMethod.put;\n        case \"patch\": return FetchMethod.patch;\n        case \"delete\": return FetchMethod.delete;\n    }\n}\nclass FetchRequest {\n    constructor(delegate, method, location, body = new URLSearchParams, target = null) {\n        this.abortController = new AbortController;\n        this.resolveRequestPromise = (value) => { };\n        this.delegate = delegate;\n        this.method = method;\n        this.headers = this.defaultHeaders;\n        this.body = body;\n        this.url = location;\n        this.target = target;\n    }\n    get location() {\n        return this.url;\n    }\n    get params() {\n        return this.url.searchParams;\n    }\n    get entries() {\n        return this.body ? Array.from(this.body.entries()) : [];\n    }\n    cancel() {\n        this.abortController.abort();\n    }\n    async perform() {\n        var _a, _b;\n        const { fetchOptions } = this;\n        (_b = (_a = this.delegate).prepareHeadersForRequest) === null || _b === void 0 ? void 0 : _b.call(_a, this.headers, this);\n        await this.allowRequestToBeIntercepted(fetchOptions);\n        try {\n            this.delegate.requestStarted(this);\n            const response = await fetch(this.url.href, fetchOptions);\n            return await this.receive(response);\n        }\n        catch (error) {\n            if (error.name !== 'AbortError') {\n                this.delegate.requestErrored(this, error);\n                throw error;\n            }\n        }\n        finally {\n            this.delegate.requestFinished(this);\n        }\n    }\n    async receive(response) {\n        const fetchResponse = new FetchResponse(response);\n        const event = dispatch(\"turbo:before-fetch-response\", { cancelable: true, detail: { fetchResponse }, target: this.target });\n        if (event.defaultPrevented) {\n            this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n        }\n        else if (fetchResponse.succeeded) {\n            this.delegate.requestSucceededWithResponse(this, fetchResponse);\n        }\n        else {\n            this.delegate.requestFailedWithResponse(this, fetchResponse);\n        }\n        return fetchResponse;\n    }\n    get fetchOptions() {\n        var _a;\n        return {\n            method: FetchMethod[this.method].toUpperCase(),\n            credentials: \"same-origin\",\n            headers: this.headers,\n            redirect: \"follow\",\n            body: this.isIdempotent ? null : this.body,\n            signal: this.abortSignal,\n            referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href\n        };\n    }\n    get defaultHeaders() {\n        return {\n            \"Accept\": \"text/html, application/xhtml+xml\"\n        };\n    }\n    get isIdempotent() {\n        return this.method == FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\n    }\n    async allowRequestToBeIntercepted(fetchOptions) {\n        const requestInterception = new Promise(resolve => this.resolveRequestPromise = resolve);\n        const event = dispatch(\"turbo:before-fetch-request\", {\n            cancelable: true,\n            detail: {\n                fetchOptions,\n                url: this.url,\n                resume: this.resolveRequestPromise\n            },\n            target: this.target\n        });\n        if (event.defaultPrevented)\n            await requestInterception;\n    }\n}\n\nclass AppearanceObserver {\n    constructor(delegate, element) {\n        this.started = false;\n        this.intersect = entries => {\n            const lastEntry = entries.slice(-1)[0];\n            if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n                this.delegate.elementAppearedInViewport(this.element);\n            }\n        };\n        this.delegate = delegate;\n        this.element = element;\n        this.intersectionObserver = new IntersectionObserver(this.intersect);\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.intersectionObserver.observe(this.element);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.intersectionObserver.unobserve(this.element);\n        }\n    }\n}\n\nclass StreamMessage {\n    constructor(html) {\n        this.templateElement = document.createElement(\"template\");\n        this.templateElement.innerHTML = html;\n    }\n    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(message);\n        }\n        else {\n            return message;\n        }\n    }\n    get fragment() {\n        const fragment = document.createDocumentFragment();\n        for (const element of this.foreignElements) {\n            fragment.appendChild(document.importNode(element, true));\n        }\n        return fragment;\n    }\n    get foreignElements() {\n        return this.templateChildren.reduce((streamElements, child) => {\n            if (child.tagName.toLowerCase() == \"turbo-stream\") {\n                return [...streamElements, child];\n            }\n            else {\n                return streamElements;\n            }\n        }, []);\n    }\n    get templateChildren() {\n        return Array.from(this.templateElement.content.children);\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n    FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n    FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n    FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n    FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n    FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n    FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n    FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n    FormEnctype[\"multipart\"] = \"multipart/form-data\";\n    FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n    switch (encoding.toLowerCase()) {\n        case FormEnctype.multipart: return FormEnctype.multipart;\n        case FormEnctype.plain: return FormEnctype.plain;\n        default: return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\n    constructor(delegate, formElement, submitter, mustRedirect = false) {\n        this.state = FormSubmissionState.initialized;\n        this.delegate = delegate;\n        this.formElement = formElement;\n        this.submitter = submitter;\n        this.formData = buildFormData(formElement, submitter);\n        this.location = expandURL(this.action);\n        if (this.method == FetchMethod.get) {\n            mergeFormDataEntries(this.location, [...this.body.entries()]);\n        }\n        this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n        this.mustRedirect = mustRedirect;\n    }\n    static confirmMethod(message, element) {\n        return confirm(message);\n    }\n    get method() {\n        var _a;\n        const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n        return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n    }\n    get action() {\n        var _a;\n        const formElementAction = typeof this.formElement.action === 'string' ? this.formElement.action : null;\n        return ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formaction\")) || this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n    }\n    get body() {\n        if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n            return new URLSearchParams(this.stringFormData);\n        }\n        else {\n            return this.formData;\n        }\n    }\n    get enctype() {\n        var _a;\n        return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n    }\n    get isIdempotent() {\n        return this.fetchRequest.isIdempotent;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    get confirmationMessage() {\n        return this.formElement.getAttribute(\"data-turbo-confirm\");\n    }\n    get needsConfirmation() {\n        return this.confirmationMessage !== null;\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        if (this.needsConfirmation) {\n            const answer = FormSubmission.confirmMethod(this.confirmationMessage, this.formElement);\n            if (!answer) {\n                return;\n            }\n        }\n        if (this.state == initialized) {\n            this.state = requesting;\n            return this.fetchRequest.perform();\n        }\n    }\n    stop() {\n        const { stopping, stopped } = FormSubmissionState;\n        if (this.state != stopping && this.state != stopped) {\n            this.state = stopping;\n            this.fetchRequest.cancel();\n            return true;\n        }\n    }\n    prepareHeadersForRequest(headers, request) {\n        if (!request.isIdempotent) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                headers[\"X-CSRF-Token\"] = token;\n            }\n            headers[\"Accept\"] = [StreamMessage.contentType, headers[\"Accept\"]].join(\", \");\n        }\n    }\n    requestStarted(request) {\n        var _a;\n        this.state = FormSubmissionState.waiting;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n        dispatch(\"turbo:submit-start\", { target: this.formElement, detail: { formSubmission: this } });\n        this.delegate.formSubmissionStarted(this);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.result = { success: response.succeeded, fetchResponse: response };\n    }\n    requestSucceededWithResponse(request, response) {\n        if (response.clientError || response.serverError) {\n            this.delegate.formSubmissionFailedWithResponse(this, response);\n        }\n        else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n            const error = new Error(\"Form responses must redirect to another location\");\n            this.delegate.formSubmissionErrored(this, error);\n        }\n        else {\n            this.state = FormSubmissionState.receiving;\n            this.result = { success: true, fetchResponse: response };\n            this.delegate.formSubmissionSucceededWithResponse(this, response);\n        }\n    }\n    requestFailedWithResponse(request, response) {\n        this.result = { success: false, fetchResponse: response };\n        this.delegate.formSubmissionFailedWithResponse(this, response);\n    }\n    requestErrored(request, error) {\n        this.result = { success: false, error };\n        this.delegate.formSubmissionErrored(this, error);\n    }\n    requestFinished(request) {\n        var _a;\n        this.state = FormSubmissionState.stopped;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n        dispatch(\"turbo:submit-end\", { target: this.formElement, detail: Object.assign({ formSubmission: this }, this.result) });\n        this.delegate.formSubmissionFinished(this);\n    }\n    requestMustRedirect(request) {\n        return !request.isIdempotent && this.mustRedirect;\n    }\n}\nfunction buildFormData(formElement, submitter) {\n    const formData = new FormData(formElement);\n    const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n    const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n    if (name && value != null && formData.get(name) != value) {\n        formData.append(name, value);\n    }\n    return formData;\n}\nfunction getCookieValue(cookieName) {\n    if (cookieName != null) {\n        const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n        const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n        if (cookie) {\n            const value = cookie.split(\"=\").slice(1).join(\"=\");\n            return value ? decodeURIComponent(value) : undefined;\n        }\n    }\n}\nfunction getMetaContent(name) {\n    const element = document.querySelector(`meta[name=\"${name}\"]`);\n    return element && element.content;\n}\nfunction responseSucceededWithoutRedirect(response) {\n    return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n    const searchParams = new URLSearchParams;\n    for (const [name, value] of entries) {\n        if (value instanceof File)\n            continue;\n        searchParams.append(name, value);\n    }\n    url.search = searchParams.toString();\n    return url;\n}\n\nclass Snapshot {\n    constructor(element) {\n        this.element = element;\n    }\n    get children() {\n        return [...this.element.children];\n    }\n    hasAnchor(anchor) {\n        return this.getElementForAnchor(anchor) != null;\n    }\n    getElementForAnchor(anchor) {\n        return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n    }\n    get isConnected() {\n        return this.element.isConnected;\n    }\n    get firstAutofocusableElement() {\n        return this.element.querySelector(\"[autofocus]\");\n    }\n    get permanentElements() {\n        return [...this.element.querySelectorAll(\"[id][data-turbo-permanent]\")];\n    }\n    getPermanentElementById(id) {\n        return this.element.querySelector(`#${id}[data-turbo-permanent]`);\n    }\n    getPermanentElementMapForSnapshot(snapshot) {\n        const permanentElementMap = {};\n        for (const currentPermanentElement of this.permanentElements) {\n            const { id } = currentPermanentElement;\n            const newPermanentElement = snapshot.getPermanentElementById(id);\n            if (newPermanentElement) {\n                permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n            }\n        }\n        return permanentElementMap;\n    }\n}\n\nclass FormInterceptor {\n    constructor(delegate, element) {\n        this.submitBubbled = ((event) => {\n            const form = event.target;\n            if (!event.defaultPrevented && form instanceof HTMLFormElement && form.closest(\"turbo-frame, html\") == this.element) {\n                const submitter = event.submitter || undefined;\n                const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.method;\n                if (method != \"dialog\" && this.delegate.shouldInterceptFormSubmission(form, submitter)) {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.delegate.formSubmissionIntercepted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"submit\", this.submitBubbled);\n    }\n    stop() {\n        this.element.removeEventListener(\"submit\", this.submitBubbled);\n    }\n}\n\nclass View {\n    constructor(delegate, element) {\n        this.resolveRenderPromise = (value) => { };\n        this.resolveInterceptionPromise = (value) => { };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    scrollToAnchor(anchor) {\n        const element = this.snapshot.getElementForAnchor(anchor);\n        if (element) {\n            this.scrollToElement(element);\n            this.focusElement(element);\n        }\n        else {\n            this.scrollToPosition({ x: 0, y: 0 });\n        }\n    }\n    scrollToAnchorFromLocation(location) {\n        this.scrollToAnchor(getAnchor(location));\n    }\n    scrollToElement(element) {\n        element.scrollIntoView();\n    }\n    focusElement(element) {\n        if (element instanceof HTMLElement) {\n            if (element.hasAttribute(\"tabindex\")) {\n                element.focus();\n            }\n            else {\n                element.setAttribute(\"tabindex\", \"-1\");\n                element.focus();\n                element.removeAttribute(\"tabindex\");\n            }\n        }\n    }\n    scrollToPosition({ x, y }) {\n        this.scrollRoot.scrollTo(x, y);\n    }\n    scrollToTop() {\n        this.scrollToPosition({ x: 0, y: 0 });\n    }\n    get scrollRoot() {\n        return window;\n    }\n    async render(renderer) {\n        const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n        if (shouldRender) {\n            try {\n                this.renderPromise = new Promise(resolve => this.resolveRenderPromise = resolve);\n                this.renderer = renderer;\n                this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise(resolve => this.resolveInterceptionPromise = resolve);\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, this.resolveInterceptionPromise);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.finishRenderingSnapshot(renderer);\n            }\n            finally {\n                delete this.renderer;\n                this.resolveRenderPromise(undefined);\n                delete this.renderPromise;\n            }\n        }\n        else {\n            this.invalidate();\n        }\n    }\n    invalidate() {\n        this.delegate.viewInvalidated();\n    }\n    prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        renderer.prepareToRender();\n    }\n    markAsPreview(isPreview) {\n        if (isPreview) {\n            this.element.setAttribute(\"data-turbo-preview\", \"\");\n        }\n        else {\n            this.element.removeAttribute(\"data-turbo-preview\");\n        }\n    }\n    async renderSnapshot(renderer) {\n        await renderer.render();\n    }\n    finishRenderingSnapshot(renderer) {\n        renderer.finishRendering();\n    }\n}\n\nclass FrameView extends View {\n    invalidate() {\n        this.element.innerHTML = \"\";\n    }\n    get snapshot() {\n        return new Snapshot(this.element);\n    }\n}\n\nclass LinkInterceptor {\n    constructor(delegate, element) {\n        this.clickBubbled = (event) => {\n            if (this.respondsToEventTarget(event.target)) {\n                this.clickEvent = event;\n            }\n            else {\n                delete this.clickEvent;\n            }\n        };\n        this.linkClicked = ((event) => {\n            if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n                if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url)) {\n                    this.clickEvent.preventDefault();\n                    event.preventDefault();\n                    this.delegate.linkClickIntercepted(event.target, event.detail.url);\n                }\n            }\n            delete this.clickEvent;\n        });\n        this.willVisit = () => {\n            delete this.clickEvent;\n        };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"click\", this.clickBubbled);\n        document.addEventListener(\"turbo:click\", this.linkClicked);\n        document.addEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    stop() {\n        this.element.removeEventListener(\"click\", this.clickBubbled);\n        document.removeEventListener(\"turbo:click\", this.linkClicked);\n        document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    respondsToEventTarget(target) {\n        const element = target instanceof Element\n            ? target\n            : target instanceof Node\n                ? target.parentElement\n                : null;\n        return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n}\n\nclass Bardo {\n    constructor(permanentElementMap) {\n        this.permanentElementMap = permanentElementMap;\n    }\n    static preservingPermanentElements(permanentElementMap, callback) {\n        const bardo = new this(permanentElementMap);\n        bardo.enter();\n        callback();\n        bardo.leave();\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [, newPermanentElement] = this.permanentElementMap[id];\n            this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n        }\n    }\n    leave() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement] = this.permanentElementMap[id];\n            this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n            this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n        }\n    }\n    replaceNewPermanentElementWithPlaceholder(permanentElement) {\n        const placeholder = createPlaceholderForPermanentElement(permanentElement);\n        permanentElement.replaceWith(placeholder);\n    }\n    replaceCurrentPermanentElementWithClone(permanentElement) {\n        const clone = permanentElement.cloneNode(true);\n        permanentElement.replaceWith(clone);\n    }\n    replacePlaceholderWithPermanentElement(permanentElement) {\n        const placeholder = this.getPlaceholderById(permanentElement.id);\n        placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n    }\n    getPlaceholderById(id) {\n        return this.placeholders.find(element => element.content == id);\n    }\n    get placeholders() {\n        return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n    }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n    const element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n    element.setAttribute(\"content\", permanentElement.id);\n    return element;\n}\n\nclass Renderer {\n    constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject });\n    }\n    get shouldRender() {\n        return true;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    createScriptElement(element) {\n        if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n            return element;\n        }\n        else {\n            const createdScriptElement = document.createElement(\"script\");\n            if (this.cspNonce) {\n                createdScriptElement.nonce = this.cspNonce;\n            }\n            createdScriptElement.textContent = element.textContent;\n            createdScriptElement.async = false;\n            copyElementAttributes(createdScriptElement, element);\n            return createdScriptElement;\n        }\n    }\n    preservingPermanentElements(callback) {\n        Bardo.preservingPermanentElements(this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\n        }\n    }\n    get connectedSnapshot() {\n        return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n    }\n    get currentElement() {\n        return this.currentSnapshot.element;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    get permanentElementMap() {\n        return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n    }\n    get cspNonce() {\n        var _a;\n        return (_a = document.head.querySelector('meta[name=\"csp-nonce\"]')) === null || _a === void 0 ? void 0 : _a.getAttribute(\"content\");\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of [...sourceElement.attributes]) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n    get shouldRender() {\n        return true;\n    }\n    async render() {\n        await nextAnimationFrame();\n        this.preservingPermanentElements(() => {\n            this.loadFrameElement();\n        });\n        this.scrollFrameIntoView();\n        await nextAnimationFrame();\n        this.focusFirstAutofocusableElement();\n        await nextAnimationFrame();\n        this.activateScriptElements();\n    }\n    loadFrameElement() {\n        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(this.currentElement);\n        destinationRange.deleteContents();\n        const frameElement = this.newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            this.currentElement.appendChild(sourceRange.extractContents());\n        }\n    }\n    scrollFrameIntoView() {\n        if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n            const element = this.currentElement.firstElementChild;\n            const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n            if (element) {\n                element.scrollIntoView({ block });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = this.createScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    get newScriptElements() {\n        return this.currentElement.querySelectorAll(\"script\");\n    }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n    if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\n\nclass ProgressBar {\n    constructor() {\n        this.hiding = false;\n        this.value = 0;\n        this.visible = false;\n        this.trickle = () => {\n            this.setValue(this.value + Math.random() / 100);\n        };\n        this.stylesheetElement = this.createStylesheetElement();\n        this.progressElement = this.createProgressElement();\n        this.installStylesheetElement();\n        this.setValue(0);\n    }\n    static get defaultCSS() {\n        return unindent `\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 9999;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `;\n    }\n    show() {\n        if (!this.visible) {\n            this.visible = true;\n            this.installProgressElement();\n            this.startTrickling();\n        }\n    }\n    hide() {\n        if (this.visible && !this.hiding) {\n            this.hiding = true;\n            this.fadeProgressElement(() => {\n                this.uninstallProgressElement();\n                this.stopTrickling();\n                this.visible = false;\n                this.hiding = false;\n            });\n        }\n    }\n    setValue(value) {\n        this.value = value;\n        this.refresh();\n    }\n    installStylesheetElement() {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n    }\n    installProgressElement() {\n        this.progressElement.style.width = \"0\";\n        this.progressElement.style.opacity = \"1\";\n        document.documentElement.insertBefore(this.progressElement, document.body);\n        this.refresh();\n    }\n    fadeProgressElement(callback) {\n        this.progressElement.style.opacity = \"0\";\n        setTimeout(callback, ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n        if (this.progressElement.parentNode) {\n            document.documentElement.removeChild(this.progressElement);\n        }\n    }\n    startTrickling() {\n        if (!this.trickleInterval) {\n            this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n        }\n    }\n    stopTrickling() {\n        window.clearInterval(this.trickleInterval);\n        delete this.trickleInterval;\n    }\n    refresh() {\n        requestAnimationFrame(() => {\n            this.progressElement.style.width = `${10 + (this.value * 90)}%`;\n        });\n    }\n    createStylesheetElement() {\n        const element = document.createElement(\"style\");\n        element.type = \"text/css\";\n        element.textContent = ProgressBar.defaultCSS;\n        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\n    }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n    constructor() {\n        super(...arguments);\n        this.detailsByOuterHTML = this.children\n            .filter((element) => !elementIsNoscript(element))\n            .map((element) => elementWithoutNonce(element))\n            .reduce((result, element) => {\n            const { outerHTML } = element;\n            const details = outerHTML in result\n                ? result[outerHTML]\n                : {\n                    type: elementType(element),\n                    tracked: elementIsTracked(element),\n                    elements: []\n                };\n            return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n        }, {});\n    }\n    get trackedElementSignature() {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter(outerHTML => this.detailsByOuterHTML[outerHTML].tracked)\n            .join(\"\");\n    }\n    getScriptElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n    }\n    getStylesheetElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n    }\n    getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter(outerHTML => !(outerHTML in snapshot.detailsByOuterHTML))\n            .map(outerHTML => this.detailsByOuterHTML[outerHTML])\n            .filter(({ type }) => type == matchedType)\n            .map(({ elements: [element] }) => element);\n    }\n    get provisionalElements() {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n            if (type == null && !tracked) {\n                return [...result, ...elements];\n            }\n            else if (elements.length > 1) {\n                return [...result, ...elements.slice(1)];\n            }\n            else {\n                return result;\n            }\n        }, []);\n    }\n    getMetaValue(name) {\n        const element = this.findMetaElementByName(name);\n        return element\n            ? element.getAttribute(\"content\")\n            : null;\n    }\n    findMetaElementByName(name) {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { elements: [element] } = this.detailsByOuterHTML[outerHTML];\n            return elementIsMetaElementWithName(element, name) ? element : result;\n        }, undefined);\n    }\n}\nfunction elementType(element) {\n    if (elementIsScript(element)) {\n        return \"script\";\n    }\n    else if (elementIsStylesheet(element)) {\n        return \"stylesheet\";\n    }\n}\nfunction elementIsTracked(element) {\n    return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.tagName.toLowerCase();\n    return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n    if (element.hasAttribute(\"nonce\")) {\n        element.setAttribute(\"nonce\", \"\");\n    }\n    return element;\n}\n\nclass PageSnapshot extends Snapshot {\n    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\n    static fromHTMLString(html = \"\") {\n        return this.fromDocument(parseHTMLDocument(html));\n    }\n    static fromElement(element) {\n        return this.fromDocument(element.ownerDocument);\n    }\n    static fromDocument({ head, body }) {\n        return new this(body, new HeadSnapshot(head));\n    }\n    clone() {\n        return new PageSnapshot(this.element.cloneNode(true), this.headSnapshot);\n    }\n    get headElement() {\n        return this.headSnapshot.element;\n    }\n    get rootLocation() {\n        var _a;\n        const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    get cacheControlValue() {\n        return this.getSetting(\"cache-control\");\n    }\n    get isPreviewable() {\n        return this.cacheControlValue != \"no-preview\";\n    }\n    get isCacheable() {\n        return this.cacheControlValue != \"no-cache\";\n    }\n    get isVisitable() {\n        return this.getSetting(\"visit-control\") != \"reload\";\n    }\n    getSetting(name) {\n        return this.headSnapshot.getMetaValue(`turbo-${name}`);\n    }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n    TimingMetric[\"visitStart\"] = \"visitStart\";\n    TimingMetric[\"requestStart\"] = \"requestStart\";\n    TimingMetric[\"requestEnd\"] = \"requestEnd\";\n    TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n    VisitState[\"initialized\"] = \"initialized\";\n    VisitState[\"started\"] = \"started\";\n    VisitState[\"canceled\"] = \"canceled\";\n    VisitState[\"failed\"] = \"failed\";\n    VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n    action: \"advance\",\n    historyChanged: false,\n    visitCachedSnapshot: () => { },\n    willRender: true,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n    SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n    SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n    SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n    constructor(delegate, location, restorationIdentifier, options = {}) {\n        this.identifier = uuid();\n        this.timingMetrics = {};\n        this.followedRedirect = false;\n        this.historyChanged = false;\n        this.scrolled = false;\n        this.snapshotCached = false;\n        this.state = VisitState.initialized;\n        this.delegate = delegate;\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier || uuid();\n        const { action, historyChanged, referrer, snapshotHTML, response, visitCachedSnapshot, willRender } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\n        this.snapshotHTML = snapshotHTML;\n        this.response = response;\n        this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n        this.visitCachedSnapshot = visitCachedSnapshot;\n        this.willRender = willRender;\n        this.scrolled = !willRender;\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    get restorationData() {\n        return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n    get silent() {\n        return this.isSamePage;\n    }\n    start() {\n        if (this.state == VisitState.initialized) {\n            this.recordTimingMetric(TimingMetric.visitStart);\n            this.state = VisitState.started;\n            this.adapter.visitStarted(this);\n            this.delegate.visitStarted(this);\n        }\n    }\n    cancel() {\n        if (this.state == VisitState.started) {\n            if (this.request) {\n                this.request.cancel();\n            }\n            this.cancelRender();\n            this.state = VisitState.canceled;\n        }\n    }\n    complete() {\n        if (this.state == VisitState.started) {\n            this.recordTimingMetric(TimingMetric.visitEnd);\n            this.state = VisitState.completed;\n            this.adapter.visitCompleted(this);\n            this.delegate.visitCompleted(this);\n            this.followRedirect();\n        }\n    }\n    fail() {\n        if (this.state == VisitState.started) {\n            this.state = VisitState.failed;\n            this.adapter.visitFailed(this);\n        }\n    }\n    changeHistory() {\n        var _a;\n        if (!this.historyChanged) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = this.getHistoryMethodForAction(actionForHistory);\n            this.history.update(method, this.location, this.restorationIdentifier);\n            this.historyChanged = true;\n        }\n    }\n    issueRequest() {\n        if (this.hasPreloadedResponse()) {\n            this.simulateRequest();\n        }\n        else if (this.shouldIssueRequest() && !this.request) {\n            this.request = new FetchRequest(this, FetchMethod.get, this.location);\n            this.request.perform();\n        }\n    }\n    simulateRequest() {\n        if (this.response) {\n            this.startRequest();\n            this.recordResponse();\n            this.finishRequest();\n        }\n    }\n    startRequest() {\n        this.recordTimingMetric(TimingMetric.requestStart);\n        this.adapter.visitRequestStarted(this);\n    }\n    recordResponse(response = this.response) {\n        this.response = response;\n        if (response) {\n            const { statusCode } = response;\n            if (isSuccessful(statusCode)) {\n                this.adapter.visitRequestCompleted(this);\n            }\n            else {\n                this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n            }\n        }\n    }\n    finishRequest() {\n        this.recordTimingMetric(TimingMetric.requestEnd);\n        this.adapter.visitRequestFinished(this);\n    }\n    loadResponse() {\n        if (this.response) {\n            const { statusCode, responseHTML } = this.response;\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                if (isSuccessful(statusCode) && responseHTML != null) {\n                    await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender);\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML));\n                    this.adapter.visitRendered(this);\n                    this.fail();\n                }\n            });\n        }\n    }\n    getCachedSnapshot() {\n        const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n        if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n            if (this.action == \"restore\" || snapshot.isPreviewable) {\n                return snapshot;\n            }\n        }\n    }\n    getPreloadedSnapshot() {\n        if (this.snapshotHTML) {\n            return PageSnapshot.fromHTMLString(this.snapshotHTML);\n        }\n    }\n    hasCachedSnapshot() {\n        return this.getCachedSnapshot() != null;\n    }\n    loadCachedSnapshot() {\n        const snapshot = this.getCachedSnapshot();\n        if (snapshot) {\n            const isPreview = this.shouldIssueRequest();\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.isSamePage) {\n                    this.adapter.visitRendered(this);\n                }\n                else {\n                    if (this.view.renderPromise)\n                        await this.view.renderPromise;\n                    await this.view.renderPage(snapshot, isPreview, this.willRender);\n                    this.adapter.visitRendered(this);\n                    if (!isPreview) {\n                        this.complete();\n                    }\n                }\n            });\n        }\n    }\n    followRedirect() {\n        var _a;\n        if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n            this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n                action: 'replace',\n                response: this.response\n            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(request, response) {\n    }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch, redirected });\n        }\n        else {\n            this.redirectedToLocation = response.redirected ? response.location : undefined;\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    async requestFailedWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({ statusCode: SystemStatusCode.contentTypeMismatch, redirected });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(request, error) {\n        this.recordResponse({ statusCode: SystemStatusCode.networkFailure, redirected: false });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled) {\n            if (this.action == \"restore\") {\n                this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            else {\n                this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            if (this.isSamePage) {\n                this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n            }\n            this.scrolled = true;\n        }\n    }\n    scrollToRestoredPosition() {\n        const { scrollPosition } = this.restorationData;\n        if (scrollPosition) {\n            this.view.scrollToPosition(scrollPosition);\n            return true;\n        }\n    }\n    scrollToAnchor() {\n        const anchor = getAnchor(this.location);\n        if (anchor != null) {\n            this.view.scrollToAnchor(anchor);\n            return true;\n        }\n    }\n    recordTimingMetric(metric) {\n        this.timingMetrics[metric] = new Date().getTime();\n    }\n    getTimingMetrics() {\n        return Object.assign({}, this.timingMetrics);\n    }\n    getHistoryMethodForAction(action) {\n        switch (action) {\n            case \"replace\": return history.replaceState;\n            case \"advance\":\n            case \"restore\": return history.pushState;\n        }\n    }\n    hasPreloadedResponse() {\n        return typeof this.response == \"object\";\n    }\n    shouldIssueRequest() {\n        if (this.isSamePage) {\n            return false;\n        }\n        else if (this.action == \"restore\") {\n            return !this.hasCachedSnapshot();\n        }\n        else {\n            return this.willRender;\n        }\n    }\n    cacheSnapshot() {\n        if (!this.snapshotCached) {\n            this.view.cacheSnapshot().then(snapshot => snapshot && this.visitCachedSnapshot(snapshot));\n            this.snapshotCached = true;\n        }\n    }\n    async render(callback) {\n        this.cancelRender();\n        await new Promise(resolve => {\n            this.frame = requestAnimationFrame(() => resolve());\n        });\n        await callback();\n        delete this.frame;\n        this.performScroll();\n    }\n    cancelRender() {\n        if (this.frame) {\n            cancelAnimationFrame(this.frame);\n            delete this.frame;\n        }\n    }\n}\nfunction isSuccessful(statusCode) {\n    return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n    constructor(session) {\n        this.progressBar = new ProgressBar;\n        this.showProgressBar = () => {\n            this.progressBar.show();\n        };\n        this.session = session;\n    }\n    visitProposedToLocation(location, options) {\n        this.navigator.startVisit(location, uuid(), options);\n    }\n    visitStarted(visit) {\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\n        visit.changeHistory();\n        visit.goToSamePageAnchor();\n    }\n    visitRequestStarted(visit) {\n        this.progressBar.setValue(0);\n        if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n            this.showVisitProgressBarAfterDelay();\n        }\n        else {\n            this.showProgressBar();\n        }\n    }\n    visitRequestCompleted(visit) {\n        visit.loadResponse();\n    }\n    visitRequestFailedWithStatusCode(visit, statusCode) {\n        switch (statusCode) {\n            case SystemStatusCode.networkFailure:\n            case SystemStatusCode.timeoutFailure:\n            case SystemStatusCode.contentTypeMismatch:\n                return this.reload();\n            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(visit) {\n    }\n    pageInvalidated() {\n        this.reload();\n    }\n    visitFailed(visit) {\n    }\n    visitRendered(visit) {\n    }\n    formSubmissionStarted(formSubmission) {\n        this.progressBar.setValue(0);\n        this.showFormProgressBarAfterDelay();\n    }\n    formSubmissionFinished(formSubmission) {\n        this.progressBar.setValue(1);\n        this.hideFormProgressBar();\n    }\n    showVisitProgressBarAfterDelay() {\n        this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n    hideVisitProgressBar() {\n        this.progressBar.hide();\n        if (this.visitProgressBarTimeout != null) {\n            window.clearTimeout(this.visitProgressBarTimeout);\n            delete this.visitProgressBarTimeout;\n        }\n    }\n    showFormProgressBarAfterDelay() {\n        if (this.formProgressBarTimeout == null) {\n            this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n        }\n    }\n    hideFormProgressBar() {\n        this.progressBar.hide();\n        if (this.formProgressBarTimeout != null) {\n            window.clearTimeout(this.formProgressBarTimeout);\n            delete this.formProgressBarTimeout;\n        }\n    }\n    reload() {\n        window.location.reload();\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeStaleElements, false);\n        }\n    }\n    removeStaleElements() {\n        const staleElements = [...document.querySelectorAll('[data-turbo-cache=\"false\"]')];\n        for (const element of staleElements) {\n            element.remove();\n        }\n    }\n}\n\nclass FormSubmitObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.submitCaptured = () => {\n            removeEventListener(\"submit\", this.submitBubbled, false);\n            addEventListener(\"submit\", this.submitBubbled, false);\n        };\n        this.submitBubbled = ((event) => {\n            if (!event.defaultPrevented) {\n                const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n                const submitter = event.submitter || undefined;\n                if (form) {\n                    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n                    if (method != \"dialog\" && this.delegate.willSubmitForm(form, submitter)) {\n                        event.preventDefault();\n                        this.delegate.formSubmitted(form, submitter);\n                    }\n                }\n            }\n        });\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\n\nclass FrameRedirector {\n    constructor(element) {\n        this.element = element;\n        this.linkInterceptor = new LinkInterceptor(this, element);\n        this.formInterceptor = new FormInterceptor(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n        this.formInterceptor.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n        this.formInterceptor.stop();\n    }\n    shouldInterceptLinkClick(element, url) {\n        return this.shouldRedirect(element);\n    }\n    linkClickIntercepted(element, url) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.linkClickIntercepted(element, url);\n        }\n    }\n    shouldInterceptFormSubmission(element, submitter) {\n        return this.shouldSubmit(element, submitter);\n    }\n    formSubmissionIntercepted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.removeAttribute(\"reloadable\");\n            frame.delegate.formSubmissionIntercepted(element, submitter);\n        }\n    }\n    shouldSubmit(form, submitter) {\n        var _a;\n        const action = getAction(form, submitter);\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n        return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n    }\n    shouldRedirect(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        return frame ? frame != element.closest(\"turbo-frame\") : false;\n    }\n    findFrameElement(element, submitter) {\n        const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n        if (id && id != \"_top\") {\n            const frame = this.element.querySelector(`#${id}:not([disabled])`);\n            if (frame instanceof FrameElement) {\n                return frame;\n            }\n        }\n    }\n}\n\nclass History {\n    constructor(delegate) {\n        this.restorationIdentifier = uuid();\n        this.restorationData = {};\n        this.started = false;\n        this.pageLoaded = false;\n        this.onPopState = (event) => {\n            if (this.shouldHandlePopState()) {\n                const { turbo } = event.state || {};\n                if (turbo) {\n                    this.location = new URL(window.location.href);\n                    const { restorationIdentifier } = turbo;\n                    this.restorationIdentifier = restorationIdentifier;\n                    this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n                }\n            }\n        };\n        this.onPageLoad = async (event) => {\n            await nextMicrotask();\n            this.pageLoaded = true;\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"popstate\", this.onPopState, false);\n            addEventListener(\"load\", this.onPageLoad, false);\n            this.started = true;\n            this.replace(new URL(window.location.href));\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"popstate\", this.onPopState, false);\n            removeEventListener(\"load\", this.onPageLoad, false);\n            this.started = false;\n        }\n    }\n    push(location, restorationIdentifier) {\n        this.update(history.pushState, location, restorationIdentifier);\n    }\n    replace(location, restorationIdentifier) {\n        this.update(history.replaceState, location, restorationIdentifier);\n    }\n    update(method, location, restorationIdentifier = uuid()) {\n        const state = { turbo: { restorationIdentifier } };\n        method.call(history, state, \"\", location.href);\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier;\n    }\n    getRestorationDataForIdentifier(restorationIdentifier) {\n        return this.restorationData[restorationIdentifier] || {};\n    }\n    updateRestorationData(additionalData) {\n        const { restorationIdentifier } = this;\n        const restorationData = this.restorationData[restorationIdentifier];\n        this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n    }\n    assumeControlOfScrollRestoration() {\n        var _a;\n        if (!this.previousScrollRestoration) {\n            this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n            history.scrollRestoration = \"manual\";\n        }\n    }\n    relinquishControlOfScrollRestoration() {\n        if (this.previousScrollRestoration) {\n            history.scrollRestoration = this.previousScrollRestoration;\n            delete this.previousScrollRestoration;\n        }\n    }\n    shouldHandlePopState() {\n        return this.pageIsLoaded();\n    }\n    pageIsLoaded() {\n        return this.pageLoaded || document.readyState == \"complete\";\n    }\n}\n\nclass LinkClickObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.clickCaptured = () => {\n            removeEventListener(\"click\", this.clickBubbled, false);\n            addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"click\", this.clickCaptured, true);\n            this.started = false;\n        }\n    }\n    clickEventIsSignificant(event) {\n        return !((event.target && event.target.isContentEditable)\n            || event.defaultPrevented\n            || event.which > 1\n            || event.altKey\n            || event.ctrlKey\n            || event.metaKey\n            || event.shiftKey);\n    }\n    findLinkFromClickTarget(target) {\n        if (target instanceof Element) {\n            return target.closest(\"a[href]:not([target^=_]):not([download])\");\n        }\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\n\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nclass Navigator {\n    constructor(delegate) {\n        this.delegate = delegate;\n    }\n    proposeVisit(location, options = {}) {\n        if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n            if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n                this.delegate.visitProposedToLocation(location, options);\n            }\n            else {\n                window.location.href = location.toString();\n            }\n        }\n    }\n    startVisit(locatable, restorationIdentifier, options = {}) {\n        this.stop();\n        this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n        this.currentVisit.start();\n    }\n    submitForm(form, submitter) {\n        this.stop();\n        this.formSubmission = new FormSubmission(this, form, submitter, true);\n        this.formSubmission.start();\n    }\n    stop() {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n            delete this.formSubmission;\n        }\n        if (this.currentVisit) {\n            this.currentVisit.cancel();\n            delete this.currentVisit;\n        }\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    formSubmissionStarted(formSubmission) {\n        if (typeof this.adapter.formSubmissionStarted === 'function') {\n            this.adapter.formSubmissionStarted(formSubmission);\n        }\n    }\n    async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n        if (formSubmission == this.formSubmission) {\n            const responseHTML = await fetchResponse.responseHTML;\n            if (responseHTML) {\n                if (formSubmission.method != FetchMethod.get) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = { action, response: { statusCode, responseHTML, redirected } };\n                this.proposeVisit(fetchResponse.location, visitOptions);\n            }\n        }\n    }\n    async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        const responseHTML = await fetchResponse.responseHTML;\n        if (responseHTML) {\n            const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n            if (fetchResponse.serverError) {\n                await this.view.renderError(snapshot);\n            }\n            else {\n                await this.view.renderPage(snapshot);\n            }\n            this.view.scrollToTop();\n            this.view.clearSnapshotCache();\n        }\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished(formSubmission) {\n        if (typeof this.adapter.formSubmissionFinished === 'function') {\n            this.adapter.formSubmissionFinished(formSubmission);\n        }\n    }\n    visitStarted(visit) {\n        this.delegate.visitStarted(visit);\n    }\n    visitCompleted(visit) {\n        this.delegate.visitCompleted(visit);\n    }\n    locationWithActionIsSamePage(location, action) {\n        const anchor = getAnchor(location);\n        const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n        const isRestorationToTop = action === 'restore' && typeof anchor === 'undefined';\n        return action !== \"replace\" &&\n            getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n            (isRestorationToTop || (anchor != null && anchor !== currentAnchor));\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    getActionForFormSubmission(formSubmission) {\n        const { formElement, submitter } = formSubmission;\n        const action = getAttribute(\"data-turbo-action\", submitter, formElement);\n        return isAction(action) ? action : \"advance\";\n    }\n}\n\nvar PageStage;\n(function (PageStage) {\n    PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n    PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n    PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n    PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n    constructor(delegate) {\n        this.stage = PageStage.initial;\n        this.started = false;\n        this.interpretReadyState = () => {\n            const { readyState } = this;\n            if (readyState == \"interactive\") {\n                this.pageIsInteractive();\n            }\n            else if (readyState == \"complete\") {\n                this.pageIsComplete();\n            }\n        };\n        this.pageWillUnload = () => {\n            this.delegate.pageWillUnload();\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            if (this.stage == PageStage.initial) {\n                this.stage = PageStage.loading;\n            }\n            document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n            addEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n            removeEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = false;\n        }\n    }\n    pageIsInteractive() {\n        if (this.stage == PageStage.loading) {\n            this.stage = PageStage.interactive;\n            this.delegate.pageBecameInteractive();\n        }\n    }\n    pageIsComplete() {\n        this.pageIsInteractive();\n        if (this.stage == PageStage.interactive) {\n            this.stage = PageStage.complete;\n            this.delegate.pageLoaded();\n        }\n    }\n    get readyState() {\n        return document.readyState;\n    }\n}\n\nclass ScrollObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.onScroll = () => {\n            this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"scroll\", this.onScroll, false);\n            this.onScroll();\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"scroll\", this.onScroll, false);\n            this.started = false;\n        }\n    }\n    updatePosition(position) {\n        this.delegate.scrollPositionChanged(position);\n    }\n}\n\nclass StreamObserver {\n    constructor(delegate) {\n        this.sources = new Set;\n        this.started = false;\n        this.inspectFetchResponse = ((event) => {\n            const response = fetchResponseFromEvent(event);\n            if (response && fetchResponseIsStream(response)) {\n                event.preventDefault();\n                this.receiveMessageResponse(response);\n            }\n        });\n        this.receiveMessageEvent = (event) => {\n            if (this.started && typeof event.data == \"string\") {\n                this.receiveMessageHTML(event.data);\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    connectStreamSource(source) {\n        if (!this.streamSourceIsConnected(source)) {\n            this.sources.add(source);\n            source.addEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    disconnectStreamSource(source) {\n        if (this.streamSourceIsConnected(source)) {\n            this.sources.delete(source);\n            source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    streamSourceIsConnected(source) {\n        return this.sources.has(source);\n    }\n    async receiveMessageResponse(response) {\n        const html = await response.responseHTML;\n        if (html) {\n            this.receiveMessageHTML(html);\n        }\n    }\n    receiveMessageHTML(html) {\n        this.delegate.receivedMessageFromStream(new StreamMessage(html));\n    }\n}\nfunction fetchResponseFromEvent(event) {\n    var _a;\n    const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n    if (fetchResponse instanceof FetchResponse) {\n        return fetchResponse;\n    }\n}\nfunction fetchResponseIsStream(response) {\n    var _a;\n    const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n    return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head, body } = document;\n        documentElement.replaceChild(this.newHead, head);\n        documentElement.replaceChild(this.newElement, body);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = this.createScriptElement(replaceableElement);\n                parentNode.replaceChild(element, replaceableElement);\n            }\n        }\n    }\n    get newHead() {\n        return this.newSnapshot.headSnapshot.element;\n    }\n    get scriptElements() {\n        return [...document.documentElement.querySelectorAll(\"script\")];\n    }\n}\n\nclass PageRenderer extends Renderer {\n    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    prepareToRender() {\n        this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            this.replaceBody();\n        }\n    }\n    finishRendering() {\n        super.finishRendering();\n        if (!this.isPreview) {\n            this.focusFirstAutofocusableElement();\n        }\n    }\n    get currentHeadSnapshot() {\n        return this.currentSnapshot.headSnapshot;\n    }\n    get newHeadSnapshot() {\n        return this.newSnapshot.headSnapshot;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    mergeHead() {\n        this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        this.removeCurrentHeadProvisionalElements();\n        this.copyNewHeadProvisionalElements();\n    }\n    replaceBody() {\n        this.preservingPermanentElements(() => {\n            this.activateNewBody();\n            this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    copyNewHeadStylesheetElements() {\n        for (const element of this.newHeadStylesheetElements) {\n            document.head.appendChild(element);\n        }\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(this.createScriptElement(element));\n        }\n    }\n    removeCurrentHeadProvisionalElements() {\n        for (const element of this.currentHeadProvisionalElements) {\n            document.head.removeChild(element);\n        }\n    }\n    copyNewHeadProvisionalElements() {\n        for (const element of this.newHeadProvisionalElements) {\n            document.head.appendChild(element);\n        }\n    }\n    activateNewBody() {\n        document.adoptNode(this.newElement);\n        this.activateNewBodyScriptElements();\n    }\n    activateNewBodyScriptElements() {\n        for (const inertScriptElement of this.newBodyScriptElements) {\n            const activatedScriptElement = this.createScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    assignNewBody() {\n        if (document.body && this.newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(this.newElement);\n        }\n        else {\n            document.documentElement.appendChild(this.newElement);\n        }\n    }\n    get newHeadStylesheetElements() {\n        return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get newHeadScriptElements() {\n        return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get currentHeadProvisionalElements() {\n        return this.currentHeadSnapshot.provisionalElements;\n    }\n    get newHeadProvisionalElements() {\n        return this.newHeadSnapshot.provisionalElements;\n    }\n    get newBodyScriptElements() {\n        return this.newElement.querySelectorAll(\"script\");\n    }\n}\n\nclass SnapshotCache {\n    constructor(size) {\n        this.keys = [];\n        this.snapshots = {};\n        this.size = size;\n    }\n    has(location) {\n        return toCacheKey(location) in this.snapshots;\n    }\n    get(location) {\n        if (this.has(location)) {\n            const snapshot = this.read(location);\n            this.touch(location);\n            return snapshot;\n        }\n    }\n    put(location, snapshot) {\n        this.write(location, snapshot);\n        this.touch(location);\n        return snapshot;\n    }\n    clear() {\n        this.snapshots = {};\n    }\n    read(location) {\n        return this.snapshots[toCacheKey(location)];\n    }\n    write(location, snapshot) {\n        this.snapshots[toCacheKey(location)] = snapshot;\n    }\n    touch(location) {\n        const key = toCacheKey(location);\n        const index = this.keys.indexOf(key);\n        if (index > -1)\n            this.keys.splice(index, 1);\n        this.keys.unshift(key);\n        this.trim();\n    }\n    trim() {\n        for (const key of this.keys.splice(this.size)) {\n            delete this.snapshots[key];\n        }\n    }\n}\n\nclass PageView extends View {\n    constructor() {\n        super(...arguments);\n        this.snapshotCache = new SnapshotCache(10);\n        this.lastRenderedLocation = new URL(location.href);\n    }\n    renderPage(snapshot, isPreview = false, willRender = true) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, isPreview, willRender);\n        return this.render(renderer);\n    }\n    renderError(snapshot) {\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot() {\n        if (this.shouldCacheSnapshot) {\n            this.delegate.viewWillCacheSnapshot();\n            const { snapshot, lastRenderedLocation: location } = this;\n            await nextEventLoopTick();\n            const cachedSnapshot = snapshot.clone();\n            this.snapshotCache.put(location, cachedSnapshot);\n            return cachedSnapshot;\n        }\n    }\n    getCachedSnapshotForLocation(location) {\n        return this.snapshotCache.get(location);\n    }\n    get snapshot() {\n        return PageSnapshot.fromElement(this.element);\n    }\n    get shouldCacheSnapshot() {\n        return this.snapshot.isCacheable;\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(this);\n        this.view = new PageView(this, document.documentElement);\n        this.adapter = new BrowserAdapter(this);\n        this.pageObserver = new PageObserver(this);\n        this.cacheObserver = new CacheObserver();\n        this.linkClickObserver = new LinkClickObserver(this);\n        this.formSubmitObserver = new FormSubmitObserver(this);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.frameRedirector = new FrameRedirector(document.documentElement);\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.start();\n            this.linkClickObserver.start();\n            this.formSubmitObserver.start();\n            this.scrollObserver.start();\n            this.streamObserver.start();\n            this.frameRedirector.start();\n            this.history.start();\n            this.started = true;\n            this.enabled = true;\n        }\n    }\n    disable() {\n        this.enabled = false;\n    }\n    stop() {\n        if (this.started) {\n            this.pageObserver.stop();\n            this.cacheObserver.stop();\n            this.linkClickObserver.stop();\n            this.formSubmitObserver.stop();\n            this.scrollObserver.stop();\n            this.streamObserver.stop();\n            this.frameRedirector.stop();\n            this.history.stop();\n            this.started = false;\n        }\n    }\n    registerAdapter(adapter) {\n        this.adapter = adapter;\n    }\n    visit(location, options = {}) {\n        this.navigator.proposeVisit(expandURL(location), options);\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        document.documentElement.appendChild(StreamMessage.wrap(message).fragment);\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n        if (this.enabled) {\n            this.navigator.startVisit(location, restorationIdentifier, { action: \"restore\", historyChanged: true });\n        }\n        else {\n            this.adapter.pageInvalidated();\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willFollowLinkToLocation(link, location) {\n        return this.elementDriveEnabled(link)\n            && locationIsVisitable(location, this.snapshot.rootLocation)\n            && this.applicationAllowsFollowingLinkToLocation(link, location);\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        this.convertLinkWithMethodClickToFormSubmission(link) || this.visit(location.href, { action });\n    }\n    convertLinkWithMethodClickToFormSubmission(link) {\n        const linkMethod = link.getAttribute(\"data-turbo-method\");\n        if (linkMethod) {\n            const form = document.createElement(\"form\");\n            form.method = linkMethod;\n            form.action = link.getAttribute(\"href\") || \"undefined\";\n            form.hidden = true;\n            if (link.hasAttribute(\"data-turbo-confirm\")) {\n                form.setAttribute(\"data-turbo-confirm\", link.getAttribute(\"data-turbo-confirm\"));\n            }\n            const frame = this.getTargetFrameForLink(link);\n            if (frame) {\n                form.setAttribute(\"data-turbo-frame\", frame);\n                form.addEventListener(\"turbo:submit-start\", () => form.remove());\n            }\n            else {\n                form.addEventListener(\"submit\", () => form.remove());\n            }\n            document.body.appendChild(form);\n            return dispatch(\"submit\", { cancelable: true, target: form });\n        }\n        else {\n            return false;\n        }\n    }\n    allowsVisitingLocationWithAction(location, action) {\n        return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n    }\n    visitProposedToLocation(location, options) {\n        extendURLWithDeprecatedProperties(location);\n        this.adapter.visitProposedToLocation(location, options);\n    }\n    visitStarted(visit) {\n        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\n        this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n    }\n    locationWithActionIsSamePage(location, action) {\n        return this.navigator.locationWithActionIsSamePage(location, action);\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n    }\n    willSubmitForm(form, submitter) {\n        const action = getAction(form, submitter);\n        return this.elementDriveEnabled(form)\n            && (!submitter || this.elementDriveEnabled(submitter))\n            && locationIsVisitable(expandURL(action), this.snapshot.rootLocation);\n    }\n    formSubmitted(form, submitter) {\n        this.navigator.submitForm(form, submitter);\n    }\n    pageBecameInteractive() {\n        this.view.lastRenderedLocation = this.location;\n        this.notifyApplicationAfterPageLoad();\n    }\n    pageLoaded() {\n        this.history.assumeControlOfScrollRestoration();\n    }\n    pageWillUnload() {\n        this.history.relinquishControlOfScrollRestoration();\n    }\n    receivedMessageFromStream(message) {\n        this.renderStreamMessage(message);\n    }\n    viewWillCacheSnapshot() {\n        var _a;\n        if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n            this.notifyApplicationBeforeCachingSnapshot();\n        }\n    }\n    allowsImmediateRender({ element }, resume) {\n        const event = this.notifyApplicationBeforeRender(element, resume);\n        return !event.defaultPrevented;\n    }\n    viewRenderedSnapshot(snapshot, isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    viewInvalidated() {\n        this.adapter.pageInvalidated();\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location) {\n        return dispatch(\"turbo:click\", { target: link, detail: { url: location.href }, cancelable: true });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", { detail: { url: location.href }, cancelable: true });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        markAsBusy(document.documentElement);\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, resume) {\n        return dispatch(\"turbo:before-render\", { detail: { newBody, resume }, cancelable: true });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        clearBusyState(document.documentElement);\n        return dispatch(\"turbo:load\", { detail: { url: this.location.href, timing } });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", { oldURL: oldURL.toString(), newURL: newURL.toString() }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", { detail: { fetchResponse }, target: frame, cancelable: true });\n    }\n    elementDriveEnabled(element) {\n        const container = element === null || element === void 0 ? void 0 : element.closest(\"[data-turbo]\");\n        if (this.drive) {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") != \"false\";\n            }\n            else {\n                return true;\n            }\n        }\n        else {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") == \"true\";\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    getActionForLink(link) {\n        const action = link.getAttribute(\"data-turbo-action\");\n        return isAction(action) ? action : \"advance\";\n    }\n    getTargetFrameForLink(link) {\n        const frame = link.getAttribute(\"data-turbo-frame\");\n        if (frame) {\n            return frame;\n        }\n        else {\n            const container = link.closest(\"turbo-frame\");\n            if (container) {\n                return container.id;\n            }\n        }\n    }\n    get snapshot() {\n        return this.view.snapshot;\n    }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n    Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n    absoluteURL: {\n        get() {\n            return this.toString();\n        }\n    }\n};\n\nconst session = new Session;\nconst { navigator: navigator$1 } = session;\nfunction start() {\n    session.start();\n}\nfunction registerAdapter(adapter) {\n    session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n    session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n    session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n    session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n    session.renderStreamMessage(message);\n}\nfunction clearCache() {\n    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\n    start: start,\n    registerAdapter: registerAdapter,\n    visit: visit,\n    connectStreamSource: connectStreamSource,\n    disconnectStreamSource: disconnectStreamSource,\n    renderStreamMessage: renderStreamMessage,\n    clearCache: clearCache,\n    setProgressBarDelay: setProgressBarDelay,\n    setConfirmMethod: setConfirmMethod\n});\n\nclass FrameController {\n    constructor(element) {\n        this.fetchResponseLoaded = (fetchResponse) => { };\n        this.currentFetchRequest = null;\n        this.resolveVisitPromise = () => { };\n        this.connected = false;\n        this.hasBeenLoaded = false;\n        this.settingSourceURL = false;\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.linkInterceptor = new LinkInterceptor(this, this.element);\n        this.formInterceptor = new FormInterceptor(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            this.reloadable = false;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            this.linkInterceptor.start();\n            this.formInterceptor.start();\n            this.sourceURLChanged();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.linkInterceptor.stop();\n            this.formInterceptor.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\n    }\n    loadingStyleChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.lazy) {\n            this.appearanceObserver.start();\n        }\n        else {\n            this.appearanceObserver.stop();\n            this.loadSourceURL();\n        }\n    }\n    async loadSourceURL() {\n        if (!this.settingSourceURL && this.enabled && this.isActive && (this.reloadable || this.sourceURL != this.currentURL)) {\n            const previousURL = this.currentURL;\n            this.currentURL = this.sourceURL;\n            if (this.sourceURL) {\n                try {\n                    this.element.loaded = this.visit(expandURL(this.sourceURL));\n                    this.appearanceObserver.stop();\n                    await this.element.loaded;\n                    this.hasBeenLoaded = true;\n                }\n                catch (error) {\n                    this.currentURL = previousURL;\n                    throw error;\n                }\n            }\n        }\n    }\n    async loadResponse(fetchResponse) {\n        if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n            this.sourceURL = fetchResponse.response.url;\n        }\n        try {\n            const html = await fetchResponse.responseHTML;\n            if (html) {\n                const { body } = parseHTMLDocument(html);\n                const snapshot = new Snapshot(await this.extractForeignFrameElement(body));\n                const renderer = new FrameRenderer(this.view.snapshot, snapshot, false, false);\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                await this.view.render(renderer);\n                session.frameRendered(fetchResponse, this.element);\n                session.frameLoaded(this.element);\n                this.fetchResponseLoaded(fetchResponse);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            this.view.invalidate();\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(element) {\n        this.loadSourceURL();\n    }\n    shouldInterceptLinkClick(element, url) {\n        if (element.hasAttribute(\"data-turbo-method\")) {\n            return false;\n        }\n        else {\n            return this.shouldInterceptNavigation(element);\n        }\n    }\n    linkClickIntercepted(element, url) {\n        this.reloadable = true;\n        this.navigateFrame(element, url);\n    }\n    shouldInterceptFormSubmission(element, submitter) {\n        return this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmissionIntercepted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.reloadable = false;\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareHeadersForRequest(fetchRequest.headers, fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareHeadersForRequest(headers, request) {\n        headers[\"Turbo-Frame\"] = this.id;\n    }\n    requestStarted(request) {\n        markAsBusy(this.element);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.resolveVisitPromise();\n    }\n    async requestSucceededWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    requestFailedWithResponse(request, response) {\n        console.error(response);\n        this.resolveVisitPromise();\n    }\n    requestErrored(request, error) {\n        console.error(error);\n        this.resolveVisitPromise();\n    }\n    requestFinished(request) {\n        clearBusyState(this.element);\n    }\n    formSubmissionStarted({ formElement }) {\n        markAsBusy(formElement, this.findFrameElement(formElement));\n    }\n    formSubmissionSucceededWithResponse(formSubmission, response) {\n        const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n        this.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender(snapshot, resume) {\n        return true;\n    }\n    viewRenderedSnapshot(snapshot, isPreview) {\n    }\n    viewInvalidated() {\n    }\n    async visit(url) {\n        var _a;\n        const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams, this.element);\n        (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n        this.currentFetchRequest = request;\n        return new Promise(resolve => {\n            this.resolveVisitPromise = () => {\n                this.resolveVisitPromise = () => { };\n                this.currentFetchRequest = null;\n                resolve();\n            };\n            request.perform();\n        });\n    }\n    navigateFrame(element, url, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        this.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        frame.setAttribute(\"reloadable\", \"\");\n        frame.src = url;\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        const action = getAttribute(\"data-turbo-action\", submitter, element, frame);\n        if (isAction(action)) {\n            const { visitCachedSnapshot } = new SnapshotSubstitution(frame);\n            frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n                if (frame.src) {\n                    const { statusCode, redirected } = fetchResponse;\n                    const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n                    const response = { statusCode, redirected, responseHTML };\n                    session.visit(frame.src, { action, response, visitCachedSnapshot, willRender: false });\n                }\n            };\n        }\n    }\n    findFrameElement(element, submitter) {\n        var _a;\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n    }\n    async extractForeignFrameElement(container) {\n        let element;\n        const id = CSS.escape(this.id);\n        try {\n            if (element = activateElement(container.querySelector(`turbo-frame#${id}`), this.currentURL)) {\n                return element;\n            }\n            if (element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.currentURL)) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n            console.error(`Response has no matching <turbo-frame id=\"${id}\"> element`);\n        }\n        catch (error) {\n            console.error(error);\n        }\n        return new FrameElement();\n    }\n    formActionIsVisitable(form, submitter) {\n        const action = getAction(form, submitter);\n        return locationIsVisitable(expandURL(action), this.rootLocation);\n    }\n    shouldInterceptNavigation(element, submitter) {\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n            return false;\n        }\n        if (!this.enabled || id == \"_top\") {\n            return false;\n        }\n        if (id) {\n            const frameElement = getFrameElementById(id);\n            if (frameElement) {\n                return !frameElement.disabled;\n            }\n        }\n        if (!session.elementDriveEnabled(element)) {\n            return false;\n        }\n        if (submitter && !session.elementDriveEnabled(submitter)) {\n            return false;\n        }\n        return true;\n    }\n    get id() {\n        return this.element.id;\n    }\n    get enabled() {\n        return !this.element.disabled;\n    }\n    get sourceURL() {\n        if (this.element.src) {\n            return this.element.src;\n        }\n    }\n    get reloadable() {\n        const frame = this.findFrameElement(this.element);\n        return frame.hasAttribute(\"reloadable\");\n    }\n    set reloadable(value) {\n        const frame = this.findFrameElement(this.element);\n        if (value) {\n            frame.setAttribute(\"reloadable\", \"\");\n        }\n        else {\n            frame.removeAttribute(\"reloadable\");\n        }\n    }\n    set sourceURL(sourceURL) {\n        this.settingSourceURL = true;\n        this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        this.currentURL = this.element.src;\n        this.settingSourceURL = false;\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n    get isActive() {\n        return this.element.isActive && this.connected;\n    }\n    get rootLocation() {\n        var _a;\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n}\nclass SnapshotSubstitution {\n    constructor(element) {\n        this.visitCachedSnapshot = ({ element }) => {\n            var _a;\n            const { id, clone } = this;\n            (_a = element.querySelector(\"#\" + id)) === null || _a === void 0 ? void 0 : _a.replaceWith(clone);\n        };\n        this.clone = element.cloneNode(true);\n        this.id = element.id;\n    }\n}\nfunction getFrameElementById(id) {\n    if (id != null) {\n        const element = document.getElementById(id);\n        if (element instanceof FrameElement) {\n            return element;\n        }\n    }\n}\nfunction activateElement(element, currentURL) {\n    if (element) {\n        const src = element.getAttribute(\"src\");\n        if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n            throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n        }\n        if (element.ownerDocument !== document) {\n            element = document.importNode(element, true);\n        }\n        if (element instanceof FrameElement) {\n            element.connectedCallback();\n            element.disconnectedCallback();\n            return element;\n        }\n    }\n}\n\nconst StreamActions = {\n    after() {\n        this.targetElements.forEach(e => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n    },\n    append() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach(e => e.append(this.templateContent));\n    },\n    before() {\n        this.targetElements.forEach(e => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n    },\n    prepend() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach(e => e.prepend(this.templateContent));\n    },\n    remove() {\n        this.targetElements.forEach(e => e.remove());\n    },\n    replace() {\n        this.targetElements.forEach(e => e.replaceWith(this.templateContent));\n    },\n    update() {\n        this.targetElements.forEach(e => {\n            e.innerHTML = \"\";\n            e.append(this.templateContent);\n        });\n    }\n};\n\nclass StreamElement extends HTMLElement {\n    async connectedCallback() {\n        try {\n            await this.render();\n        }\n        catch (error) {\n            console.error(error);\n        }\n        finally {\n            this.disconnect();\n        }\n    }\n    async render() {\n        var _a;\n        return (_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n            if (this.dispatchEvent(this.beforeRenderEvent)) {\n                await nextAnimationFrame();\n                this.performAction();\n            }\n        })());\n    }\n    disconnect() {\n        try {\n            this.remove();\n        }\n        catch (_a) { }\n    }\n    removeDuplicateTargetChildren() {\n        this.duplicateChildren.forEach(c => c.remove());\n    }\n    get duplicateChildren() {\n        var _a;\n        const existingChildren = this.targetElements.flatMap(e => [...e.children]).filter(c => !!c.id);\n        const newChildrenIds = [...(_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children].filter(c => !!c.id).map(c => c.id);\n        return existingChildren.filter(c => newChildrenIds.includes(c.id));\n    }\n    get performAction() {\n        if (this.action) {\n            const actionFunction = StreamActions[this.action];\n            if (actionFunction) {\n                return actionFunction;\n            }\n            this.raise(\"unknown action\");\n        }\n        this.raise(\"action attribute is missing\");\n    }\n    get targetElements() {\n        if (this.target) {\n            return this.targetElementsById;\n        }\n        else if (this.targets) {\n            return this.targetElementsByQuery;\n        }\n        else {\n            this.raise(\"target or targets attribute is missing\");\n        }\n    }\n    get templateContent() {\n        return this.templateElement.content.cloneNode(true);\n    }\n    get templateElement() {\n        if (this.firstElementChild instanceof HTMLTemplateElement) {\n            return this.firstElementChild;\n        }\n        this.raise(\"first child element must be a <template> element\");\n    }\n    get action() {\n        return this.getAttribute(\"action\");\n    }\n    get target() {\n        return this.getAttribute(\"target\");\n    }\n    get targets() {\n        return this.getAttribute(\"targets\");\n    }\n    raise(message) {\n        throw new Error(`${this.description}: ${message}`);\n    }\n    get description() {\n        var _a, _b;\n        return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n    }\n    get beforeRenderEvent() {\n        return new CustomEvent(\"turbo:before-stream-render\", { bubbles: true, cancelable: true });\n    }\n    get targetElementsById() {\n        var _a;\n        const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n        if (element !== null) {\n            return [element];\n        }\n        else {\n            return [];\n        }\n    }\n    get targetElementsByQuery() {\n        var _a;\n        const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n        if (elements.length !== 0) {\n            return Array.prototype.slice.call(elements);\n        }\n        else {\n            return [];\n        }\n    }\n}\n\nFrameElement.delegateConstructor = FrameController;\ncustomElements.define(\"turbo-frame\", FrameElement);\ncustomElements.define(\"turbo-stream\", StreamElement);\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    while (element = element.parentElement) {\n        if (element == document.body) {\n            return console.warn(unindent `\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        \u2014\u2014\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `, element.outerHTML);\n        }\n    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { PageRenderer, PageSnapshot, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, { received: this.dispatchMessageEvent.bind(this) })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\ncustomElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n", "export function overrideMethodWithFormmethod({ detail: { formSubmission: { fetchRequest, submitter } } }) {\n  if (submitter && submitter.formMethod && fetchRequest.body.has(\"_method\")) {\n    fetchRequest.body.set(\"_method\", submitter.formMethod)\n  }\n}\n", "import \"./cable_stream_source_element\"\nimport { overrideMethodWithFormmethod } from \"./form_submissions\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\naddEventListener(\"turbo:submit-start\", overrideMethodWithFormmethod)\n", "// Entry point for the build script in your package.json\nimport './controllers'\nimport '@hotwired/turbo-rails'\nimport 'flowbite/dist/flowbite.turbo'\nimport jQuery from 'jquery'\nimport LoadFancySelects from './utils/load_fancy_selects'\nimport { TimeParser, PeriodSelector, Pagination, DropdownPeriodSelector } from 'tranzito_utils_js'\nimport './utils/location_card_templates'\nimport './utils/location_popup_templates'\n\ndocument.addEventListener('turbo:load', () => {\n  // Period select\n  if (document.getElementById('timeSelectionBtnGroup')) {\n    const periodSelector = new PeriodSelector()\n    periodSelector.init()\n  } else if (document.getElementById('periodSelectDropdown')) {\n    const dropdownPeriodSelector = new DropdownPeriodSelector()\n    dropdownPeriodSelector.init()\n  }\n\n  if (!window.timeParser) window.timeParser = new TimeParser()\n  window.timeParser.localize()\n\n  window.pagination = new Pagination()\n  window.pagination.init()\n\n  LoadFancySelects()\n})\n\ndocument.addEventListener('turbo:frame-render', () => {\n  const perPageSelect = document.querySelector('#per_page_select')\n\n  if (perPageSelect) {\n    perPageSelect.addEventListener('change', (event) => {\n      const turboFrameTag = event.currentTarget.closest('turbo-frame')\n      if (!turboFrameTag) return\n\n      const url = new URL(turboFrameTag.src)\n      const urlParams = new URLSearchParams(url.search)\n      urlParams.set('per_page', event.currentTarget.value)\n      turboFrameTag.src = `${url.pathname}?${urlParams.toString()}`\n    })\n  }\n\n  LoadFancySelects()\n})\n\nwindow.$ = window.jQuery = jQuery\n", "import selectize from 'selectize' // eslint-disable-line\n// Just add the `unfancy` and `fancy-select` classes to a select box and it will be a fancy select box!\nconst LoadFancySelects = () => {\n  $('.unfancy.fancy-select select').selectize({ normalize: true })\n  // Remove them so we don't initialize twice\n  $('.unfancy.fancy-select').removeClass('unfancy')\n\n  document.addEventListener('turbo:load', function () {\n    $('.selectize').selectize()\n    // With turbo, selectize placeholder text gets broken\n    $('.selectize-control .not-full input').css('width', '100%')\n  })\n}\nexport default LoadFancySelects\n", "import moment from 'moment-timezone'\n\n// TimeParser updates all HTML elements with class '.convertTime', making them:\n// - Human readable\n// - Displayed with time in provided timezone\n// - With context relevant data (e.g. today shows hour, last month just date)\n// - Gives the element a title of the precise time with seconds (so hovering shows it)\n// - If elements have classes '.preciseTime' or '.preciseTimeSeconds', includes extra specificity in output\n// - If elements have class '.withPreposition' it includes preposition (to make time fit better in a sentence)\n// - Requires elements have HTML content of a time string (e.g. a unix timestamp)\n// - if the window has timeParserSingleFormat truthy, all times are a single format, for consistency\n//   ... except elements that have classes '.variableFormat'\n//\n// Imported and initialized like this:\n// if (!window.timeParser) { window.timeParser = new TimeParser() }\n// window.timeParser.localize() // updates all the elements on the page with the localized time\n//\n// To get span with the localized time:\n// localizedTimeHtml(\"1604337131\", {})\n//\n// You can add this to a react component:\n// componentDidUpdate() { window.timeParser.localize() }\n\nclass TimeParser {\n  constructor () {\n    if (!window.localTimezone) {\n      window.localTimezone = moment.tz.guess()\n    }\n    this.singleFormat = !!window.timeParserSingleFormat\n    this.localTimezone = window.localTimezone\n    moment.tz.setDefault(this.localTimezone)\n    this.yesterdayStart = moment().subtract(1, 'day').startOf('day')\n    this.todayStart = moment().startOf('day')\n    this.todayEnd = moment().endOf('day')\n    this.tomorrowEnd = moment().add(1, 'day').endOf('day')\n    this.todayYear = moment().year()\n  }\n\n  // Directly render localized time elements. Returns an HTML string\n  localizedTimeHtml (\n    timeString,\n    { singleFormat, preciseTime, includeSeconds, withPreposition }\n  ) {\n    const time = this.parse(String(timeString).trim())\n\n    if (time === null) {\n      return '<span></span>'\n    }\n    // If singleFormat was passed as true, override with that, otherwise default to window format\n    const variableFormat = singleFormat ? false : !this.singleFormat\n\n    return `<span title=\"${this.preciseTimeSeconds(\n      time\n    )}\">${this.localizedDateText(\n      time,\n      !variableFormat,\n      preciseTime,\n      includeSeconds,\n      withPreposition\n    )}</span>`\n  }\n\n  // Update all the times (and timezones) on the page\n  // Removes the classes that trigger localization, so it doesn't reupdate the times\n  localize () {\n    // Write times\n    Array.from(document.getElementsByClassName('convertTime')).forEach(el =>\n      this.writeTime(el)\n    )\n\n    // Write timezones\n    Array.from(document.getElementsByClassName('convertTimezone')).forEach(el =>\n      this.writeTimezone(el)\n    )\n\n    // Write hidden timezone fields - so if we're submitting a form, it includes the current timezone\n    Array.from(document.getElementsByClassName('hiddenFieldTimezone')).forEach(\n      el => this.setHiddenTimezoneFields(el)\n    )\n  }\n\n  // ---------\n  // Methods below here are internal methods\n  // ---------\n\n  // Update an element with the current time.\n  // Requires the element have parseable text of a time, pulls properties from the element classes\n  writeTime (el) {\n    const text = el.textContent.trim()\n    const time = this.parse(text)\n    // So running this again doesn't reapply to this element\n    el.classList.remove('convertTime')\n    // So we know which were updated (for styling, future updates, etc)\n    el.classList.add('convertedTime')\n\n    // If we couldn't parse the time, exit\n    if (!(text.length > 0) || time === null) {\n      return\n    }\n    el.innerHTML = this.localizedDateText(\n      time,\n      // If the window has singleFormat, then it should be single format - unless the element has variableFormat class\n      this.singleFormat ? !el.classList.contains('variableFormat') : false,\n      el.classList.contains('preciseTime'),\n      el.classList.contains('preciseTimeSeconds'),\n      el.classList.contains('withPreposition')\n    )\n    el.setAttribute('title', this.preciseTimeSeconds(time))\n  }\n\n  // If we're display time with the hour, we have different formats based on whether we include seconds\n  // this manages that functionality\n  hourFormat (time, baseTimeFormat, includeSeconds, withPreposition) {\n    const prefix = withPreposition ? ' at ' : ''\n    if (includeSeconds) {\n      return `${prefix}${time.format(baseTimeFormat)}:<small>${time.format(\n        'ss'\n      )}</small> ${time.format('a')}`\n    } else {\n      return prefix + time.format(`${baseTimeFormat}a`)\n    }\n  }\n\n  localizedDateText (\n    time,\n    singleFormat,\n    preciseTime,\n    includeSeconds,\n    withPreposition\n  ) {\n    let prefix = ''\n    // If we're doing inconsistent formatting, add a prefix if we're dealing with yesterday or today (not the future)\n    if (\n      !singleFormat &&\n      time < this.tomorrowEnd &&\n      time > this.yesterdayStart\n    ) {\n      // If we're dealing with yesterday or tomorrow, we prepend that\n      if (time < this.todayStart) {\n        prefix = 'Yesterday '\n      } else if (time > this.todayEnd) {\n        prefix = 'Tomorrow '\n      }\n      return (\n        prefix + this.hourFormat(time, 'h:mm', includeSeconds, withPreposition)\n      )\n    }\n    if (withPreposition) {\n      prefix = 'on '\n    }\n\n    // If it's preciseTime (or preciseTimeSeconds), always show the hours and mins\n    if (preciseTime || includeSeconds) {\n      // Make the time less-strong, otherwise it's hard to separate from the date\n      const hourEl = `<span class=\"less-strong\">${this.hourFormat(\n        time,\n        'h:mm',\n        includeSeconds,\n        withPreposition\n      )}</span>`\n      // Only show the year if it isn't this year\n      if (singleFormat || time.year() - this.todayYear !== 0) {\n        return prefix + time.format('YYYY-MM-DD ') + hourEl\n      } else {\n        return prefix + time.format('MMM Do ') + hourEl\n      }\n    }\n    // Otherwise, format in basic format\n    if (singleFormat || time.year() - this.todayYear !== 0) {\n      return prefix + time.format('YYYY-MM-DD')\n    } else {\n      if (withPreposition) {\n        return prefix + time.format('MMM Do')\n      } else {\n        return prefix + time.format('MMM Do')\n      }\n    }\n  }\n\n  preciseTimeSeconds (time) {\n    return time.format('YYYY-MM-DD h:mm:ss a')\n  }\n\n  setHiddenTimezoneFields (el) {\n    el.value = this.localTimezone\n  }\n\n  parse (text) {\n    // If time is only a number, parse as a timestamp\n    // Otherwise, parse as ISO_8601 which is the default time string\n    if (/^\\d+$/.test(text)) {\n      return moment.unix(text)\n    } else if (text !== null) {\n      return moment(text, moment.ISO_8601)\n    }\n    if (text === null || !time.isValid()) {\n      return null\n    }\n  }\n\n  writeTimezone (el) {\n    el.textContent = moment().format('z')\n    el.classList.remove('convertTimezone')\n  }\n}\n\nexport default TimeParser\n", "const urlForPeriod = (selectedPeriod) => {\n  return (\n    window.location.origin +\n    location.pathname +\n    '?' +\n    urlParamsWithNewPeriod(selectedPeriod).toString()\n  )\n}\n\nconst urlParamsWithoutPeriod = () => {\n  const urlParams = new URLSearchParams(window.location.search)\n  urlParams.delete('period')\n  urlParams.delete('timezone')\n  urlParams.delete('start_time')\n  urlParams.delete('end_time')\n  urlParams.append('timezone', window.localTimezone)\n  return urlParams\n}\n\nconst urlParamsWithNewPeriod = (selectedPeriod) => {\n  const urlParams = urlParamsWithoutPeriod()\n  urlParams.append('period', selectedPeriod)\n\n  if (selectedPeriod === 'custom') {\n    urlParams.append(\n      'start_time',\n      document.getElementById('start_time_selector').value\n    )\n    urlParams.append(\n      'end_time',\n      document.getElementById('end_time_selector').value\n    )\n  }\n  return urlParams\n}\n\nexport { urlForPeriod }\n", "import { urlForPeriod } from '../utils/period_select'\nclass PeriodSelector {\n  init () {\n    this.autoSubmit = !(\n      document.getElementById('timeSelectionBtnGroup').attributes['data-nosubmit']?.value === 'true'\n    )\n    this.enablePeriodSelection()\n  }\n\n  enableCustomSelection () {\n    // Show the custom selection inputs\n    document\n      .querySelectorAll('#timeSelectionBtnGroup .period-select-standard')\n      .forEach((btn) => {\n        btn.classList.remove('active')\n      })\n    document.getElementById('periodSelectCustom').classList.add('active')\n    document.getElementById('timeSelectionBtnGroup').classList.add('custom-period-selected')\n    document.getElementById('timeSelectionCustom').classList.add('in')\n    document.getElementById('timeSelectionCustom').style.display = 'flex'\n  }\n\n  disableCustomSelection () {\n    document.getElementById('timeSelectionCustom').classList.remove('in')\n    document.getElementById('timeSelectionCustom').style.display = 'none'\n    document.getElementById('timeSelectionBtnGroup').classList.remove('custom-period-selected')\n  }\n\n  enablePeriodSelection () {\n    const self = this\n    document.querySelectorAll('#timeSelectionBtnGroup .btn').forEach((btn) => {\n      btn.addEventListener('click', (e) => {\n        let eventTarget = e.currentTarget\n        let selectedPeriod = eventTarget.attributes['data-period']?.value\n        // Sometimes, the target isn't the button, it's something inside the button. In that case, find the correct period\n        if (typeof selectedPeriod === 'undefined') {\n          // If we can't figure out what the target was, return false, so the user clicks again\n          if (!eventTarget.parentElement?.classList.contains('btn')) return\n\n          eventTarget = eventTarget.parentElement?.classList.contains('btn')\n          selectedPeriod = eventTarget.attributes['data-period']?.value\n        }\n        // If it's a link (e.g. \"past hour\") just follow the link!\n        if (eventTarget.attributes.href?.value) {\n          return true\n        }\n\n        if (selectedPeriod === 'custom') {\n          return self.enableCustomSelection()\n        } else {\n          // Not really necessary, but makes it a little slicker\n          self.disableCustomSelection()\n        }\n        document.querySelector('#timeSelectionBtnGroup .period-select-standard.active').classList.remove('active')\n        eventTarget.classList.add('active')\n        if (self.autoSubmit) {\n          return (location.href = self.urlForPeriod(selectedPeriod))\n        } else {\n          // log.debug(self.urlForPeriod(selectedPeriod));\n          return true\n        }\n      })\n    })\n\n    // If not autosubmitting, this needs to be managed separately\n    if (self.autoSubmit) {\n      document\n        .getElementById('timeSelectionCustom')\n        .addEventListener('submit', (e) => {\n          location.href = urlForPeriod('custom')\n          return false\n        })\n    }\n  }\n}\n\nexport default PeriodSelector\n", "export class Pagination {\n  initPerPageSelect () {\n    document.querySelector('#per_page_select')?.addEventListener('change', function (e) {\n      const urlParams = new URLSearchParams(window.location.search)\n      urlParams.delete('per_page')\n      urlParams.append('per_page', document.querySelector('#per_page_select').value)\n      window.location = `${location.pathname}?${urlParams.toString()}`\n    })\n  }\n\n  init () {\n    this.initPerPageSelect()\n  }\n}\n\nexport default Pagination\n", "import flatpickr from 'flatpickr/dist/flatpickr'\nimport { urlForPeriod } from '../utils/period_select'\n\nclass DropdownPeriodSelector {\n  init () {\n    this.initDropdownPeriodSelector()\n    this.enableDropdown()\n  }\n\n  enableDropdown () {\n    const dropdown = document.getElementById('periodSelectDropdownButton')\n    dropdown.addEventListener('click', () => {\n      document.getElementById('periodSelectDropdownMenu').style.display = 'block'\n      dropdown.classList.add('rotate-icon')\n    })\n  }\n\n  initDropdownPeriodSelector () {\n    document.getElementById('periodSelectDropdown')\n      .addEventListener('click', () => {\n        const selectedPeriod = document.querySelector('#periodSelectDropdown .dropdown-item.active a')\n          .attributes['data-period'].value\n        if (selectedPeriod === 'custom') this.initCustomPeriodSelector()\n      })\n    this.enablePeriodSelection()\n  }\n\n  enablePeriodSelection () {\n    document.querySelectorAll('#periodSelectDropdown .dropdown-item').forEach((dropdownLink) => {\n      dropdownLink.addEventListener('click', (e) => {\n        if (dropdownLink.children[0].attributes['data-period'].value === 'custom') e.preventDefault()\n\n        document.querySelector('#periodSelectDropdown .dropdown-item.active').classList.remove('active')\n        e.currentTarget.classList.add('active')\n      })\n    })\n  }\n\n  initCustomPeriodSelector () {\n    const startDate = document.querySelector('#dropdownCustomSelectionForm #start_time_selector').value\n    const endDate = document.querySelector('#dropdownCustomSelectionForm #end_time_selector').value\n\n    flatpickr('#customPeriodSelectDatePicker', {\n      mode: 'range',\n      appendTo: document.getElementById('dropdownCustomSelectionForm'),\n      defaultDate: [startDate, endDate],\n      dateFormat: 'Y-m-d',\n      disable: [(date) => date >= new Date()],\n      monthSelectorType: 'static',\n      onValueUpdate: (selectedDates, dateStr, instance) => this.updateCustomDatePicker(selectedDates)\n    }).open()\n  }\n\n  updateCustomDatePicker (datesArr) {\n    if (datesArr.length < 2) return false\n\n    document.querySelector('#dropdownCustomSelectionForm #start_time_selector').value = datesArr[0]\n    document.querySelector('#dropdownCustomSelectionForm #end_time_selector').value = datesArr[1]\n    location.href = urlForPeriod('custom')\n  }\n}\n\nexport default DropdownPeriodSelector\n", "/* eslint-disable camelcase */\nif (!window.locationCardTemplates) {\n  window.locationCardTemplates = {}\n}\n\nconst locationStateTemplate = (location) => {\n  const { state, state_tag, state_timestamp, category, kg_asset_name, has_assets, tvid } = location\n  let locationStateTemplateHtml = ''\n\n  if (category === 'legacy') {\n    locationStateTemplateHtml = `\n      <div>\n        <div><span class=\"text-sm font-semibold text-secondary text-end\">AssetName: ${kg_asset_name || 'N/A'}</span></div>\n      </div>`\n  } else if (!has_assets) {\n    locationStateTemplateHtml = `\n      <div class=\"future-location text-gray-600\">\n        <div><span class=\"text-sm font-semibold\">Future Location</span></div>\n        <div><span class=\"text-sm\">TVID: ${tvid || 'N/A'}</span></div>\n      </div>`\n  } else {\n    locationStateTemplateHtml = `\n      <div class=\"status-bar\">\n        <div><span class=\"tag ${state_tag || ''}-tag\">${state}</span></div>\n        ${\n          state === 'Healthy'\n          ? ''\n          : `<div><span class=\"timestamp timestamp-${state ? state.toLowerCase() : ''}\">Since: ${state_timestamp || 'N/A'}</span></div>`\n        }\n      </div>`\n  }\n\n  return locationStateTemplateHtml\n}\n\nconst locationListAssetsTemplate = (assets, showAsset, category, shelterStatuses) => {\n  if (!assets || assets.length === 0 || !showAsset) {\n    return ''\n  }\n\n  if (category === 'combo_shelter' && shelterStatuses && shelterStatuses.length > 0) {\n    const assetsByShelter = {}\n    const shelterMap = {}\n\n    shelterStatuses.forEach(shelter => {\n      shelterMap[shelter.gocodes_asset_id] = shelter\n      assetsByShelter[shelter.gocodes_asset_id] = []\n    })\n\n    assets.forEach(asset => {\n      if (asset.gocodes_kit_asset_id && assetsByShelter[asset.gocodes_kit_asset_id]) {\n        assetsByShelter[asset.gocodes_kit_asset_id].push(asset)\n      } else {\n        if (!assetsByShelter.unassigned) {\n          assetsByShelter.unassigned = []\n        }\n        assetsByShelter.unassigned.push(asset)\n      }\n    })\n\n    const shelterGroupsHtml = Object.entries(assetsByShelter)\n      .filter(([_, assets]) => assets.length > 0)\n      .map(([shelterId, shelterAssets]) => {\n        const shelter = shelterMap[shelterId]\n        const shelterName = shelter ? shelter.asset_type : 'Unassigned Assets'\n        return `\n          <div class=\"shelter-asset-group\">\n            <div class=\"shelter-asset-group-header\">\n              <span class=\"font-semibold text-sm\">${shelterName}</span>\n              ${shelter ? `<span class=\"tag ${shelter.state_tag || ''}-tag ml-2 text-xs\">${shelter.state}</span>` : ''}\n            </div>\n            <table class=\"asset-table\">\n              <tbody>\n                ${shelterAssets.map(asset => locationAssetTemplate(asset)).join('')}\n              </tbody>\n            </table>\n          </div>\n        `\n      }).join('')\n\n    return `\n      <div class=\"secondry-card ${showAsset ? '' : 'hidden'}\">\n        ${shelterGroupsHtml}\n      </div>`\n  } else {\n    const assetsHtml = `\n      <div class=\"secondry-card ${showAsset ? '' : 'hidden'}\">\n        <table class=\"asset-table\">\n          <tbody>\n            ${assets.map(asset => locationAssetTemplate(asset)).join('')}\n          </tbody>\n        </table>\n      </div>`\n\n    return assetsHtml\n  }\n}\n\nconst locationAssetTemplate = ({ asset_type, state, state_tag }) => {\n  return `\n    <tr>\n      <td>${asset_type}</td>\n      <td></td>\n      <td>\n        <span class=\"tag ${state_tag || ''}-tag\">\n          ${state}\n        </span>\n      </td>\n    </tr>`\n}\n\nconst cardContentTemplate = (location, showAssets) => {\n  const { name, category, humanized_category, assets, location_card_icon } = location\n\n  const cardContentTemplateHtml = `\n    <div class=\"card-title\">\n      ${location_card_icon || ''}\n      <span>${humanized_category || category}</span>\n      ${assets && assets.length > 0 ? `<span>(${assets.length} assets)</span>` : ''}\n    </div>\n    <div class=\"card-body\">\n      <h6>${name}</h6>\n      ${locationStateTemplate(location)}\n    </div>`\n\n  return cardContentTemplateHtml\n}\n\nwindow.locationCardTemplates.legacy = (location, showAsset, locationSvg) => {\n  const { id, assets, category } = location\n  const templateHtml = `\n    <div class=\"sidebar-card\">\n      <div class=\"main-card\">\n        <a data-turbo=\"false\" href=\"/location_management/locations/${id}\">${cardContentTemplate(location, locationSvg)}</a>\n      </div>\n      ${locationListAssetsTemplate(assets, showAsset, category)}\n    </div>`\n  return templateHtml\n}\n\nwindow.locationCardTemplates.static = (location, showAsset, locationSvg) => {\n  const { id, assets, category } = location\n  const templateHtml = `\n    <div class=\"sidebar-card\">\n      <div class=\"main-card\">\n        <a data-turbo=\"false\" href=\"/location_management/locations/${id}\">${cardContentTemplate(location, locationSvg)}</a>\n      </div>\n      ${locationListAssetsTemplate(assets, showAsset, category)}\n    </div>`\n  return templateHtml\n}\n\nwindow.locationCardTemplates.digital = (location, showAsset, locationSvg) => {\n  const { id, assets, category } = location\n  const templateHtml = `\n    <div class=\"sidebar-card\">\n      <div class=\"main-card\">\n        <a data-turbo=\"false\" href=\"/location_management/locations/${id}\">${cardContentTemplate(location, locationSvg)}</a>\n      </div>\n      ${locationListAssetsTemplate(assets, showAsset, category)}\n    </div>`\n  return templateHtml\n}\n\nwindow.locationCardTemplates.urban_panel = (location, showAsset, locationSvg) => {\n  const { id, assets, category } = location\n  const templateHtml = `\n    <div class=\"sidebar-card\">\n      <div class=\"main-card\">\n        <a data-turbo=\"false\" href=\"/location_management/locations/${id}\">${cardContentTemplate(location, locationSvg)}</a>\n      </div>\n      ${locationListAssetsTemplate(assets, showAsset, category)}\n    </div>`\n  return templateHtml\n}\n\nwindow.locationCardTemplates.icon = (location, showAsset, locationSvg) => {\n  const { id, assets, category } = location\n  const templateHtml = `\n    <div class=\"sidebar-card\">\n      <div class=\"main-card\">\n        <a data-turbo=\"false\" href=\"/location_management/locations/${id}\">${cardContentTemplate(location, locationSvg)}</a>\n      </div>\n      ${locationListAssetsTemplate(assets, showAsset, category)}\n    </div>`\n  return templateHtml\n}\n\nwindow.locationCardTemplates.combo_shelter = (location, showAsset, locationSvg) => {\n  const { id, assets, category, shelter_statuses } = location\n  const templateHtml = `\n    <div class=\"sidebar-card\">\n      <div class=\"main-card\">\n        <a data-turbo=\"false\" href=\"/location_management/locations/${id}\">${cardContentTemplate(location, locationSvg)}</a>\n      </div>\n      ${locationListAssetsTemplate(assets, showAsset, category, shelter_statuses)}\n    </div>`\n  return templateHtml\n}\n\nwindow.locationCardTemplates.future_location = (location, showAsset, locationSvg) => {\n  const { id, assets, category } = location\n  const templateHtml = `\n    <div class=\"sidebar-card\">\n      <div class=\"main-card\">\n        <a data-turbo=\"false\" href=\"/location_management/locations/${id}\">${cardContentTemplate(location, locationSvg)}</a>\n      </div>\n      ${locationListAssetsTemplate(assets, showAsset, category)}\n    </div>`\n  return templateHtml\n}\n", "/* eslint-disable camelcase */\nif (!window.locationPopupTemplates) {\n  window.locationPopupTemplates = {}\n}\n\nwindow.locationPopupTemplates.legacy = (location, assetsCount) => {\n  const { name, tvid } = location\n  return `\n    <div>\n      <h6>${name}</h6>\n      <div class=\"mt-1 p2\">Legacy Location</div>\n      ${tvid\n? `\n        <div class=\"flex w-full justify-between items-center text-xs my-2\">\n          <span>TVID: ${tvid}</span>\n        </div>`\n: ''}\n    </div>\n  `\n}\n\nwindow.locationPopupTemplates.static = (location, assetsCount) => {\n  const { id, name, tvid, humanized_category, state, state_tag } = location\n  return `\n    <div>\n      <h6>${name}</h6>\n      <div class=\"flex justify-between items-center mt-1 p2\">\n        <span>${humanized_category || 'Static Shelter'} ${assetsCount === 0 ? '' : `(${assetsCount})`}</span>\n        <span class=\"ml-3 tag ${state_tag || ''}-tag\">${state}</span>\n      </div>\n      <div class=\"flex w-full justify-between items-center text-xs my-2\">\n        ${tvid ? `<span>TVID: ${tvid}</span>` : ''}\n        <span><a class=\"hover:underline text-primary\" href=\"/location_management/locations/${id}\">Visit Location</a></span>\n      </div>\n    </div>\n  `\n}\n\nwindow.locationPopupTemplates.digital = (location, assetsCount) => {\n  const { id, name, tvid, humanized_category, state, state_tag } = location\n  return `\n    <div>\n      <h6>${name}</h6>\n      <div class=\"flex justify-between items-center mt-1 p2\">\n        <span>${humanized_category || 'Digital Shelter'} ${assetsCount === 0 ? '' : `(${assetsCount})`}</span>\n        <span class=\"ml-3 tag ${state_tag || ''}-tag\">${state}</span>\n      </div>\n      <div class=\"flex w-full justify-between items-center text-xs my-2\">\n        ${tvid ? `<span>TVID: ${tvid}</span>` : ''}\n        <span><a class=\"hover:underline text-primary\" href=\"/location_management/locations/${id}\">Visit Location</a></span>\n      </div>\n    </div>\n  `\n}\n\nwindow.locationPopupTemplates.urban_panel = (location, assetsCount) => {\n  const { id, name, tvid, humanized_category, state, state_tag } = location\n  return `\n    <div>\n      <h6>${name}</h6>\n      <div class=\"flex justify-between items-center mt-1 p2\">\n        <span>${humanized_category || 'Urban Panel'} ${assetsCount === 0 ? '' : `(${assetsCount})`}</span>\n        <span class=\"ml-3 tag ${state_tag || ''}-tag\">${state}</span>\n      </div>\n      <div class=\"flex w-full justify-between items-center text-xs my-2\">\n        ${tvid ? `<span>TVID: ${tvid}</span>` : ''}\n        <span><a class=\"hover:underline text-primary\" href=\"/location_management/locations/${id}\">Visit Location</a></span>\n      </div>\n    </div>\n  `\n}\n\nwindow.locationPopupTemplates.icon = (location, assetsCount) => {\n  const { id, name, tvid, humanized_category, state, state_tag } = location\n  return `\n    <div>\n      <h6>${name}</h6>\n      <div class=\"flex justify-between items-center mt-1 p2\">\n        <span>${humanized_category || 'Icon'} ${assetsCount === 0 ? '' : `(${assetsCount})`}</span>\n        <span class=\"ml-3 tag ${state_tag || ''}-tag\">${state}</span>\n      </div>\n      <div class=\"flex w-full justify-between items-center text-xs my-2\">\n        ${tvid ? `<span>TVID: ${tvid}</span>` : ''}\n        <span><a class=\"hover:underline text-primary\" href=\"/location_management/locations/${id}\">Visit Location</a></span>\n      </div>\n    </div>\n  `\n}\n\nwindow.locationPopupTemplates.combo_shelter = (location, assetsCount) => {\n  const { id, name, tvid, humanized_category, state, state_tag, shelter_statuses } = location || {}\n\n  let shelterStatusesArray = []\n  if (shelter_statuses) {\n    if (typeof shelter_statuses === 'string') {\n      try {\n        shelterStatusesArray = JSON.parse(shelter_statuses)\n      } catch (e) {\n        console.warn('Failed to parse shelter_statuses:', e)\n      }\n    } else if (Array.isArray(shelter_statuses)) {\n      shelterStatusesArray = shelter_statuses\n    }\n  }\n\n  const shelterStatusesHtml = shelterStatusesArray && shelterStatusesArray.length > 0\n    ? shelterStatusesArray.map(shelter => {\n        const assetType = shelter?.asset_type || shelter?.assetType || 'Unknown'\n        const shelterState = shelter?.state || 'Unknown'\n        const shelterStateTag = shelter?.state_tag || shelter?.stateTag || ''\n        return `\n          <div class=\"flex justify-between items-center text-xs my-1\">\n            <span>${assetType}:</span>\n            <span class=\"tag ${shelterStateTag}-tag ml-2\">${shelterState}</span>\n          </div>\n        `\n      }).join('')\n    : ''\n\n  return `\n    <div>\n      <h6>${name || 'Unknown Location'}</h6>\n      <div class=\"flex justify-between items-center mt-1 p2\">\n        <span>${humanized_category || 'Combo Shelter'} ${assetsCount === 0 ? '' : `(${assetsCount || 0})`}</span>\n        ${state ? `<span class=\"ml-3 tag ${state_tag || ''}-tag\">${state}</span>` : ''}\n      </div>\n      ${shelterStatusesHtml ? `<div class=\"mt-2\">${shelterStatusesHtml}</div>` : ''}\n      <div class=\"flex w-full justify-between items-center text-xs my-2\">\n        ${tvid ? `<span>TVID: ${tvid}</span>` : ''}\n        <span><a class=\"hover:underline text-primary\" href=\"/location_management/locations/${id}\">Visit Location</a></span>\n      </div>\n    </div>\n  `\n}\n\nwindow.locationPopupTemplates.future_location = (location, assetsCount) => {\n  const { name, tvid } = location\n  return `\n    <div>\n      <h6>${name}</h6>\n      <div class=\"mt-1 p2\">Future Location</div>\n      ${tvid\n? `\n        <div class=\"flex w-full justify-between items-center text-xs my-2\">\n          <span>TVID: ${tvid}</span>\n        </div>`\n: ''}\n    </div>\n  `\n}\n"],
  "mappings": "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G,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAClC,WAAW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AAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UAAS;AAAA,UACnG;AAAA,UAAS;AAAA,UAAS;AAAA,QACtB,CAAC;AAID,qBAAa,iBAAiB,WAAW,KAAK;AAAA,UAC1C;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACxG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC7G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UACzG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UACxG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACxG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UACxG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAC9G;AAAA,UAAM;AAAA,UAAG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC7G;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAC5G;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAI;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAC1G;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAG;AAAA,UAAM;AAAA,UAAG;AAAA,UAAM;AAAA,UAAG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC5G;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAC7G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACzG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UACzG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAG;AAAA,UAAG;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAI;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAC3G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UACzG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACxG;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC3G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC1G;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK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",
  "names": ["message", "Actions", "resolve", "__signature__", "_default", "InvalidCharacterError", "message", "this", "prototype", "Error", "name", "window", "atob", "bind", "input", "str", "String", "replace", "length", "bs", "buffer", "bc", "idx", "output", "charAt", "fromCharCode", "indexOf", "decodeURIComponent", "m", "p", "code", "charCodeAt", "toString", "toUpperCase", "err", "InvalidTokenError", "token", "options", "pos", "header", "JSON", "parse", "base64_url_decode", "split", "e", "wrapper", "jwtDecode", "default", "embedDashboard", "resolve", "key", "ourPort", "module", "global", "exports", "isNullOrUndefined", "__extends", "fn", "CustomError", "message", "BinaryBitmap", "left", "top", "index", "from", "to", "start", "end", "max", "offset", "DecodeHintType", "CharacterSetValueIdentifiers", "code", "callback", "right", "bottom", "hash", "localLuminances", "HybridBinarizer", "min", "HTMLCanvasElementLuminanceSource", "alpha", "__awaiter", "resolve", "format", "BarcodeFormat", "ResultMetadataType", "Table", "patterns", "color", "cx", "cy", "error", "key", "resultPoint", "readers", "startEnd", "elements", "numeric", "value", "version", "Mode", "ErrorCorrectionLevelValues", "DataMaskValues", "ModeValues", "column", "MultiFormatReader", "EncodeHintType", "add", "SHIFT_TABLE", "CHAR_MAP", "forEvents", "events", "callback", "split", "forEach", "event", "MicroEvent", "constructor", "_events", "on", "fct", "event_array", "push", "off", "n", "arguments", "length", "undefined", "splice", "indexOf", "trigger", "args", "self", "apply", "MicroPlugin", "Interface", "plugins", "names", "settings", "requested", "loaded", "define", "name", "fn", "initializePlugins", "key", "queue", "Array", "isArray", "plugin", "options", "hasOwnProperty", "shift", "require", "loadPlugin", "Error", "start", "code_points", "unicode_map", "set", "clone", "match", "iterate", "get_field", "object", "getDom", "query", "jquery", "HTMLElement", "isHtmlString", "tpl", "document", "createElement", "innerHTML", "trim", "content", "firstChild", "querySelector", "arg", "escapeQuery", "replace", "triggerEvent", "dom_el", "event_name", "createEvent", "initEvent", "dispatchEvent", "applyCSS", "css", "Object", "assign", "style", "addClasses", "elmts", "classes", "norm_classes", "classesArray", "castAsArray", "map", "el", "cls", "classList", "add", "removeClasses", "remove", "_classes", "concat", "filter", "Boolean", "parentMatch", "target", "selector", "wrapper", "contains", "matches", "parentNode", "getTail", "list", "direction", "isEmptyObject", "obj", "keys", "nodeIndex", "amongst", "nodeName", "i", "previousElementSibling", "setAttr", "attrs", "val", "attr", "removeAttribute", "setAttribute", "replaceNode", "existing", "replacement", "replaceChild", "highlight", "element", "regex", "RegExp", "highlightText", "node", "data", "spannode", "className", "middlebit", "splitText", "index", "middleclone", "cloneNode", "appendChild", "highlightChildren", "nodeType", "childNodes", "test", "tagName", "from", "highlightRecursive", "removeHighlight", "elements", "querySelectorAll", "prototype", "call", "parent", "normalize", "KEY_A", "KEY_RETURN", "KEY_ESC", "KEY_LEFT", "KEY_UP", "KEY_RIGHT", "KEY_DOWN", "KEY_BACKSPACE", "KEY_DELETE", "KEY_TAB", "IS_MAC", "navigator", "userAgent", "KEY_SHORTCUT", "defaults", "optgroups", "delimiter", "splitOn", "persist", "diacritics", "create", "createOnBlur", "createFilter", "openOnFocus", "shouldOpen", "maxOptions", "maxItems", "hideSelected", "duplicates", "addPrecedence", "selectOnTab", "preload", "allowEmptyOption", "refreshThrottle", "loadThrottle", "loadingClass", "dataAttr", "optgroupField", "valueField", "labelField", "disabledField", "optgroupLabelField", "optgroupValueField", "lockOptgroupOrder", "sortField", "searchField", "searchConjunction", "mode", "wrapperClass", "controlClass", "dropdownClass", "dropdownContentClass", "itemClass", "optionClass", "dropdownParent", "controlInput", "copyClassesToDropdown", "placeholder", "hidePlaceholder", "shouldLoad", "render", "hash_key", "value", "get_hash", "escape_html", "str", "timeout", "setTimeout", "loadDebounce", "delay", "loading", "Math", "max", "clearTimeout", "loadedSearches", "debounce_events", "types", "type", "event_args", "getSelection", "input", "selectionStart", "selectionEnd", "preventDefault", "evt", "stop", "stopPropagation", "addEvent", "addEventListener", "isKeyDown", "key_name", "count", "altKey", "ctrlKey", "shiftKey", "metaKey", "getId", "id", "existing_id", "getAttribute", "addSlashes", "append", "getSettings", "settings_user", "attr_data", "field_label", "field_value", "field_disabled", "field_optgroup", "field_optgroup_label", "field_optgroup_value", "tag_name", "toLowerCase", "option", "textContent", "settings_element", "items", "init_select", "optionsMap", "group_count", "$order", "readData", "dataset", "json", "JSON", "parse", "addOption", "group", "arr", "option_data", "disabled", "$option", "selected", "addGroup", "optgroup", "optgroup_data", "children", "hasAttribute", "child", "init_textbox", "data_raw", "values", "opt", "instance_i", "TomSelect", "input_arg", "user_settings", "control_input", "dropdown", "control", "dropdown_content", "focus_node", "order", "tabIndex", "is_select_tag", "rtl", "inputId", "_destroy", "sifter", "isOpen", "isDisabled", "isReadOnly", "isRequired", "isInvalid", "isValid", "isLocked", "isFocused", "isInputHidden", "isSetup", "ignoreFocus", "ignoreHover", "hasOptions", "currentResults", "lastValue", "caretPos", "activeOption", "activeItems", "userOptions", "refreshTimeout", "dir", "tomselect", "computedStyle", "window", "getComputedStyle", "getPropertyValue", "required", "Sifter", "setupCallbacks", "setupTemplates", "_render", "inputMode", "setup", "passive_event", "passive", "listboxId", "role", "control_id", "label", "label_click", "focus", "bind", "for", "label_id", "width", "classes_plugins", "join", "multiple", "escape_regex", "load", "e", "target_match", "onOptionHover", "capture", "onOptionSelect", "onItemSelect", "onClick", "onKeyDown", "onKeyPress", "onInput", "onBlur", "onFocus", "onPaste", "doc_mousedown", "composedPath", "blur", "inputState", "win_scroll", "positionDropdown", "removeEventListener", "revertSettings", "insertAdjacentElement", "sync", "refreshState", "updateOriginalInput", "refreshItems", "close", "disable", "readOnly", "setReadOnly", "enable", "onChange", "setupOptions", "addOptions", "registerOptionGroup", "templates", "optgroup_header", "escape", "item", "option_create", "no_results", "not_loading", "callbacks", "get_settings", "setValue", "lastQuery", "clearActiveItems", "onMouseDown", "pastedText", "inputValue", "splitInput", "piece", "hash", "addItem", "createItem", "character", "String", "fromCharCode", "keyCode", "which", "constants", "selectAll", "open", "next", "getAdjacent", "setActiveOption", "prev", "canSelect", "activeElement", "advanceSelection", "deleteSelection", "_onInput", "refreshOptions", "wasFocused", "hasFocus", "deactivate", "setActiveItem", "setCaret", "parentElement", "closeAfterSelect", "canLoad", "loadCallback", "clearActiveOption", "setTextboxValue", "changed", "getValue", "silent", "clear", "addItems", "setMaxItems", "eventName", "begin", "end", "swap", "last", "getLastActive", "setActiveItemClass", "removeActiveItem", "last_active", "idx", "scroll", "scrollToOption", "behavior", "height_menu", "clientHeight", "scrollTop", "height_item", "offsetHeight", "y", "getBoundingClientRect", "top", "scrollBehavior", "controlChildren", "toggle", "offsetWidth", "getScoreFunction", "getSearchOptions", "sort", "field", "fields", "conjunction", "nesting", "search", "result", "calculateScore", "score", "hashed", "triggerDropdown", "j", "k", "html", "has_create_option", "active_group", "groups", "groups_order", "same_query", "results", "active_option", "show_dropdown", "closest", "min", "getGroupFragment", "group_order_i", "order_group", "fragment", "group_fragment", "createDocumentFragment", "opt_value", "opt_hash", "option_el", "getOption", "includes", "self_optgroup", "$id", "toString", "a", "b", "group_order", "group_heading", "group_options", "header", "group_html", "tokens", "tok", "add_template", "template", "insertBefore", "canCreate", "active_index", "selectable", "user_created", "dat", "registerOption", "addOptionGroup", "hashed_id", "removeOptionGroup", "clearCache", "clearOptionGroups", "updateOption", "item_new", "index_item", "value_old", "value_new", "data_old", "getItem", "uncacheValue", "option_new", "removeOption", "removeItem", "clearOptions", "boundFilter", "clearFilter", "$div", "all", "x", "last_item", "isPending", "wasFull", "isFull", "insertAtCaret", "caret", "output", "lock", "created", "unlock", "refreshValidityState", "wrap_classList", "validity", "valid", "opts", "empty_option", "AddSelected", "has_selected", "reuse_opt", "visibility", "display", "context", "rect", "scrollY", "left", "scrollX", "selection", "tail", "rm_items", "rm_item", "shouldDelete", "pop", "onDelete", "adjacent", "nextElementSibling", "moveCaret", "new_pos", "setLocked", "setDisabled", "destroy", "templateName", "hook", "when", "method", "new_fn", "orig_method", "result_new", "orig_onOptionSelect", "cbOptions", "checkedClassNames", "uncheckedClassNames", "UpdateChecked", "checkbox", "toCheck", "checked", "UpdateCheckbox", "HTMLInputElement", "orig_render_option", "rendered", "prepend", "title", "button", "insertAfter", "referenceNode", "newNode", "_referenceNode$parent", "nextSibling", "_referenceNode$parent2", "isBefore", "_newNode", "orig_lock", "orig_unlock", "sortable", "drag_item", "orig_render_item", "mousedown", "dragStart", "dragOver", "moveitem", "dragLeave", "targetitem", "dragitem", "dragend", "_drag_item", "headerClass", "titleRowClass", "labelClass", "closeClass", "close_link", "div", "orig_onBlur", "relatedTarget", "preventScroll", "test_input", "cssText", "transfer_styles", "style_name", "resize", "clientWidth", "orig_deleteSelection", "orig_keydown", "previousSibling", "close_button", "text", "orig_canLoad", "orig_clearActiveOption", "orig_loadCallback", "pagination", "loading_more", "load_more_opt", "default_values", "shouldLoadMore", "scroll_percent", "scrollHeight", "firstUrl", "canLoadMore", "setNextUrl", "next_url", "getUrl", "clearPagination", "first_option", "no_more_results", "change_listener", "checkbox_options", "clear_button", "drag_drop", "dropdown_header", "caret_position", "dropdown_input", "input_autogrow", "no_backspace_delete", "no_active_items", "optgroup_columns", "remove_button", "restore_on_backspace", "virtual_scroll", "module", "global", "__assign", "defaults", "debounce", "fn", "key", "error", "format", "match", "_a", "source", "self", "flatpickr", "set", "maxTime", "minTime", "element", "triggerChange", "offset", "month", "formats", "top", "left", "right", "min", "max", "instances", "time", "consumer", "error", "message", "extend", "key", "consumer", "consumer", "subscription", "module", "bottom", "right", "left", "auto", "basePlacements", "start", "end", "clippingParents", "viewport", "popper", "reference", "variationPlacements", "beforeRead", "read", "afterRead", "beforeMain", "main", "afterMain", "beforeWrite", "write", "afterWrite", "modifierPhases", "getNodeName", "getWindow", "isElement", "isHTMLElement", "isShadowRoot", "applyStyles", "name", "effect", "style", "getBasePlacement", "round", "getUAString", "isLayoutViewport", "getBoundingClientRect", "getLayoutRect", "contains", "getComputedStyle", "isTableElement", "getDocumentElement", "getParentNode", "getTrueOffsetParent", "getContainingBlock", "getOffsetParent", "window", "getMainAxisFromPlacement", "within", "min", "max", "withinMaxClamp", "getFreshSideObject", "mergePaddingObject", "expandToHashMap", "key", "toPaddingObject", "arrow", "popperOffsets", "offset", "getVariation", "unsetSides", "roundOffsetsByDPR", "mapToStyles", "computeStyles", "passive", "fn", "hash", "getOppositePlacement", "getOppositeVariationPlacement", "getWindowScroll", "getWindowScrollBarX", "getViewportRect", "getDocumentRect", "isScrollParent", "getScrollParent", "listScrollParents", "rectToClientRect", "getInnerBoundingClientRect", "getClientRectFromMixedType", "getClippingParents", "getClippingRect", "computeOffsets", "detectOverflow", "computeAutoPlacement", "placements", "placement", "getExpandedFallbackPlacements", "flip", "_loop", "_i", "checks", "getSideOffsets", "isAnySideFullyClipped", "hide", "distanceAndSkiddingToXY", "getAltAxis", "preventOverflow", "getHTMLElementScroll", "getNodeScroll", "isElementScaled", "getCompositeRect", "order", "map", "orderModifiers", "debounce", "resolve", "mergeByName", "merged", "INVALID_ELEMENT_ERROR", "INFINITE_LOOP_ERROR", "DEFAULT_OPTIONS", "areValidElements", "popperGenerator", "defaultModifiers", "defaultOptions", "createPopper", "options", "index", "state", "noopFn", "__webpack_require__", "Default", "DefaultInstanceOptions", "Accordion", "__assign", "_a", "_b", "callback", "initAccordions", "exports", "Carousel", "initCarousels", "CopyClipboard", "initCopyClipboards", "Collapse", "initCollapses", "Dial", "initDials", "Dismiss", "initDismisses", "Drawer", "initDrawers", "Dropdown", "__spreadArray", "initDropdowns", "initFlowbite", "InputCounter", "initInputCounters", "Modal", "initModals", "Popover", "initPopovers", "Tabs", "initTabs", "Tooltip", "initTooltips", "Events", "Instances", "instances", "module", "global", "window", "indexOf", "isFunction", "isWindow", "document", "code", "version", "jQuery", "callback", "clone", "arr", "support", "tokenize", "contains", "hasOwn", "push", "slice", "i", "whitespace", "rtrim", "rhtml", "rquickExpr", "Sizzle", "match", "key", "fn", "matches", "docElem", "node", "elements", "nodeName", "start", "dir", "hash", "skip", "map", "isXML", "elem", "self", "add", "index", "resolve", "value", "deferred", "process", "error", "data", "events", "expectSync", "swap", "name", "end", "Animation", "length", "to", "time", "max", "location", "val", "completed", "offset", "top", "method", "type", "module", "callback", "key", "self", "i", "field", "extend", "names", "module", "plugins", "key", "self", "fn", "module", "$", "highlight", "skip", "match", "self", "fn", "debounce", "type", "message", "key", "callback", "events", "end", "swap", "index", "input", "offset", "defaults", "order", "i", "n", "options", "module", "global", "callback", "isArray", "isObject", "isNumber", "isDate", "map", "fn", "extend", "format", "locale", "isValid", "to", "from", "key", "isFunction", "set", "now", "sign", "token", "ordinal", "i", "diff", "localeData", "indexOf", "daysInYear", "hours", "minutes", "names", "match", "defaults", "tokens", "meridiem", "min", "max", "years", "months", "weeks", "days", "seconds", "milliseconds", "offset", "add", "time", "clone", "toDate", "index", "round", "thresholds", "module", "moment", "names", "sign", "unpack", "max", "offset", "guesses", "zones", "message", "fn", "require_moment_timezone", "module", "moment", "left", "right", "application", "map", "error", "message", "key", "index", "match", "callback", "oldValue", "fetch", "set", "callback", "index", "left", "right", "error", "key", "descriptors", "module", "message", "constructor", "application", "element", "resolve", "read", "write", "format", "index", "key", "index", "defaultOptions", "defaultOptions", "defaultOptions", "sign", "localize", "offset", "sign", "formatLong", "format", "defaultOptions", "error", "offset", "error", "MILLISECONDS_IN_MINUTE", "getTimezoneOffsetInMilliseconds", "MILLISECONDS_IN_HOUR", "MILLISECONDS_IN_MINUTE", "patterns", "toDate", "time", "offset", "getTimezoneOffsetInMilliseconds", "toDate", "max", "min", "color", "noop", "uid", "id", "isNullOrUndef", "value", "isArray", "Array", "type", "Object", "prototype", "toString", "call", "slice", "isObject", "isNumberFinite", "Number", "isFinite", "finiteOrDefault", "defaultValue", "valueOrDefault", "toPercentage", "dimension", "endsWith", "parseFloat", "toDimension", "callback", "fn", "args", "thisArg", "apply", "each", "loopable", "reverse", "i", "len", "keys", "length", "_elementsEqual", "a0", "a1", "ilen", "v0", "v1", "datasetIndex", "index", "clone", "source", "map", "target", "create", "klen", "k", "isValidKey", "key", "indexOf", "_merger", "options", "tval", "sval", "merge", "sources", "merger", "current", "mergeIf", "_mergerIf", "hasOwnProperty", "keyResolvers", "v", "x", "o", "y", "_splitKey", "key", "parts", "split", "keys", "tmp", "part", "endsWith", "slice", "push", "_getKeyResolver", "obj", "k", "resolveObjectKey", "resolver", "_capitalize", "str", "charAt", "toUpperCase", "defined", "value", "isFunction", "setsEqual", "a", "b", "size", "item", "has", "_isClickEvent", "e", "type", "PI", "Math", "TAU", "PITAU", "INFINITY", "Number", "POSITIVE_INFINITY", "RAD_PER_DEG", "HALF_PI", "QUARTER_PI", "TWO_THIRDS_PI", "log10", "sign", "almostEquals", "epsilon", "abs", "niceNum", "range", "roundedRange", "round", "niceRange", "pow", "floor", "fraction", "niceFraction", "_factorize", "result", "sqrt", "i", "sort", "pop", "isNumber", "n", "isNaN", "parseFloat", "isFinite", "almostWhole", "rounded", "_setMinAndMaxByKey", "array", "target", "property", "ilen", "length", "min", "max", "toRadians", "degrees", "toDegrees", "radians", "_decimalPlaces", "isFiniteNumber", "p", "getAngleFromPoint", "centrePoint", "anglePoint", "distanceFromXCenter", "distanceFromYCenter", "radialDistanceFromCenter", "angle", "atan2", "distance", "distanceBetweenPoints", "pt1", "pt2", "_angleDiff", "_normalizeAngle", "_angleBetween", "start", "end", "sameAngleIsFullCircle", "s", "angleToStart", "angleToEnd", "startToAngle", "endToAngle", "_limitValue", "_int16Range", "_isBetween", "_lookup", "table", "cmp", "index", "hi", "lo", "mid", "_lookupByKey", "last", "ti", "_rlookupByKey", "_filterBetween", "values", "arrayEvents", "listenArrayEvents", "listener", "_chartjs", "listeners", "Object", "defineProperty", "configurable", "enumerable", "forEach", "method", "base", "args", "res", "apply", "object", "unlistenArrayEvents", "stub", "indexOf", "splice", "_arrayUnique", "items", "set", "Set", "Array", "from", "requestAnimFrame", "window", "callback", "requestAnimationFrame", "throttled", "fn", "thisArg", "argsToUse", "ticking", "args", "call", "apply", "debounce", "delay", "timeout", "clearTimeout", "setTimeout", "_toLeftRightCenter", "align", "_alignStartEnd", "start", "end", "_textX", "left", "right", "rtl", "check", "_getStartAndCountOfVisiblePoints", "meta", "points", "animationsDisabled", "pointCount", "length", "count", "_sorted", "iScale", "_parsed", "axis", "min", "max", "minDefined", "maxDefined", "getUserBounds", "_limitValue", "Math", "_lookupByKey", "lo", "getPixelForValue", "hi", "_scaleRangesChanged", "xScale", "yScale", "_scaleRanges", "newRanges", "xmin", "xmax", "ymin", "ymax", "changed", "Object", "assign", "atEdge", "t", "elasticIn", "s", "p", "pow", "sin", "TAU", "elasticOut", "effects", "linear", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInCubic", "easeOutCubic", "easeInOutCubic", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInSine", "cos", "HALF_PI", "easeOutSine", "easeInOutSine", "PI", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "sqrt", "easeOutCirc", "easeInOutCirc", "easeInElastic", "easeOutElastic", "easeInOutElastic", "easeInBack", "easeOutBack", "easeInOutBack", "easeInBounce", "easeOutBounce", "m", "d", "easeInOutBounce", "isPatternOrGradient", "value", "type", "toString", "color", "Color", "getHoverColor", "saturate", "darken", "hexString", "numbers", "colors", "applyAnimationsDefaults", "defaults", "set", "undefined", "duration", "easing", "from", "loop", "to", "describe", "_fallback", "_indexable", "_scriptable", "name", "properties", "active", "animation", "resize", "show", "animations", "visible", "hide", "v", "applyLayoutsDefaults", "autoPadding", "padding", "top", "bottom", "intlCache", "Map", "getNumberFormat", "locale", "options", "cacheKey", "JSON", "stringify", "formatter", "get", "Intl", "NumberFormat", "formatNumber", "num", "format", "formatters", "values", "isArray", "numeric", "tickValue", "index", "ticks", "chart", "notation", "delta", "maxTick", "abs", "calculateDelta", "logDelta", "log10", "numDecimal", "isNaN", "floor", "minimumFractionDigits", "maximumFractionDigits", "logarithmic", "remain", "significand", "includes", "applyScaleDefaults", "display", "offset", "reverse", "beginAtZero", "bounds", "clip", "grace", "grid", "lineWidth", "drawOnChartArea", "drawTicks", "tickLength", "tickWidth", "_ctx", "tickColor", "border", "dash", "dashOffset", "width", "title", "text", "minRotation", "maxRotation", "mirror", "textStrokeWidth", "textStrokeColor", "autoSkip", "autoSkipPadding", "labelOffset", "Ticks", "minor", "major", "crossAlign", "showLabelBackdrop", "backdropColor", "backdropPadding", "route", "startsWith", "overrides", "create", "descriptors", "getScope", "node", "key", "keys", "split", "i", "n", "k", "root", "scope", "merge", "Defaults", "constructor", "_descriptors", "_appliers", "backgroundColor", "borderColor", "datasets", "devicePixelRatio", "context", "platform", "getDevicePixelRatio", "elements", "events", "font", "family", "size", "style", "lineHeight", "weight", "hover", "hoverBackgroundColor", "ctx", "hoverBorderColor", "hoverColor", "indexAxis", "interaction", "mode", "intersect", "includeInvisible", "maintainAspectRatio", "onHover", "onClick", "parsing", "plugins", "responsive", "scale", "scales", "showLine", "drawActiveElementsOnTop", "override", "targetScope", "targetName", "scopeObject", "targetScopeObject", "privateName", "defineProperties", "writable", "enumerable", "local", "target", "isObject", "valueOrDefault", "appliers", "forEach", "toFontString", "isNullOrUndef", "_measureText", "data", "gc", "longest", "string", "textWidth", "measureText", "push", "_longestText", "arrayOfThings", "cache", "garbageCollect", "save", "ilen", "j", "jlen", "thing", "nestedThing", "restore", "gcLen", "splice", "_alignPixel", "pixel", "currentDevicePixelRatio", "halfWidth", "round", "clearCanvas", "canvas", "getContext", "resetTransform", "clearRect", "height", "drawPoint", "x", "y", "drawPointLegend", "w", "xOffset", "yOffset", "cornerRadius", "xOffsetW", "yOffsetW", "pointStyle", "rotation", "radius", "rad", "RAD_PER_DEG", "translate", "rotate", "drawImage", "beginPath", "ellipse", "arc", "closePath", "moveTo", "TWO_THIRDS_PI", "lineTo", "QUARTER_PI", "SQRT1_2", "rect", "fill", "borderWidth", "stroke", "_isPointInArea", "point", "area", "margin", "clipArea", "unclipArea", "_steppedLineTo", "previous", "flip", "midpoint", "_bezierCurveTo", "bezierCurveTo", "cp1x", "cp2x", "cp1y", "cp2y", "setRenderOpts", "opts", "translation", "fillStyle", "textAlign", "textBaseline", "decorateText", "line", "strikethrough", "underline", "metrics", "actualBoundingBoxLeft", "actualBoundingBoxRight", "actualBoundingBoxAscent", "actualBoundingBoxDescent", "yDecoration", "strokeStyle", "decorationWidth", "drawBackdrop", "oldColor", "fillRect", "renderText", "lines", "strokeWidth", "strokeColor", "backdrop", "strokeText", "maxWidth", "fillText", "Number", "addRoundedRectPath", "h", "topLeft", "bottomLeft", "bottomRight", "topRight", "LINE_HEIGHT", "FONT_STYLE", "toLineHeight", "matches", "match", "numberOrZero", "_readValueToProps", "props", "ret", "objProps", "read", "prop", "toTRBL", "toTRBLCorners", "toPadding", "obj", "toFont", "fallback", "parseInt", "console", "warn", "resolve", "inputs", "info", "cacheable", "_addGrace", "minmax", "change", "toDimension", "keepZero", "add", "createContext", "parentContext", "_createResolver", "scopes", "prefixes", "rootScopes", "getTarget", "finalRootScopes", "_resolve", "Symbol", "toStringTag", "_cacheable", "_scopes", "_rootScopes", "_getTarget", "Proxy", "deleteProperty", "_keys", "_cached", "_resolveWithPrefixes", "getOwnPropertyDescriptor", "Reflect", "getPrototypeOf", "has", "getKeysFromAllScopes", "ownKeys", "storage", "_storage", "_attachContext", "proxy", "subProxy", "descriptorDefaults", "_proxy", "_context", "_subProxy", "_stack", "Set", "setContext", "receiver", "_resolveWithContext", "allKeys", "configurable", "scriptable", "indexable", "_allKeys", "isScriptable", "isFunction", "isIndexable", "readKey", "prefix", "_capitalize", "needsSubResolver", "prototype", "hasOwnProperty", "_resolveScriptable", "_resolveArray", "getValue", "Error", "Array", "join", "delete", "createSubResolver", "arr", "filter", "item", "resolver", "resolveFallback", "parent", "resolveObjectKey", "addScopes", "parentScopes", "parentFallback", "allScopes", "addScopesFromKey", "subGetTarget", "resolveKeysFromAllScopes", "_parseObjectDataRadialScale", "_parsing", "parsed", "r", "parse", "EPSILON", "getPoint", "skip", "getValueAxis", "splineCurve", "firstPoint", "middlePoint", "afterPoint", "current", "next", "d01", "distanceBetweenPoints", "d12", "s01", "s12", "fa", "fb", "monotoneAdjust", "deltaK", "mK", "pointsLen", "alphaK", "betaK", "tauK", "squaredMagnitude", "pointCurrent", "pointAfter", "almostEquals", "monotoneCompute", "valueAxis", "pointBefore", "iPixel", "vPixel", "splineCurveMonotone", "slopeDelta", "sign", "capControlPoint", "pt", "capBezierPoints", "inArea", "inAreaPrev", "inAreaNext", "_updateBezierControlPoints", "controlPoints", "spanGaps", "cubicInterpolationMode", "prev", "tension", "_isDomSupported", "document", "_getParentNode", "domNode", "parentNode", "host", "parseMaxStyle", "styleValue", "parentProperty", "valueInPixels", "indexOf", "getComputedStyle", "element", "ownerDocument", "defaultView", "getStyle", "el", "property", "getPropertyValue", "positions", "getPositionedStyle", "styles", "suffix", "result", "pos", "parseFloat", "useOffsetPos", "shadowRoot", "getCanvasPosition", "e", "touches", "source", "offsetX", "offsetY", "box", "getBoundingClientRect", "clientX", "clientY", "getRelativePosition", "event", "borderBox", "boxSizing", "paddings", "borders", "getContainerSize", "maxHeight", "container", "clientWidth", "clientHeight", "containerStyle", "containerBorder", "containerPadding", "INFINITY", "round1", "getMaximumSize", "bbWidth", "bbHeight", "aspectRatio", "margins", "containerSize", "maintainHeight", "retinaScale", "forceRatio", "forceStyle", "pixelRatio", "deviceHeight", "deviceWidth", "setTransform", "supportsEventListenerOptions", "passiveSupported", "passive", "addEventListener", "removeEventListener", "readUsedSize", "_pointInLine", "p1", "p2", "_steppedInterpolation", "_bezierInterpolation", "cp1", "cp2", "a", "b", "c", "getRightToLeftAdapter", "rectX", "setWidth", "xPlus", "leftForLtr", "itemWidth", "getLeftToRightAdapter", "_itemWidth", "getRtlAdapter", "overrideTextDirection", "direction", "original", "getPropertyPriority", "setProperty", "prevTextDirection", "restoreTextDirection", "propertyFn", "between", "_angleBetween", "compare", "_angleDiff", "normalize", "_normalizeAngle", "_isBetween", "normalizeSegment", "getSegment", "segment", "startBound", "endBound", "_boundSegment", "inside", "subStart", "prevValue", "startIsBefore", "endIsBefore", "shouldStart", "shouldStop", "_boundSegments", "segments", "sub", "findStartAndEnd", "solidSegments", "last", "cur", "stop", "_computeSegments", "segmentOptions", "_loop", "splitByStyles", "completeLoop", "_fullLoop", "doSplitByStyles", "chartContext", "_chart", "baseStyle", "readStyle", "_datasetIndex", "datasetIndex", "prevStyle", "addStyle", "l", "st", "dir", "p0", "p0DataIndex", "p1DataIndex", "styleChanged", "borderCapStyle", "borderDash", "borderDashOffset", "borderJoinStyle", "replacer", "Animator", "constructor", "_request", "_charts", "Map", "_running", "_lastDate", "undefined", "_notify", "chart", "anims", "date", "type", "callbacks", "listeners", "numSteps", "duration", "forEach", "fn", "initial", "currentStep", "Math", "min", "start", "_refresh", "requestAnimFrame", "call", "window", "_update", "Date", "now", "remaining", "running", "items", "length", "i", "draw", "item", "_active", "_total", "tick", "pop", "_getAnims", "charts", "get", "complete", "progress", "set", "listen", "event", "cb", "push", "add", "has", "reduce", "acc", "cur", "max", "_duration", "stop", "cancel", "remove", "delete", "transparent", "interpolators", "boolean", "from", "to", "factor", "color", "c0", "helpersColor", "c1", "valid", "mix", "hexString", "number", "Animation", "cfg", "target", "prop", "currentValue", "resolve", "_fn", "_easing", "effects", "easing", "linear", "_start", "floor", "delay", "_loop", "loop", "_target", "_prop", "_from", "_to", "_promises", "active", "update", "elapsed", "remain", "wait", "promises", "Promise", "res", "rej", "resolved", "method", "Animations", "config", "_chart", "_properties", "configure", "isObject", "animationOptions", "Object", "keys", "defaults", "animation", "animatedProps", "getOwnPropertyNames", "key", "option", "isArray", "properties", "_animateOptions", "values", "newOptions", "options", "resolveTargetOptions", "animations", "_createAnimations", "$shared", "awaitAll", "$animations", "then", "props", "charAt", "value", "size", "assign", "animator", "anim", "all", "scaleClip", "scale", "allowedOverflow", "opts", "reverse", "end", "defaultClip", "xScale", "yScale", "x", "y", "top", "right", "bottom", "left", "toClip", "t", "r", "b", "l", "disabled", "getSortedDatasetIndices", "filterVisible", "metasets", "_getSortedDatasetMetas", "ilen", "index", "applyStack", "stack", "dsIndex", "singleMode", "mode", "datasetIndex", "otherValue", "isFinite", "sign", "convertObjectDataToArray", "data", "adata", "Array", "isStacked", "meta", "stacked", "getStackKey", "indexScale", "valueScale", "id", "getUserBounds", "minDefined", "maxDefined", "Number", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "getOrCreateStack", "stacks", "stackKey", "indexValue", "subStack", "getLastIndexInStack", "vScale", "positive", "getMatchingVisibleMetas", "updateStacks", "controller", "parsed", "_cachedMeta", "_stacks", "iScale", "iAxis", "axis", "vAxis", "itemStacks", "_top", "_bottom", "visualValues", "_visualValues", "getFirstScaleId", "scales", "filter", "shift", "createDatasetContext", "parent", "createContext", "dataset", "createDataContext", "element", "dataIndex", "raw", "clearStacks", "_parsed", "isDirectUpdateMode", "cloneIfNotShared", "cached", "shared", "createStack", "canStack", "hidden", "_stacked", "DatasetController", "_ctx", "ctx", "_cachedDataOpts", "getMeta", "_type", "_parsing", "_data", "_objectData", "_sharedOptions", "_drawStart", "_drawCount", "enableOptionSharing", "supportsDecimation", "$context", "_syncList", "datasetElementType", "dataElementType", "initialize", "linkScales", "addElements", "fill", "isPluginEnabled", "console", "warn", "updateIndex", "getDataset", "chooseId", "xid", "xAxisID", "valueOrDefault", "yid", "yAxisID", "rid", "rAxisID", "indexAxis", "iid", "iAxisID", "vid", "vAxisID", "getScaleForId", "rScale", "datasets", "getDatasetMeta", "scaleID", "_getOtherScale", "reset", "_destroy", "unlistenArrayEvents", "_dataCheck", "isExtensible", "listenArrayEvents", "buildOrUpdateElements", "resetNewElements", "stackChanged", "oldStacked", "_resyncElements", "scopeKeys", "datasetScopeKeys", "scopes", "getOptionScopes", "createResolver", "getContext", "parsing", "parse", "count", "sorted", "_sorted", "prev", "parseArrayData", "parseObjectData", "parsePrimitiveData", "isNotInOrderComparedToPrev", "labels", "getLabels", "singleScale", "xAxisKey", "yAxisKey", "resolveObjectKey", "getParsed", "getDataElement", "updateRangeFromParsed", "range", "parsedValue", "NaN", "getMinMax", "otherScale", "otherMin", "otherMax", "_skip", "getAllParsedValues", "getMaxOverflow", "getLabelAndValue", "label", "getLabelForValue", "_clip", "clip", "elements", "area", "chartArea", "drawActiveElementsOnTop", "getStyle", "resolveDatasetElementOptions", "resolveDataElementOptions", "context", "_resolveElementOptions", "elementType", "cache", "cacheKey", "sharing", "defined", "datasetElementScopeKeys", "prefixes", "names", "resolveNamedOptions", "freeze", "_resolveAnimations", "transition", "datasetAnimationScopeKeys", "_cacheable", "getSharedOptions", "includeOptions", "sharedOptions", "_animationsDisabled", "_getSharedOptions", "firstOpts", "previouslySharedOptions", "updateSharedOptions", "updateElement", "_setStyle", "removeHoverStyle", "setHoverStyle", "_removeDatasetHoverStyle", "_setDatasetHoverStyle", "arg1", "arg2", "numMeta", "numData", "_insertElements", "_removeElements", "move", "arr", "updateElements", "removed", "splice", "_sync", "args", "_dataChanges", "_onDataPush", "arguments", "_onDataPop", "_onDataShift", "_onDataSplice", "newCount", "_onDataUnshift", "getAllScaleValues", "_cache", "$bar", "visibleMetas", "concat", "_arrayUnique", "sort", "a", "computeMinSampleSize", "_length", "curr", "updateMinAndPrev", "abs", "getPixelForValue", "ticks", "getPixelForTick", "computeFitCategoryTraits", "ruler", "stackCount", "thickness", "barThickness", "ratio", "isNullOrUndef", "categoryPercentage", "barPercentage", "chunk", "pixels", "computeFlexCategoryTraits", "next", "percent", "parseFloatBar", "entry", "startValue", "endValue", "barStart", "barEnd", "_custom", "parseValue", "parseArrayOrPrimitive", "isFloatBar", "custom", "barSign", "actualBase", "isHorizontal", "borderProps", "horizontal", "base", "setBorderSkipped", "edge", "borderSkipped", "enableBorderRadius", "parseEdge", "swap", "startEnd", "orig", "v1", "v2", "v", "setInflateAmount", "inflateAmount", "BarController", "iAxisKey", "vAxisKey", "obj", "bars", "getBasePixel", "_getRuler", "vpixels", "head", "_calculateBarValuePixels", "ipixels", "_calculateBarIndexPixels", "center", "height", "width", "_getStacks", "last", "grouped", "skipNull", "val", "isNaN", "indexOf", "_getStackCount", "_getStackIndex", "name", "_startPixel", "_endPixel", "baseValue", "minBarLength", "floating", "getDataVisibility", "startPixel", "getPixelForDecimal", "endPixel", "getValueForPixel", "halfGrid", "getLineWidthForValue", "maxBarThickness", "Infinity", "stackIndex", "rects", "numbers", "overrides", "_index_", "offset", "grid", "_value_", "beginAtZero", "BubbleController", "radius", "points", "point", "iPixel", "vPixel", "skip", "getRatioAndOffset", "rotation", "circumference", "cutout", "ratioX", "ratioY", "offsetX", "offsetY", "TAU", "startAngle", "endAngle", "startX", "cos", "startY", "sin", "endX", "endY", "calcMax", "angle", "_angleBetween", "calcMin", "maxX", "maxY", "HALF_PI", "minX", "PI", "minY", "DoughnutController", "innerRadius", "outerRadius", "getter", "_getRotation", "toRadians", "_getCircumference", "_getRotationExtents", "isDatasetVisible", "arcs", "spacing", "getMaxBorderWidth", "getMaxOffset", "maxSize", "toPercentage", "chartWeight", "_getRingWeight", "maxWidth", "maxHeight", "maxRadius", "toDimension", "radiusLength", "_getVisibleDatasetWeightTotal", "total", "calculateTotal", "_getRingWeightOffset", "_circumference", "animateRotate", "calculateCircumference", "animationOpts", "centerX", "centerY", "animateScale", "arc", "metaData", "formatNumber", "locale", "borderAlign", "borderWidth", "hoverBorderWidth", "hoverOffset", "ringWeightOffset", "weight", "descriptors", "_scriptable", "_indexable", "startsWith", "aspectRatio", "plugins", "legend", "generateLabels", "pointStyle", "map", "style", "text", "fillStyle", "backgroundColor", "strokeStyle", "borderColor", "fontColor", "lineWidth", "onClick", "e", "legendItem", "toggleDataVisibility", "LineController", "line", "_dataset", "animationsDisabled", "_getStartAndCountOfVisiblePoints", "_scaleRangesChanged", "_datasetIndex", "_decimated", "showLine", "segment", "animated", "spanGaps", "maxGapLength", "isNumber", "directUpdate", "pointsCount", "prevParsed", "nullData", "border", "firstPoint", "lastPoint", "updateControlPoints", "PolarAreaController", "_parseObjectDataRadialScale", "bind", "_updateRadius", "minSize", "cutoutPercentage", "getVisibleDatasetCount", "xCenter", "yCenter", "datasetStartAngle", "getIndexAngle", "defaultAngle", "countVisibleElements", "_computeAngle", "getDistanceFromCenterForValue", "angleLines", "display", "circular", "pointLabels", "PieController", "RadarController", "_fullLoop", "pointPosition", "getPointPositionForValue", "ScatterController", "registry", "getElement", "interaction", "abstract", "Error", "DateAdapterBase", "override", "members", "prototype", "init", "formats", "format", "diff", "startOf", "endOf", "_date", "binarySearch", "metaset", "intersect", "lookupMethod", "_reversePixels", "_rlookupByKey", "_lookupByKey", "el", "getRange", "lo", "hi", "evaluateInteractionItems", "position", "handler", "getSortedVisibleDatasetMetas", "j", "getDistanceMetricForAxis", "useX", "useY", "pt1", "pt2", "deltaX", "deltaY", "sqrt", "pow", "getIntersectItems", "useFinalPosition", "includeInvisible", "isPointInArea", "evaluationFunc", "_isPointInArea", "inRange", "getNearestRadialItems", "getProps", "getAngleFromPoint", "getNearestCartesianItems", "distanceMetric", "minDistance", "getCenterPoint", "pointInArea", "distance", "getNearestItems", "getAxisItems", "rangeMethod", "intersectsItem", "modes", "getRelativePosition", "nearest", "STATIC_POSITIONS", "filterByPosition", "array", "pos", "filterDynamicPositionByAxis", "box", "sortByWeight", "v0", "wrapBoxes", "boxes", "layoutBoxes", "stackWeight", "buildStacks", "layouts", "wrap", "includes", "_stack", "placed", "setLayoutDims", "params", "vBoxMaxWidth", "hBoxMaxHeight", "layout", "fullSize", "availableWidth", "availableHeight", "buildLayoutBoxes", "centerHorizontal", "centerVertical", "leftAndTop", "rightAndBottom", "vertical", "getCombinedMax", "maxPadding", "updateMaxPadding", "boxPadding", "updateDims", "getPadding", "newWidth", "outerWidth", "newHeight", "outerHeight", "widthChanged", "w", "heightChanged", "h", "same", "other", "handleMaxPadding", "updatePos", "change", "getMargins", "marginForPositions", "positions", "margin", "fitBoxes", "refitBoxes", "refit", "changed", "setBoxDims", "placeBoxes", "userPadding", "padding", "addBox", "_layers", "z", "removeBox", "layoutItem", "minPadding", "toPadding", "verticalBoxes", "horizontalBoxes", "each", "beforeLayout", "visibleVerticalBoxCount", "BasePlatform", "acquireContext", "canvas", "releaseContext", "addEventListener", "listener", "removeEventListener", "getDevicePixelRatio", "getMaximumSize", "isAttached", "updateConfig", "BasicPlatform", "EXPANDO_KEY", "EVENT_TYPES", "touchstart", "touchmove", "touchend", "pointerenter", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointerout", "isNullOrEmpty", "initCanvas", "renderHeight", "getAttribute", "renderWidth", "boxSizing", "displayWidth", "readUsedSize", "displayHeight", "eventListenerOptions", "supportsEventListenerOptions", "passive", "addListener", "node", "removeListener", "fromNativeEvent", "native", "nodeListContains", "nodeList", "contains", "createAttachObserver", "observer", "MutationObserver", "entries", "trigger", "addedNodes", "removedNodes", "observe", "document", "childList", "subtree", "createDetachObserver", "drpListeningCharts", "oldDevicePixelRatio", "onWindowResize", "dpr", "devicePixelRatio", "resize", "currentDevicePixelRatio", "listenDevicePixelRatioChanges", "unlistenDevicePixelRatioChanges", "createResizeObserver", "container", "_getParentNode", "throttled", "clientWidth", "ResizeObserver", "contentRect", "releaseObserver", "disconnect", "createProxyAndListen", "proxy", "DomPlatform", "removeAttribute", "setAttribute", "proxies", "$proxies", "handlers", "attach", "detach", "isConnected", "_detectPlatform", "_isDomSupported", "OffscreenCanvas", "Element", "tooltipPosition", "hasValue", "final", "ret", "defaultRoutes", "autoSkip", "tickOpts", "determinedMaxTicks", "determineMaxTicks", "ticksLimit", "maxTicksLimit", "majorIndices", "major", "enabled", "getMajorIndices", "numMajorIndices", "first", "newTicks", "skipMajors", "calculateSpacing", "avgMajorSpacing", "round", "tickLength", "_tickSize", "maxScale", "maxChart", "_maxLength", "evenMajorSpacing", "getEvenSpacing", "factors", "_factorize", "result", "ceil", "majorStart", "majorEnd", "len", "reverseAlign", "align", "offsetFromEdge", "getTicksLimit", "ticksLength", "sample", "numItems", "increment", "getPixelForGridLine", "offsetGridLines", "validIndex", "epsilon", "lineValue", "garbageCollect", "caches", "gc", "gcLen", "getTickMarkLength", "drawTicks", "getTitleHeight", "fallback", "font", "toFont", "lines", "lineHeight", "createScaleContext", "createTickContext", "titleAlign", "_toLeftRightCenter", "titleArgs", "titleX", "titleY", "_alignStartEnd", "positionAxisID", "Scale", "_margins", "paddingTop", "paddingBottom", "paddingLeft", "paddingRight", "labelRotation", "_range", "_gridLineItems", "_labelItems", "_labelSizes", "_longestTextCache", "_userMax", "_userMin", "_suggestedMax", "_suggestedMin", "_ticksLength", "_borderValue", "_dataLimitsCached", "setContext", "suggestedMin", "suggestedMax", "finiteOrDefault", "metas", "getTicks", "xLabels", "yLabels", "getLabelItems", "_computeLabelItems", "beforeUpdate", "margins", "grace", "sampleSize", "beforeSetDimensions", "setDimensions", "afterSetDimensions", "beforeDataLimits", "determineDataLimits", "afterDataLimits", "_addGrace", "beforeBuildTicks", "buildTicks", "afterBuildTicks", "samplingEnabled", "_convertTicksToLabels", "beforeCalculateLabelRotation", "calculateLabelRotation", "afterCalculateLabelRotation", "source", "afterAutoSkip", "beforeFit", "fit", "afterFit", "afterUpdate", "reversePixels", "_alignToPixels", "alignToPixels", "_callHooks", "notifyPlugins", "beforeTickToLabelConversion", "generateTickLabels", "callback", "afterTickToLabelConversion", "numTicks", "minRotation", "maxRotation", "tickWidth", "maxLabelDiagonal", "_isVisible", "labelSizes", "_getLabelSizes", "maxLabelWidth", "widest", "maxLabelHeight", "highest", "_limitValue", "title", "toDegrees", "asin", "titleOpts", "gridOpts", "titleHeight", "tickPadding", "angleRadians", "labelHeight", "mirror", "labelWidth", "_calculatePadding", "_handleMargins", "isRotated", "labelsBelowTicks", "offsetLeft", "offsetRight", "isFullSize", "_computeLabelSizes", "widths", "heights", "widestLabelSize", "highestLabelSize", "jlen", "tickFont", "fontString", "nestedLabel", "_resolveTickFontOptions", "string", "_measureText", "valueAt", "idx", "pixel", "decimal", "_int16Range", "_alignPixel", "getDecimalForPixel", "getBaseValue", "optionTicks", "rot", "autoSkipPadding", "_computeGridLineItems", "tl", "borderOpts", "axisWidth", "axisHalfWidth", "alignBorderValue", "borderValue", "alignedLineValue", "tx1", "ty1", "tx2", "ty2", "x1", "y1", "x2", "y2", "limit", "step", "optsAtIndex", "optsAtIndexBorder", "lineColor", "borderDash", "dash", "borderDashOffset", "dashOffset", "tickColor", "tickBorderDash", "tickBorderDashOffset", "crossAlign", "tickAndPadding", "hTickAndPadding", "textAlign", "lineCount", "textOffset", "textBaseline", "_getXAxisLabelAlignment", "_getYAxisLabelAlignment", "labelOffset", "halfCount", "strokeColor", "textStrokeColor", "strokeWidth", "textStrokeWidth", "tickTextAlign", "showLabelBackdrop", "backdrop", "labelPadding", "backdropPadding", "backdropColor", "translation", "_computeLabelArea", "drawBackground", "save", "fillRect", "restore", "findIndex", "drawGrid", "drawLine", "p1", "p2", "setLineDash", "lineDashOffset", "beginPath", "moveTo", "lineTo", "stroke", "drawOnChartArea", "drawBorder", "lastLineWidth", "drawLabels", "clipArea", "renderTextOptions", "renderText", "unclipArea", "drawTitle", "tz", "gz", "bz", "axisID", "_maxDigits", "fontSize", "TypedRegistry", "scope", "create", "isForType", "isPrototypeOf", "register", "proto", "getPrototypeOf", "parentScope", "isIChartComponent", "registerDefaults", "unregister", "itemDefaults", "merge", "routeDefaults", "describe", "routes", "property", "propertyParts", "split", "sourceName", "sourceScope", "join", "parts", "targetName", "targetScope", "route", "Registry", "controllers", "_typedRegistries", "_each", "addControllers", "addPlugins", "addScales", "getController", "_get", "getPlugin", "getScale", "removeControllers", "removeElements", "removePlugins", "removeScales", "typedRegistry", "arg", "reg", "_getRegistryForType", "_exec", "itemReg", "component", "camelMethod", "_capitalize", "PluginService", "_init", "notify", "hook", "_createDescriptors", "_descriptors", "descriptor", "plugin", "callCallback", "cancelable", "invalidate", "_oldCache", "_notifyStateChanges", "allPlugins", "createDescriptors", "previousDescriptors", "some", "localIds", "local", "getOpts", "pluginOpts", "pluginScopeKeys", "scriptable", "indexable", "allKeys", "getIndexAxis", "datasetDefaults", "datasetOptions", "getAxisFromDefaultScaleID", "getDefaultScaleIDFromAxis", "idMatchesAxis", "axisFromPosition", "determineAxis", "scaleOptions", "toLowerCase", "getAxisFromDataset", "retrieveAxisFromDatasets", "boundDs", "d", "mergeScaleConfig", "chartDefaults", "configScales", "chartIndexAxis", "scaleConf", "error", "_proxy", "defaultId", "defaultScaleOptions", "mergeIf", "defaultID", "initOptions", "initData", "initConfig", "keyCache", "keysCached", "Set", "cachedKeys", "generate", "addIfFound", "Config", "_config", "_scopeCache", "_resolverCache", "platform", "clearCache", "clear", "datasetType", "additionalOptionScopes", "_cachedScopes", "mainScope", "resetCache", "keyLists", "chartOptionScopes", "resolver", "subPrefixes", "getResolver", "needContext", "isFunction", "subResolver", "_attachContext", "descriptorDefaults", "resolverCache", "_createResolver", "p", "hasFunction", "isScriptable", "isIndexable", "KNOWN_POSITIONS", "positionIsHorizontal", "compare2Level", "l1", "l2", "onAnimationsComplete", "onComplete", "onAnimationProgress", "onProgress", "getCanvas", "getElementById", "instances", "getChart", "c", "moveNumericKeys", "intKey", "determineLastEvent", "lastEvent", "inChartArea", "isClick", "getSizeForArea", "field", "getDatasetArea", "Chart", "invalidatePlugins", "userConfig", "initialCanvas", "existingChart", "uid", "_options", "_aspectRatio", "_metasets", "_lastEvent", "_listeners", "_responsiveListeners", "_sortedMetasets", "_plugins", "_hiddenIndices", "attached", "_doResize", "debounce", "resizeDelay", "_initialize", "maintainAspectRatio", "responsive", "retinaScale", "bindEvents", "clearCanvas", "_resize", "_resizeBeforeDraw", "newSize", "newRatio", "onResize", "render", "ensureScalesHaveIDs", "scalesOptions", "axisOptions", "buildOrUpdateScales", "scaleOpts", "updated", "isRadial", "dposition", "dtype", "scaleType", "scaleClass", "hasUpdated", "_updateMetasets", "_destroyDatasetMeta", "slice", "_removeUnreferencedMetasets", "buildOrUpdateControllers", "newControllers", "order", "visible", "ControllerClass", "_resetElements", "animsDisabled", "_updateScales", "_checkEventBindings", "_updateHiddenIndices", "_minPadding", "autoPadding", "_updateLayout", "_updateDatasets", "_eventHandler", "_updateHoverStyles", "existingEvents", "newEvents", "events", "setsEqual", "unbindEvents", "changes", "_getUniformDataChanges", "datasetCount", "makeSet", "changeSet", "noArea", "_idx", "_updateDataset", "layers", "_drawDatasets", "_drawDataset", "useClip", "getElementsAtEventForMode", "Interaction", "setDatasetVisibility", "_updateVisibility", "hide", "show", "_stop", "destroy", "toBase64Image", "toDataURL", "bindUserEvents", "bindResponsiveEvents", "_add", "_remove", "detached", "updateHoverStyle", "prefix", "getActiveElements", "setActiveElements", "activeElements", "lastActive", "_elementsEqual", "pluginId", "replay", "hoverOptions", "hover", "deactivated", "activated", "eventFilter", "_handleEvent", "_getActiveElements", "_isClickEvent", "onHover", "version", "clipArc", "pixelMargin", "angleMargin", "closePath", "toRadiusCorners", "_readValueToProps", "parseBorderRadius", "angleDelta", "o", "borderRadius", "halfThickness", "innerLimit", "computeOuterLimit", "outerArcLimit", "outerStart", "outerEnd", "innerStart", "innerEnd", "rThetaToXY", "theta", "pathArc", "innerR", "spacingOffset", "alpha", "noSpacingInnerRadius", "noSpacingOuterRadius", "avNogSpacingRadius", "adjustedAngle", "beta", "angleOffset", "outerStartAdjustedRadius", "outerEndAdjustedRadius", "outerStartAdjustedAngle", "outerEndAdjustedAngle", "innerStartAdjustedRadius", "innerEndAdjustedRadius", "innerStartAdjustedAngle", "innerEndAdjustedAngle", "outerMidAdjustedAngle", "pCenter", "p4", "innerMidAdjustedAngle", "p8", "outerStartX", "outerStartY", "outerEndX", "outerEndY", "drawArc", "fullCircles", "borderJoinStyle", "inner", "lineJoin", "ArcElement", "chartX", "chartY", "rAdjust", "betweenAngles", "withinRadius", "_isBetween", "halfAngle", "halfRadius", "translate", "fix", "radiusOffset", "setStyle", "lineCap", "borderCapStyle", "previous", "getLineMethod", "stepped", "_steppedLineTo", "tension", "cubicInterpolationMode", "_bezierCurveTo", "pathVars", "paramsStart", "paramsEnd", "segmentStart", "segmentEnd", "outside", "pathSegment", "lineMethod", "fastPathSegment", "avgX", "countX", "prevX", "lastY", "pointIndex", "drawX", "truncX", "_getSegmentMethod", "useFastPath", "_getInterpolationMethod", "_steppedInterpolation", "_bezierInterpolation", "_pointInLine", "strokePathWithCache", "path", "_path", "Path2D", "strokePathDirect", "segments", "segmentMethod", "usePath2D", "LineElement", "_points", "_segments", "_pointsUpdated", "_updateBezierControlPoints", "_computeSegments", "interpolate", "_boundSegments", "_interpolate", "interpolated", "capBezierPoints", "hitRadius", "PointElement", "mouseX", "mouseY", "inXRange", "inYRange", "hoverRadius", "drawPoint", "getBarBounds", "bar", "half", "skipOrLimit", "parseBorderWidth", "maxW", "maxH", "toTRBL", "toTRBLCorners", "maxR", "enableBorder", "topLeft", "topRight", "bottomLeft", "bottomRight", "boundingRects", "bounds", "outer", "skipX", "skipY", "skipBoth", "hasRadius", "addNormalRectPath", "rect", "inflateRect", "amount", "refRect", "BarElement", "addRectPath", "addRoundedRectPath", "BORDER_COLORS", "BACKGROUND_COLORS", "replace", "getBorderColor", "getBackgroundColor", "colorizeDefaultDataset", "colorizeDoughnutDataset", "colorizePolarAreaDataset", "getColorizer", "containsColorsDefinitions", "k", "containsColorsDefinition", "forceOverride", "_args", "chartOptions", "colorizer", "lttbDecimation", "samples", "decimated", "bucketWidth", "sampledIndex", "endIndex", "maxAreaPoint", "maxArea", "nextA", "avgY", "avgRangeStart", "avgRangeEnd", "avgRangeLength", "rangeOffs", "rangeTo", "pointAx", "pointAy", "minMaxDecimation", "minIndex", "maxIndex", "startIndex", "xMin", "xMax", "dx", "lastIndex", "intermediateIndex1", "intermediateIndex2", "cleanDecimatedDataset", "defineProperty", "configurable", "enumerable", "writable", "cleanDecimatedData", "getStartAndCountOfVisiblePointsSimplified", "pointCount", "algorithm", "beforeElementsUpdate", "xAxis", "threshold", "tpoints", "_findSegmentEnd", "_getBounds", "targetSegments", "tgt", "subBounds", "fillSources", "_boundSegment", "fillSource", "_getEdge", "_normalizeAngle", "_pointsFromSegments", "boundary", "linePoints", "_createBoundaryLine", "_shouldApplyFill", "_resolveTarget", "sources", "propagate", "visited", "_decodeFill", "parseFillOption", "parseFloat", "decodeTargetIndex", "firstCh", "_getTargetPixel", "_getTargetValue", "fillOption", "_buildStackLine", "sourcePoints", "linesBelow", "getLinesBelow", "addPointsBelow", "below", "unshift", "sourcePoint", "postponed", "findPoint", "pointValue", "firstValue", "lastValue", "simpleArc", "_getTarget", "getLineByIndex", "computeBoundary", "computeCircularBoundary", "computeLinearBoundary", "_drawfill", "lineOpts", "above", "doFill", "clipVertical", "clipY", "lineLoop", "src", "notShape", "clipBounds", "interpolatedLineTo", "targetLoop", "interpolatedPoint", "afterDatasetsUpdate", "$filler", "beforeDraw", "drawTime", "beforeDatasetsDraw", "beforeDatasetDraw", "getBoxSize", "labelOpts", "boxHeight", "boxWidth", "usePointStyle", "pointStyleWidth", "itemHeight", "itemsEqual", "Legend", "_added", "legendHitBoxes", "_hoveredItem", "doughnutMode", "legendItems", "columnSizes", "lineWidths", "buildLabels", "labelFont", "_computeTitleHeight", "_fitRows", "_fitCols", "hitboxes", "totalHeight", "row", "itemWidth", "measureText", "_itemHeight", "heightLimit", "totalWidth", "currentColWidth", "currentColHeight", "col", "calculateItemSize", "adjustHitBoxes", "rtl", "rtlHelper", "getRtlAdapter", "hitbox", "leftForLtr", "_draw", "defaultColor", "halfFontSize", "cursor", "drawLegendBox", "lineDash", "drawOptions", "SQRT2", "xPlus", "drawPointLegend", "yBoxTop", "xBoxLeft", "fillText", "strikethrough", "overrideTextDirection", "textDirection", "textWidth", "setWidth", "realX", "_textX", "fontLineHeight", "calculateLegendItemHeight", "restoreTextDirection", "titleFont", "titlePadding", "topPaddingPlusHalfFontSize", "_getLegendItemAt", "hitBox", "lh", "handleEvent", "isListened", "hoveredItem", "sameItem", "onLeave", "calculateItemWidth", "calculateItemHeight", "legendItemText", "_element", "afterEvent", "ci", "useBorderRadius", "Title", "_padding", "textSize", "_drawArgs", "fontOpts", "createTitle", "titleBlock", "WeakMap", "positioners", "average", "eventPosition", "nearestElement", "distanceBetweenPoints", "tp", "pushOrConcat", "toPush", "apply", "splitNewlines", "str", "String", "createTooltipItem", "formattedValue", "getTooltipSize", "tooltip", "body", "footer", "bodyFont", "footerFont", "titleLineCount", "footerLineCount", "bodyLineItemCount", "combinedBodyLength", "bodyItem", "before", "after", "beforeBody", "afterBody", "titleSpacing", "titleMarginBottom", "bodyLineHeight", "displayColors", "bodySpacing", "footerMarginTop", "footerSpacing", "widthPadding", "maxLineWidth", "determineYAlign", "doesNotFitWithAlign", "xAlign", "caret", "caretSize", "caretPadding", "determineXAlign", "yAlign", "chartWidth", "determineAlignment", "alignX", "alignY", "paddingAndSize", "getBackgroundPoint", "alignment", "cornerRadius", "getAlignedX", "getBeforeAfterBodyLines", "createTooltipContext", "tooltipItems", "overrideCallbacks", "defaultCallbacks", "beforeTitle", "noop", "labelCount", "afterTitle", "beforeLabel", "tooltipItem", "labelColor", "labelTextColor", "bodyColor", "labelPointStyle", "afterLabel", "beforeFooter", "afterFooter", "invokeCallbackWithFallback", "Tooltip", "opacity", "_eventPosition", "_size", "_cachedAnimations", "_tooltipItems", "dataPoints", "caretX", "caretY", "labelColors", "labelPointStyles", "labelTextColors", "getTitle", "getBeforeBody", "getBody", "bodyItems", "scoped", "getAfterBody", "getFooter", "_createItems", "itemSort", "positionAndSize", "backgroundPoint", "external", "drawCaret", "tooltipPoint", "caretPosition", "getCaretPosition", "x3", "y3", "ptX", "ptY", "pt", "titleColor", "_drawColorBox", "colorX", "rtlColorX", "yOffSet", "colorY", "multiKeyBackground", "outerX", "innerX", "strokeRect", "drawBody", "bodyAlign", "xLinePadding", "fillLineOfText", "bodyAlignForCalculation", "textColor", "drawFooter", "footerAlign", "footerColor", "tooltipSize", "quadraticCurveTo", "_updateAnimationTarget", "animX", "animY", "_willRender", "hasTooltipContent", "globalAlpha", "positionChanged", "_positionChanged", "_ignoreReplayEvents", "afterInit", "afterDraw", "_fallback", "addIfString", "addedLabels", "findOrAddLabel", "lastIndexOf", "_getLabelForValue", "CategoryScale", "_startValue", "_valueRange", "_addedLabels", "added", "generateTicks", "generationOptions", "dataRange", "MIN_SPACING", "precision", "maxTicks", "maxDigits", "includeBounds", "unit", "maxSpaces", "rmin", "rmax", "countDefined", "minSpacing", "niceNum", "niceMin", "niceMax", "numSpaces", "almostWhole", "almostEquals", "decimalPlaces", "_decimalPlaces", "relativeLabelSize", "tickValue", "rad", "LinearScaleBase", "_endValue", "handleTickRangeOptions", "setMin", "setMax", "minSign", "maxSign", "getTickLimit", "stepSize", "computeTickLimit", "numericGeneratorOptions", "_setMinAndMaxByKey", "LinearScale", "Ticks", "formatters", "numeric", "log10Floor", "log10", "changeExponent", "m", "isMajor", "tickVal", "steps", "rangeExp", "rangeStep", "startExp", "minExp", "exp", "significand", "lastTick", "LogarithmicScale", "_zero", "logarithmic", "getTickBackdropHeight", "measureLabelSize", "_longestText", "determineLimits", "fitWithPointLabels", "limits", "valueCount", "_pointLabels", "pointLabelOpts", "additionalAngle", "centerPointLabels", "getPointLabelContext", "getPointPosition", "drawingArea", "plFont", "hLimits", "vLimits", "updateLimits", "setCenterPoint", "_pointLabelItems", "buildPointLabelItems", "createPointLabelItem", "itemOpts", "outerDistance", "extra", "pointLabelPosition", "yForAngle", "getTextAlignForAngle", "leftForTextAlign", "isNotOverlapped", "apexesInArea", "drawPointLabelBox", "backdropLeft", "backdropTop", "backdropWidth", "backdropHeight", "drawPointLabels", "pathRadiusLine", "drawRadiusLine", "gridLineOpts", "createPointLabelContext", "RadialLinearScale", "leftMovement", "rightMovement", "topMovement", "bottomMovement", "angleMultiplier", "scalingFactor", "getValueForDistanceFromCenter", "scaledDistance", "pointLabel", "distanceFromCenter", "getBasePosition", "getPointLabelPosition", "rotate", "animate", "INTERVALS", "millisecond", "common", "second", "minute", "hour", "day", "week", "month", "quarter", "year", "UNITS", "sorter", "input", "adapter", "_adapter", "parser", "isoWeekday", "_parseOpts", "determineUnitForAutoTicks", "minUnit", "capacity", "interval", "MAX_SAFE_INTEGER", "determineUnitForFormatting", "determineMajorUnit", "addTick", "time", "timestamps", "_lookup", "timestamp", "setMajorTicks", "majorUnit", "ticksFromTimestamps", "TimeScale", "_unit", "_majorUnit", "_offsets", "_normalized", "adapters", "displayFormats", "normalized", "_applyBounds", "_getLabelBounds", "getLabelTimestamps", "timeOpts", "_generate", "_filterBetween", "_getLabelCapacity", "initOffsets", "offsetAfterAutoskip", "getDecimalForValue", "minor", "weekday", "hasWeekday", "getDataTimestamps", "tooltipFormat", "datetime", "fmt", "_tickFormatFunction", "formatter", "minorFormat", "majorFormat", "offsets", "_getLabelSize", "ticksOpts", "tickLabelWidth", "cosRotation", "sinRotation", "tickFontSize", "exampleTime", "exampleLabel", "normalize", "table", "prevSource", "nextSource", "prevTarget", "nextTarget", "span", "TimeSeriesScale", "_table", "_minPos", "_tableRange", "_getTimestampsForTable", "buildLookupTable", "registerables", "sign", "round", "sign", "sign", "defaultOptions", "getDefaultOptions", "match", "match", "sign", "isLeapYearIndex", "match", "match", "match", "match", "match", "match", "match", "match", "DAYS_IN_MONTH", "DAYS_IN_MONTH_LEAP_YEAR", "match", "isLeapYearIndex", "match", "isLeapYearIndex", "defaultOptions", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "match", "formattingTokensRegExp", "longFormattingTokensRegExp", "escapedStringRegExp", "doubleQuoteRegExp", "unescapedLatinCharacterRegExp", "parse", "defaultOptions", "getDefaultOptions", "cleanEscapedString", "index", "splitDateString", "parseYear", "parseDate", "time", "offset", "parseTime", "patterns", "validateWeekDate", "dayOfISOWeekYear", "validateDate", "validateDayOfYearDate", "validateTime", "sign", "validateTimezone", "isLeapYearIndex", "parse", "time", "max", "min", "time", "key", "error", "error", "Html5QrcodeSupportedFormats", "DecodedTextType", "format", "Html5QrcodeScanType", "Html5QrcodeConstants", "QrcodeResultFormat", "format", "Html5QrcodeResultFactory", "Html5QrcodeErrorTypes", "Html5QrcodeErrorFactory", "error", "BaseLoggger", "message", "Html5QrcodeStrings", "error", "Html5QrcodeScannerStrings", "LibraryInfoStrings", "VideoConstraintsUtil", "key", "ZXingHtml5QrcodeDecoder", "resolve", "error", "key", "BarcodeDetectorDelegate", "key", "Html5QrcodeShim", "AbstractCameraCapability", "AbstractRangeCameraCapability", "ZoomFeatureImpl", "TorchFeatureImpl", "CameraCapabilitiesImpl", "RenderedCameraImpl", "resolve", "CameraImpl", "CameraFactory", "CameraRetriever", "_i", "resolve", "callback", "Html5QrcodeScannerState", "StateManagerImpl", "StateManagerProxy", "StateManagerFactory", "__extends", "Constants", "InternalHtml5QrcodeConfig", "Html5Qrcode", "resolve", "error", "format", "key", "top", "bottom", "PersistedDataFactory", "PersistedDataManager", "LibraryInfoDiv", "LibraryInfoIcon", "LibraryInfoContainer", "CameraPermissions", "ScanTypeSelector", "PublicUiElementIdAndClasses", "BaseUiElementFactory", "elementType", "TorchController", "error", "TorchButton", "__awaiter", "FileSelectionUi", "CameraSelectionUi", "CameraZoomUi", "Html5QrcodeScannerStatus", "Html5QrcodeScanner", "error", "resolve", "cameraId", "_", "TomSelect", "message", "Events", "Instances", "instances", "Accordion", "_a", "_b", "callback", "Default", "DefaultInstanceOptions", "Collapse", "__assign", "callback", "Default", "DefaultInstanceOptions", "Carousel", "__assign", "_a", "_b", "callback", "Default", "DefaultInstanceOptions", "Dismiss", "__assign", "callback", "name", "style", "round", "round", "getComputedStyle", "getComputedStyle", "window", "min", "max", "key", "toPaddingObject", "popperOffsets", "min", "max", "offset", "effect", "round", "popper", "getComputedStyle", "effect", "window", "hash", "getComputedStyle", "getComputedStyle", "clippingParents", "getComputedStyle", "reference", "popperOffsets", "offset", "key", "placements", "placement", "placements", "placement", "_loop", "_i", "checks", "offset", "popperOffsets", "offset", "min", "max", "round", "map", "debounce", "fn", "resolve", "format", "index", "self", "key", "format", "fn", "merged", "key", "defaultModifiers", "defaultOptions", "createPopper", "reference", "popper", "options", "getComputedStyle", "index", "fn", "debounce", "resolve", "state", "effect", "noopFn", "Default", "DefaultInstanceOptions", "Dropdown", "__assign", "callback", "Default", "DefaultInstanceOptions", "Modal", "__assign", "callback", "Default", "DefaultInstanceOptions", "Drawer", "__assign", "callback", "Default", "DefaultInstanceOptions", "Tabs", "__assign", "_a", "_b", "callback", "Default", "DefaultInstanceOptions", "Tooltip", "__assign", "__spreadArray", "callback", "Default", "DefaultInstanceOptions", "Popover", "__assign", "__spreadArray", "callback", "offset", "Default", "DefaultInstanceOptions", "Dial", "__assign", "callback", "Default", "DefaultInstanceOptions", "InputCounter", "__assign", "callback", "Default", "DefaultInstanceOptions", "CopyClipboard", "__assign", "callback", "import_tom_select", "TomSelect", "import_tom_select", "TomSelect", "index", "index", "e", "flatpickr", "import_tom_select", "TomSelect", "HTMLElement", "message", "FrameLoadingStyle", "location", "left", "right", "resolve", "interpolate", "match", "elements", "FetchMethod", "error", "FormSubmissionState", "FormEnctype", "cookie", "callback", "clone", "TimingMetric", "VisitState", "defaultOptions", "SystemStatusCode", "session", "visit", "PageStage", "key", "index", "start", "element", "createConsumer", "key", "import_flowbite", "moment", "time", "self", "import_flatpickr", "flatpickr", "location", "assets", "location", "jQuery"]
}
