{
  "version": 3,
  "sources": ["../../../node_modules/chartkick/dist/chartkick.js", "../../../node_modules/ts-custom-error/dist/src/utils.js", "../../../node_modules/ts-custom-error/dist/src/custom-error.js", "../../../node_modules/ts-custom-error/dist/src/factory.js", "../../../node_modules/@zxing/library/esm/core/Exception.js", "../../../node_modules/@zxing/library/esm/core/ArgumentException.js", "../../../node_modules/@zxing/library/esm/core/IllegalArgumentException.js", "../../../node_modules/@zxing/library/esm/core/BinaryBitmap.js", "../../../node_modules/@zxing/library/esm/core/ChecksumException.js", "../../../node_modules/@zxing/library/esm/core/Binarizer.js", "../../../node_modules/@zxing/library/esm/core/util/System.js", "../../../node_modules/@zxing/library/esm/core/IndexOutOfBoundsException.js", "../../../node_modules/@zxing/library/esm/core/ArrayIndexOutOfBoundsException.js", "../../../node_modules/@zxing/library/esm/core/util/Arrays.js", "../../../node_modules/@zxing/library/esm/core/util/Integer.js", "../../../node_modules/@zxing/library/esm/core/common/BitArray.js", "../../../node_modules/@zxing/library/esm/core/DecodeHintType.js", "../../../node_modules/@zxing/library/esm/core/FormatException.js", "../../../node_modules/@zxing/library/esm/core/common/CharacterSetECI.js", "../../../node_modules/@zxing/library/esm/core/UnsupportedOperationException.js", "../../../node_modules/@zxing/library/esm/core/util/StringEncoding.js", "../../../node_modules/@zxing/library/esm/core/common/StringUtils.js", "../../../node_modules/@zxing/library/esm/core/util/StringBuilder.js", "../../../node_modules/@zxing/library/esm/core/common/BitMatrix.js", "../../../node_modules/@zxing/library/esm/core/NotFoundException.js", "../../../node_modules/@zxing/library/esm/core/common/GlobalHistogramBinarizer.js", "../../../node_modules/@zxing/library/esm/core/common/HybridBinarizer.js", "../../../node_modules/@zxing/library/esm/core/LuminanceSource.js", "../../../node_modules/@zxing/library/esm/core/InvertedLuminanceSource.js", "../../../node_modules/@zxing/library/esm/browser/HTMLCanvasElementLuminanceSource.js", "../../../node_modules/@zxing/library/esm/browser/VideoInputDevice.js", "../../../node_modules/@zxing/library/esm/browser/BrowserCodeReader.js", "../../../node_modules/@zxing/library/esm/core/Result.js", "../../../node_modules/@zxing/library/esm/core/BarcodeFormat.js", "../../../node_modules/@zxing/library/esm/core/ResultMetadataType.js", "../../../node_modules/@zxing/library/esm/core/common/DecoderResult.js", "../../../node_modules/@zxing/library/esm/core/common/reedsolomon/AbstractGenericGF.js", "../../../node_modules/@zxing/library/esm/core/common/reedsolomon/GenericGFPoly.js", "../../../node_modules/@zxing/library/esm/core/ArithmeticException.js", "../../../node_modules/@zxing/library/esm/core/common/reedsolomon/GenericGF.js", "../../../node_modules/@zxing/library/esm/core/ReedSolomonException.js", "../../../node_modules/@zxing/library/esm/core/IllegalStateException.js", "../../../node_modules/@zxing/library/esm/core/common/reedsolomon/ReedSolomonDecoder.js", "../../../node_modules/@zxing/library/esm/core/aztec/decoder/Decoder.js", "../../../node_modules/@zxing/library/esm/core/common/detector/MathUtils.js", "../../../node_modules/@zxing/library/esm/core/util/Float.js", "../../../node_modules/@zxing/library/esm/core/ResultPoint.js", "../../../node_modules/@zxing/library/esm/core/common/DetectorResult.js", "../../../node_modules/@zxing/library/esm/core/aztec/AztecDetectorResult.js", "../../../node_modules/@zxing/library/esm/core/common/detector/WhiteRectangleDetector.js", "../../../node_modules/@zxing/library/esm/core/common/GridSampler.js", "../../../node_modules/@zxing/library/esm/core/common/PerspectiveTransform.js", "../../../node_modules/@zxing/library/esm/core/common/DefaultGridSampler.js", "../../../node_modules/@zxing/library/esm/core/common/GridSamplerInstance.js", "../../../node_modules/@zxing/library/esm/core/aztec/detector/Detector.js", "../../../node_modules/@zxing/library/esm/core/aztec/AztecReader.js", "../../../node_modules/@zxing/library/esm/browser/BrowserAztecCodeReader.js", "../../../node_modules/@zxing/library/esm/core/oned/OneDReader.js", "../../../node_modules/@zxing/library/esm/core/oned/Code128Reader.js", "../../../node_modules/@zxing/library/esm/core/oned/Code39Reader.js", "../../../node_modules/@zxing/library/esm/core/oned/Code93Reader.js", "../../../node_modules/@zxing/library/esm/core/oned/ITFReader.js", "../../../node_modules/@zxing/library/esm/core/oned/AbstractUPCEANReader.js", "../../../node_modules/@zxing/library/esm/core/oned/UPCEANExtension5Support.js", "../../../node_modules/@zxing/library/esm/core/oned/UPCEANExtension2Support.js", "../../../node_modules/@zxing/library/esm/core/oned/UPCEANExtensionSupport.js", "../../../node_modules/@zxing/library/esm/core/oned/UPCEANReader.js", "../../../node_modules/@zxing/library/esm/core/oned/EAN13Reader.js", "../../../node_modules/@zxing/library/esm/core/oned/EAN8Reader.js", "../../../node_modules/@zxing/library/esm/core/oned/UPCAReader.js", "../../../node_modules/@zxing/library/esm/core/oned/UPCEReader.js", "../../../node_modules/@zxing/library/esm/core/oned/MultiFormatUPCEANReader.js", "../../../node_modules/@zxing/library/esm/core/oned/CodaBarReader.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/AbstractRSSReader.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/DataCharacter.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/FinderPattern.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/RSSUtils.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/BitArrayBuilder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/BlockParsedResult.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/DecodedObject.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/DecodedChar.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/DecodedInformation.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/DecodedNumeric.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/FieldParser.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/GeneralAppIdDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AbstractExpandedDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01decoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01AndOtherAIs.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AnyAIDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01weightDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI013x0xDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI013103decoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01320xDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01392xDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI01393xDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AI013x0x1xDecoder.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/decoders/AbstractExpandedDecoderComplement.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/ExpandedPair.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/ExpandedRow.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/expanded/RSSExpandedReader.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/Pair.js", "../../../node_modules/@zxing/library/esm/core/oned/rss/RSS14Reader.js", "../../../node_modules/@zxing/library/esm/core/oned/MultiFormatOneDReader.js", "../../../node_modules/@zxing/library/esm/browser/BrowserBarcodeReader.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/decoder/Version.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/decoder/BitMatrixParser.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/decoder/DataBlock.js", "../../../node_modules/@zxing/library/esm/core/common/BitSource.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/decoder/DecodedBitStreamParser.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/decoder/Decoder.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/detector/Detector.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/DataMatrixReader.js", "../../../node_modules/@zxing/library/esm/browser/BrowserDatamatrixCodeReader.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/ErrorCorrectionLevel.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/FormatInformation.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/ECBlocks.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/ECB.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/Version.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/DataMask.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/BitMatrixParser.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/DataBlock.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/Mode.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/DecodedBitStreamParser.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/QRCodeDecoderMetaData.js", "../../../node_modules/@zxing/library/esm/core/qrcode/decoder/Decoder.js", "../../../node_modules/@zxing/library/esm/core/qrcode/detector/AlignmentPattern.js", "../../../node_modules/@zxing/library/esm/core/qrcode/detector/AlignmentPatternFinder.js", "../../../node_modules/@zxing/library/esm/core/qrcode/detector/FinderPattern.js", "../../../node_modules/@zxing/library/esm/core/qrcode/detector/FinderPatternInfo.js", "../../../node_modules/@zxing/library/esm/core/qrcode/detector/FinderPatternFinder.js", "../../../node_modules/@zxing/library/esm/core/qrcode/detector/Detector.js", "../../../node_modules/@zxing/library/esm/core/qrcode/QRCodeReader.js", "../../../node_modules/@zxing/library/esm/core/pdf417/PDF417Common.js", "../../../node_modules/@zxing/library/esm/core/pdf417/detector/PDF417DetectorResult.js", "../../../node_modules/@zxing/library/esm/core/pdf417/detector/Detector.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/ec/ModulusPoly.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/ec/ModulusBase.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/ec/ModulusGF.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/ec/ErrorCorrection.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/BoundingBox.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/BarcodeMetadata.js", "../../../node_modules/@zxing/library/esm/core/util/Formatter.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/DetectionResultColumn.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/BarcodeValue.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/DetectionResultRowIndicatorColumn.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/DetectionResult.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/Codeword.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/PDF417CodewordDecoder.js", "../../../node_modules/@zxing/library/esm/core/pdf417/PDF417ResultMetadata.js", "../../../node_modules/@zxing/library/esm/core/util/Long.js", "../../../node_modules/@zxing/library/esm/core/NullPointerException.js", "../../../node_modules/@zxing/library/esm/core/util/OutputStream.js", "../../../node_modules/@zxing/library/esm/core/OutOfMemoryError.js", "../../../node_modules/@zxing/library/esm/core/util/ByteArrayOutputStream.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/DecodedBitStreamParser.js", "../../../node_modules/@zxing/library/esm/core/pdf417/decoder/PDF417ScanningDecoder.js", "../../../node_modules/@zxing/library/esm/core/pdf417/PDF417Reader.js", "../../../node_modules/@zxing/library/esm/core/ReaderException.js", "../../../node_modules/@zxing/library/esm/core/MultiFormatReader.js", "../../../node_modules/@zxing/library/esm/browser/BrowserMultiFormatReader.js", "../../../node_modules/@zxing/library/esm/browser/BrowserPDF417Reader.js", "../../../node_modules/@zxing/library/esm/browser/BrowserQRCodeReader.js", "../../../node_modules/@zxing/library/esm/core/EncodeHintType.js", "../../../node_modules/@zxing/library/esm/core/common/reedsolomon/ReedSolomonEncoder.js", "../../../node_modules/@zxing/library/esm/core/qrcode/encoder/MaskUtil.js", "../../../node_modules/@zxing/library/esm/core/qrcode/encoder/ByteMatrix.js", "../../../node_modules/@zxing/library/esm/core/qrcode/encoder/QRCode.js", "../../../node_modules/@zxing/library/esm/core/WriterException.js", "../../../node_modules/@zxing/library/esm/core/qrcode/encoder/MatrixUtil.js", "../../../node_modules/@zxing/library/esm/core/qrcode/encoder/BlockPair.js", "../../../node_modules/@zxing/library/esm/core/qrcode/encoder/Encoder.js", "../../../node_modules/@zxing/library/esm/browser/BrowserQRCodeSvgWriter.js", "../../../node_modules/@zxing/library/esm/browser/DecodeContinuouslyCallback.js", "../../../node_modules/@zxing/library/esm/browser/HTMLVisualMediaElement.js", "../../../node_modules/@zxing/library/esm/browser.js", "../../../node_modules/@zxing/library/esm/core/qrcode/QRCodeWriter.js", "../../../node_modules/@zxing/library/esm/core/MultiFormatWriter.js", "../../../node_modules/@zxing/library/esm/core/PlanarYUVLuminanceSource.js", "../../../node_modules/@zxing/library/esm/core/RGBLuminanceSource.js", "../../../node_modules/@zxing/library/esm/core/util/Charset.js", "../../../node_modules/@zxing/library/esm/core/util/StandardCharsets.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/DefaultPlacement.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/constants.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/ErrorCorrection.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/ASCIIEncoder.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/Base256Encoder.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/C40Encoder.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/EdifactEncoder.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/SymbolInfo.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/EncoderContext.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/X12Encoder.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/TextEncoder.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/HighLevelEncoder.js", "../../../node_modules/@zxing/library/esm/core/common/ECIEncoderSet.js", "../../../node_modules/@zxing/library/esm/core/common/MinimalECIInput.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/MinimalEncoder.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/encoder/index.js", "../../../node_modules/@zxing/library/esm/core/datamatrix/DataMatrixWriter.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/AztecCode.js", "../../../node_modules/@zxing/library/esm/core/util/Collections.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/Token.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/SimpleToken.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/BinaryShiftToken.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/TokenHelpers.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/EncoderConstants.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/LatchTable.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/ShiftTable.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/State.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/CharMap.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/HighLevelEncoder.js", "../../../node_modules/@zxing/library/esm/core/aztec/encoder/Encoder.js", "../../../node_modules/@zxing/library/esm/core/aztec/AztecWriter.js", "../../../node_modules/@zxing/library/esm/index.js", "../../../node_modules/dayjs/dayjs.min.js", "../../../node_modules/dayjs/plugin/quarterOfYear.js", "../../../node_modules/@hotwired/turbo-rails/app/assets/javascripts/turbo.js", "../../../node_modules/dayjs/plugin/timezone.js", "../../../node_modules/dayjs/plugin/advancedFormat.js", "../../../node_modules/dayjs/plugin/duration.js", "../../../node_modules/chartkick/chart.js/chart.esm.js", "../../../node_modules/chartkick/node_modules/chart.js/dist/chunks/helpers.segment.js", "../../../node_modules/chartkick/node_modules/chart.js/dist/chart.esm.js", "../../../node_modules/chartkick/node_modules/chart.js/auto/auto.esm.js", "../../../node_modules/date-fns/esm/_lib/toInteger/index.js", "../../../node_modules/date-fns/esm/_lib/requiredArgs/index.js", "../../../node_modules/date-fns/esm/toDate/index.js", "../../../node_modules/date-fns/esm/addDays/index.js", "../../../node_modules/date-fns/esm/addMonths/index.js", "../../../node_modules/date-fns/esm/addMilliseconds/index.js", "../../../node_modules/date-fns/esm/addHours/index.js", "../../../node_modules/date-fns/esm/startOfWeek/index.js", "../../../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js", "../../../node_modules/date-fns/esm/startOfDay/index.js", "../../../node_modules/date-fns/esm/differenceInCalendarDays/index.js", "../../../node_modules/date-fns/esm/addMinutes/index.js", "../../../node_modules/date-fns/esm/addQuarters/index.js", "../../../node_modules/date-fns/esm/addSeconds/index.js", "../../../node_modules/date-fns/esm/addWeeks/index.js", "../../../node_modules/date-fns/esm/addYears/index.js", "../../../node_modules/date-fns/esm/compareAsc/index.js", "../../../node_modules/date-fns/esm/constants/index.js", "../../../node_modules/date-fns/esm/isDate/index.js", "../../../node_modules/date-fns/esm/isValid/index.js", "../../../node_modules/date-fns/esm/differenceInCalendarMonths/index.js", "../../../node_modules/date-fns/esm/differenceInCalendarYears/index.js", "../../../node_modules/date-fns/esm/differenceInDays/index.js", "../../../node_modules/date-fns/esm/differenceInMilliseconds/index.js", "../../../node_modules/date-fns/esm/_lib/roundingMethods/index.js", "../../../node_modules/date-fns/esm/differenceInHours/index.js", "../../../node_modules/date-fns/esm/differenceInMinutes/index.js", "../../../node_modules/date-fns/esm/endOfDay/index.js", "../../../node_modules/date-fns/esm/endOfMonth/index.js", "../../../node_modules/date-fns/esm/isLastDayOfMonth/index.js", "../../../node_modules/date-fns/esm/differenceInMonths/index.js", "../../../node_modules/date-fns/esm/differenceInQuarters/index.js", "../../../node_modules/date-fns/esm/differenceInSeconds/index.js", "../../../node_modules/date-fns/esm/differenceInWeeks/index.js", "../../../node_modules/date-fns/esm/differenceInYears/index.js", "../../../node_modules/date-fns/esm/startOfMinute/index.js", "../../../node_modules/date-fns/esm/startOfQuarter/index.js", "../../../node_modules/date-fns/esm/startOfMonth/index.js", "../../../node_modules/date-fns/esm/startOfYear/index.js", "../../../node_modules/date-fns/esm/endOfYear/index.js", "../../../node_modules/date-fns/esm/endOfHour/index.js", "../../../node_modules/date-fns/esm/endOfWeek/index.js", "../../../node_modules/date-fns/esm/endOfMinute/index.js", "../../../node_modules/date-fns/esm/endOfQuarter/index.js", "../../../node_modules/date-fns/esm/endOfSecond/index.js", "../../../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js", "../../../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js", "../../../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js", "../../../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js", "../../../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js", "../../../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js", "../../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js", "../../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js", "../../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js", "../../../node_modules/date-fns/esm/locale/en-US/index.js", "../../../node_modules/date-fns/esm/subMilliseconds/index.js", "../../../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js", "../../../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js", "../../../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js", "../../../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js", "../../../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js", "../../../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js", "../../../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js", "../../../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js", "../../../node_modules/date-fns/esm/_lib/getUTCWeek/index.js", "../../../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js", "../../../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js", "../../../node_modules/date-fns/esm/_lib/format/formatters/index.js", "../../../node_modules/date-fns/esm/_lib/format/longFormatters/index.js", "../../../node_modules/date-fns/esm/_lib/protectedTokens/index.js", "../../../node_modules/date-fns/esm/format/index.js", "../../../node_modules/date-fns/esm/_lib/assign/index.js", "../../../node_modules/date-fns/esm/_lib/setUTCDay/index.js", "../../../node_modules/date-fns/esm/_lib/setUTCISODay/index.js", "../../../node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js", "../../../node_modules/date-fns/esm/_lib/setUTCWeek/index.js", "../../../node_modules/date-fns/esm/parse/_lib/parsers/index.js", "../../../node_modules/date-fns/esm/parse/index.js", "../../../node_modules/date-fns/esm/startOfHour/index.js", "../../../node_modules/date-fns/esm/startOfSecond/index.js", "../../../node_modules/date-fns/esm/parseISO/index.js", "../../../node_modules/chartkick/node_modules/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js", "../../../node_modules/chart.js/dist/chunks/helpers.segment.mjs", "../../../node_modules/chart.js/dist/chart.mjs", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/app_controller.js", "../../javascript/controllers/auth_controller.js", "../../../node_modules/internmap/src/index.js", "../../../node_modules/d3-dispatch/src/dispatch.js", "../../../node_modules/d3-selection/src/namespaces.js", "../../../node_modules/d3-selection/src/namespace.js", "../../../node_modules/d3-selection/src/creator.js", "../../../node_modules/d3-selection/src/selector.js", "../../../node_modules/d3-selection/src/selection/select.js", "../../../node_modules/d3-selection/src/array.js", "../../../node_modules/d3-selection/src/selectorAll.js", "../../../node_modules/d3-selection/src/selection/selectAll.js", "../../../node_modules/d3-selection/src/matcher.js", "../../../node_modules/d3-selection/src/selection/selectChild.js", "../../../node_modules/d3-selection/src/selection/selectChildren.js", "../../../node_modules/d3-selection/src/selection/filter.js", "../../../node_modules/d3-selection/src/selection/sparse.js", "../../../node_modules/d3-selection/src/selection/enter.js", "../../../node_modules/d3-selection/src/constant.js", "../../../node_modules/d3-selection/src/selection/data.js", "../../../node_modules/d3-selection/src/selection/exit.js", "../../../node_modules/d3-selection/src/selection/join.js", "../../../node_modules/d3-selection/src/selection/merge.js", "../../../node_modules/d3-selection/src/selection/order.js", "../../../node_modules/d3-selection/src/selection/sort.js", "../../../node_modules/d3-selection/src/selection/call.js", "../../../node_modules/d3-selection/src/selection/nodes.js", "../../../node_modules/d3-selection/src/selection/node.js", "../../../node_modules/d3-selection/src/selection/size.js", "../../../node_modules/d3-selection/src/selection/empty.js", "../../../node_modules/d3-selection/src/selection/each.js", "../../../node_modules/d3-selection/src/selection/attr.js", "../../../node_modules/d3-selection/src/window.js", "../../../node_modules/d3-selection/src/selection/style.js", "../../../node_modules/d3-selection/src/selection/property.js", "../../../node_modules/d3-selection/src/selection/classed.js", "../../../node_modules/d3-selection/src/selection/text.js", "../../../node_modules/d3-selection/src/selection/html.js", "../../../node_modules/d3-selection/src/selection/raise.js", "../../../node_modules/d3-selection/src/selection/lower.js", "../../../node_modules/d3-selection/src/selection/append.js", "../../../node_modules/d3-selection/src/selection/insert.js", "../../../node_modules/d3-selection/src/selection/remove.js", "../../../node_modules/d3-selection/src/selection/clone.js", "../../../node_modules/d3-selection/src/selection/datum.js", "../../../node_modules/d3-selection/src/selection/on.js", "../../../node_modules/d3-selection/src/selection/dispatch.js", "../../../node_modules/d3-selection/src/selection/iterator.js", "../../../node_modules/d3-selection/src/selection/index.js", "../../../node_modules/d3-selection/src/select.js", "../../../node_modules/d3-color/src/define.js", "../../../node_modules/d3-color/src/color.js", "../../../node_modules/d3-interpolate/src/basis.js", "../../../node_modules/d3-interpolate/src/basisClosed.js", "../../../node_modules/d3-interpolate/src/constant.js", "../../../node_modules/d3-interpolate/src/color.js", "../../../node_modules/d3-interpolate/src/rgb.js", "../../../node_modules/d3-interpolate/src/number.js", "../../../node_modules/d3-interpolate/src/string.js", "../../../node_modules/d3-interpolate/src/transform/decompose.js", "../../../node_modules/d3-interpolate/src/transform/parse.js", "../../../node_modules/d3-interpolate/src/transform/index.js", "../../../node_modules/d3-timer/src/timer.js", "../../../node_modules/d3-timer/src/timeout.js", "../../../node_modules/d3-transition/src/transition/schedule.js", "../../../node_modules/d3-transition/src/interrupt.js", "../../../node_modules/d3-transition/src/selection/interrupt.js", "../../../node_modules/d3-transition/src/transition/tween.js", "../../../node_modules/d3-transition/src/transition/interpolate.js", "../../../node_modules/d3-transition/src/transition/attr.js", "../../../node_modules/d3-transition/src/transition/attrTween.js", "../../../node_modules/d3-transition/src/transition/delay.js", "../../../node_modules/d3-transition/src/transition/duration.js", "../../../node_modules/d3-transition/src/transition/ease.js", "../../../node_modules/d3-transition/src/transition/easeVarying.js", "../../../node_modules/d3-transition/src/transition/filter.js", "../../../node_modules/d3-transition/src/transition/merge.js", "../../../node_modules/d3-transition/src/transition/on.js", "../../../node_modules/d3-transition/src/transition/remove.js", "../../../node_modules/d3-transition/src/transition/select.js", "../../../node_modules/d3-transition/src/transition/selectAll.js", "../../../node_modules/d3-transition/src/transition/selection.js", "../../../node_modules/d3-transition/src/transition/style.js", "../../../node_modules/d3-transition/src/transition/styleTween.js", "../../../node_modules/d3-transition/src/transition/text.js", "../../../node_modules/d3-transition/src/transition/textTween.js", "../../../node_modules/d3-transition/src/transition/transition.js", "../../../node_modules/d3-transition/src/transition/end.js", "../../../node_modules/d3-transition/src/transition/index.js", "../../../node_modules/d3-ease/src/cubic.js", "../../../node_modules/d3-transition/src/selection/transition.js", "../../../node_modules/d3-transition/src/selection/index.js", "../../../node_modules/d3-brush/src/brush.js", "../../../node_modules/d3-hierarchy/src/hierarchy/count.js", "../../../node_modules/d3-hierarchy/src/hierarchy/each.js", "../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js", "../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js", "../../../node_modules/d3-hierarchy/src/hierarchy/find.js", "../../../node_modules/d3-hierarchy/src/hierarchy/sum.js", "../../../node_modules/d3-hierarchy/src/hierarchy/sort.js", "../../../node_modules/d3-hierarchy/src/hierarchy/path.js", "../../../node_modules/d3-hierarchy/src/hierarchy/ancestors.js", "../../../node_modules/d3-hierarchy/src/hierarchy/descendants.js", "../../../node_modules/d3-hierarchy/src/hierarchy/leaves.js", "../../../node_modules/d3-hierarchy/src/hierarchy/links.js", "../../../node_modules/d3-hierarchy/src/hierarchy/iterator.js", "../../../node_modules/d3-hierarchy/src/hierarchy/index.js", "../../../node_modules/d3-hierarchy/src/accessors.js", "../../../node_modules/d3-hierarchy/src/constant.js", "../../../node_modules/d3-hierarchy/src/lcg.js", "../../../node_modules/d3-hierarchy/src/array.js", "../../../node_modules/d3-hierarchy/src/pack/enclose.js", "../../../node_modules/d3-hierarchy/src/pack/siblings.js", "../../../node_modules/d3-hierarchy/src/pack/index.js", "../../../node_modules/d3-scale/src/init.js", "../../../node_modules/d3-scale/src/ordinal.js", "../../../node_modules/d3-zoom/src/transform.js", "../../javascript/controllers/bubble_chart_controller.js", "../../javascript/controllers/butterfly_sort_controller.js", "../../../node_modules/@rails/request.js/src/fetch_response.js", "../../../node_modules/@rails/request.js/src/request_interceptor.js", "../../../node_modules/@rails/request.js/src/lib/utils.js", "../../../node_modules/@rails/request.js/src/fetch_request.js", "../../javascript/controllers/candidate_certifications_controller.js", "../../javascript/controllers/candidate_educations_controller.js", "../../javascript/state.js", "../../javascript/controllers/candidate_live_event_controller.js", "../../javascript/controllers/candidate_positions_controller.js", "../../javascript/controllers/candidate_presence_controller.js", "../../javascript/controllers/candidate_registration_controller.js", "../../javascript/controllers/candidate_resumes_controller.js", "../../javascript/controllers/client/advanced_candidate_search_controller.js", "../../javascript/controllers/client/candidate_qr_code_scanner_controller.js", "../../javascript/controllers/client/date_range_picker_controller.js", "../../javascript/controllers/client/stats_date_range_picker_controller.js", "../../javascript/controllers/client_live_event_controller.js", "../../javascript/controllers/client_validations_controller.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../javascript/channels/connection_health_channel.js", "../../javascript/controllers/connection_monitor_controller.js", "../../javascript/utils/date_time_formatter.js", "../../javascript/controllers/count_down_timer_controller.js", "../../javascript/controllers/dashboard_role_picker_controller.js", "../../javascript/controllers/date_picker_controller.js", "../../javascript/controllers/date_range_picker_field_controller.js", "../../javascript/controllers/device_tester_controller.js", "../../javascript/controllers/disable_link_controller.js", "../../javascript/controllers/employers_search_controller.js", "../../javascript/controllers/event_control_center_controller.js", "../../javascript/controllers/event_doctor_controller.js", "../../javascript/controllers/event_notifications_controller.js", "../../javascript/controllers/event_package_manager_controller.js", "../../javascript/controllers/events_calendar_controller.js", "../../javascript/controllers/exhibitor_interests_controller.js", "../../javascript/controllers/exhibitor_message_controller.js", "../../javascript/controllers/exhibitor_registration_search_controller.js", "../../javascript/controllers/featured_jobs_search_controller.js", "../../javascript/controllers/feedback_popup_controller.js", "../../javascript/controllers/file_upload_controller.js", "../../javascript/controllers/form_input_tracker_controller.js", "../../javascript/controllers/form_redirect_controller.js", "../../javascript/controllers/google_place_predictions_controller.js", "../../javascript/controllers/infinite_scroll_controller.js", "../../javascript/controllers/installation_team_dashboard_controller.js", "../../javascript/controllers/interest_controller.js", "../../javascript/controllers/location_picker_controller.js", "../../javascript/controllers/messaging_campaign_controller.js", "../../javascript/controllers/modal_controller.js", "../../javascript/controllers/month_year_picker_controller.js", "../../javascript/controllers/picker_controller.js", "../../javascript/controllers/multi_chip_picker_controller.js", "../../javascript/controllers/multi_search_controller.js", "../../javascript/controllers/organizations_search_controller.js", "../../javascript/controllers/payment_calculator_controller.js", "../../javascript/controllers/pdf_download_controller.js", "../../components/ui/phone_call_icon_component_controller.js", "../../javascript/controllers/prefill_highlight_controller.js", "../../javascript/broadcast/peer_media_presenter.js", "../../javascript/broadcast/background_blur.js", "../../javascript/controllers/publish_broadcast_controller.js", "../../javascript/controllers/qr_code_reader_controller.js", "../../javascript/controllers/receive_broadcast_controller.js", "../../javascript/controllers/reset_form_controller.js", "../../javascript/controllers/rms2_client_search_controller.js", "../../javascript/controllers/save_sub_forms_controller.js", "../../javascript/controllers/scam_alert_controller.js", "../../javascript/controllers/search_picker_controller.js", "../../javascript/controllers/search_users_controller.js", "../../javascript/controllers/search_while_typing_controller.js", "../../javascript/controllers/set_authenticity_token_controller.js", "../../javascript/controllers/sortable_list_controller.js", "../../javascript/controllers/sso_email_detection_controller.js", "../../javascript/controllers/staff_dashboard_controller.js", "../../javascript/controllers/stats_date_picker_controller.js", "../../javascript/controllers/tabbed_chat_controller.js", "../../javascript/controllers/table_controller.js", "../../javascript/controllers/text_chat_controller.js", "../../javascript/controllers/time_controller.js", "../../javascript/controllers/toggle_controller.js", "../../javascript/controllers/turbo_frame_reloader_controller.js", "../../javascript/controllers/turbo_stream_link_controller.js", "../../javascript/controllers/typing_indicator_controller.js", "../../javascript/controllers/users_search_controller.js", "../../javascript/controllers/video_chat_controller.js", "../../javascript/controllers/webinar_toggle_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/ahoy.js/dist/ahoy.esm.js", "../../../node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js", "../../javascript/application.js"],
  "sourcesContent": ["/*!\n * Chartkick.js\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * v4.2.0\n * MIT License\n */\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 = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Chartkick = factory());\n})(this, (function () { 'use strict';\n\n  function isArray(variable) {\n    return Object.prototype.toString.call(variable) === \"[object Array]\";\n  }\n\n  function isFunction(variable) {\n    return variable instanceof Function;\n  }\n\n  function isPlainObject(variable) {\n    // protect against prototype pollution, defense 2\n    return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n  }\n\n  // https://github.com/madrobby/zepto/blob/master/src/zepto.js\n  function extend(target, source) {\n    var key;\n    for (key in source) {\n      // protect against prototype pollution, defense 1\n      if (key === \"__proto__\") { continue; }\n\n      if (isPlainObject(source[key]) || isArray(source[key])) {\n        if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n          target[key] = {};\n        }\n        if (isArray(source[key]) && !isArray(target[key])) {\n          target[key] = [];\n        }\n        extend(target[key], source[key]);\n      } else if (source[key] !== undefined) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  function merge(obj1, obj2) {\n    var target = {};\n    extend(target, obj1);\n    extend(target, obj2);\n    return target;\n  }\n\n  var DATE_PATTERN = /^(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)$/i;\n\n  function negativeValues(series) {\n    var i, j, data;\n    for (i = 0; i < series.length; i++) {\n      data = series[i].data;\n      for (j = 0; j < data.length; j++) {\n        if (data[j][1] < 0) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  function toStr(n) {\n    return \"\" + n;\n  }\n\n  function toFloat(n) {\n    return parseFloat(n);\n  }\n\n  function toDate(n) {\n    var matches, year, month, day;\n    if (typeof n !== \"object\") {\n      if (typeof n === \"number\") {\n        n = new Date(n * 1000); // ms\n      } else {\n        n = toStr(n);\n        if ((matches = n.match(DATE_PATTERN))) {\n          year = parseInt(matches[1], 10);\n          month = parseInt(matches[3], 10) - 1;\n          day = parseInt(matches[5], 10);\n          return new Date(year, month, day);\n        } else {\n          // try our best to get the str into iso8601\n          // TODO be smarter about this\n          var str = n.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\");\n          // Date.parse returns milliseconds if valid and NaN if invalid\n          n = new Date(Date.parse(str) || n);\n        }\n      }\n    }\n    return n;\n  }\n\n  function toArr(n) {\n    if (!isArray(n)) {\n      var arr = [], i;\n      for (i in n) {\n        if (n.hasOwnProperty(i)) {\n          arr.push([i, n[i]]);\n        }\n      }\n      n = arr;\n    }\n    return n;\n  }\n\n  function jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n    return function (chart, opts, chartOptions) {\n      var series = chart.data;\n      var options = merge({}, defaultOptions);\n      options = merge(options, chartOptions || {});\n\n      if (chart.singleSeriesFormat || \"legend\" in opts) {\n        hideLegend(options, opts.legend, chart.singleSeriesFormat);\n      }\n\n      if (opts.title) {\n        setTitle(options, opts.title);\n      }\n\n      // min\n      if (\"min\" in opts) {\n        setMin(options, opts.min);\n      } else if (!negativeValues(series)) {\n        setMin(options, 0);\n      }\n\n      // max\n      if (opts.max) {\n        setMax(options, opts.max);\n      }\n\n      if (\"stacked\" in opts) {\n        setStacked(options, opts.stacked);\n      }\n\n      if (opts.colors) {\n        options.colors = opts.colors;\n      }\n\n      if (opts.xtitle) {\n        setXtitle(options, opts.xtitle);\n      }\n\n      if (opts.ytitle) {\n        setYtitle(options, opts.ytitle);\n      }\n\n      // merge library last\n      options = merge(options, opts.library || {});\n\n      return options;\n    };\n  }\n\n  function sortByTime(a, b) {\n    return a[0].getTime() - b[0].getTime();\n  }\n\n  function sortByNumberSeries(a, b) {\n    return a[0] - b[0];\n  }\n\n  function sortByNumber(a, b) {\n    return a - b;\n  }\n\n  function isMinute(d) {\n    return d.getMilliseconds() === 0 && d.getSeconds() === 0;\n  }\n\n  function isHour(d) {\n    return isMinute(d) && d.getMinutes() === 0;\n  }\n\n  function isDay(d) {\n    return isHour(d) && d.getHours() === 0;\n  }\n\n  function isWeek(d, dayOfWeek) {\n    return isDay(d) && d.getDay() === dayOfWeek;\n  }\n\n  function isMonth(d) {\n    return isDay(d) && d.getDate() === 1;\n  }\n\n  function isYear(d) {\n    return isMonth(d) && d.getMonth() === 0;\n  }\n\n  function isDate(obj) {\n    return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n  }\n\n  function isNumber(obj) {\n    return typeof obj === \"number\";\n  }\n\n  var byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\n  function formatValue(pre, value, options, axis) {\n    pre = pre || \"\";\n    if (options.prefix) {\n      if (value < 0) {\n        value = value * -1;\n        pre += \"-\";\n      }\n      pre += options.prefix;\n    }\n\n    var suffix = options.suffix || \"\";\n    var precision = options.precision;\n    var round = options.round;\n\n    if (options.byteScale) {\n      var suffixIdx;\n      var baseValue = axis ? options.byteScale : value;\n\n      if (baseValue >= 1152921504606846976) {\n        value /= 1152921504606846976;\n        suffixIdx = 6;\n      } else if (baseValue >= 1125899906842624) {\n        value /= 1125899906842624;\n        suffixIdx = 5;\n      } else if (baseValue >= 1099511627776) {\n        value /= 1099511627776;\n        suffixIdx = 4;\n      } else if (baseValue >= 1073741824) {\n        value /= 1073741824;\n        suffixIdx = 3;\n      } else if (baseValue >= 1048576) {\n        value /= 1048576;\n        suffixIdx = 2;\n      } else if (baseValue >= 1024) {\n        value /= 1024;\n        suffixIdx = 1;\n      } else {\n        suffixIdx = 0;\n      }\n\n      // TODO handle manual precision case\n      if (precision === undefined && round === undefined) {\n        if (value >= 1023.5) {\n          if (suffixIdx < byteSuffixes.length - 1) {\n            value = 1.0;\n            suffixIdx += 1;\n          }\n        }\n        precision = value >= 1000 ? 4 : 3;\n      }\n      suffix = \" \" + byteSuffixes[suffixIdx];\n    }\n\n    if (precision !== undefined && round !== undefined) {\n      throw Error(\"Use either round or precision, not both\");\n    }\n\n    if (!axis) {\n      if (precision !== undefined) {\n        value = value.toPrecision(precision);\n        if (!options.zeros) {\n          value = parseFloat(value);\n        }\n      }\n\n      if (round !== undefined) {\n        if (round < 0) {\n          var num = Math.pow(10, -1 * round);\n          value = parseInt((1.0 * value / num).toFixed(0)) * num;\n        } else {\n          value = value.toFixed(round);\n          if (!options.zeros) {\n            value = parseFloat(value);\n          }\n        }\n      }\n    }\n\n    if (options.thousands || options.decimal) {\n      value = toStr(value);\n      var parts = value.split(\".\");\n      value = parts[0];\n      if (options.thousands) {\n        value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n      }\n      if (parts.length > 1) {\n        value += (options.decimal || \".\") + parts[1];\n      }\n    }\n\n    return pre + value + suffix;\n  }\n\n  function seriesOption(chart, series, option) {\n    if (option in series) {\n      return series[option];\n    } else if (option in chart.options) {\n      return chart.options[option];\n    }\n    return null;\n  }\n\n  function allZeros(data) {\n    var i, j, d;\n    for (i = 0; i < data.length; i++) {\n      d = data[i].data;\n      for (j = 0; j < d.length; j++) {\n        if (d[j][1] != 0) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  var baseOptions = {\n    maintainAspectRatio: false,\n    animation: false,\n    plugins: {\n      legend: {},\n      tooltip: {\n        displayColors: false,\n        callbacks: {}\n      },\n      title: {\n        font: {\n          size: 20\n        },\n        color: \"#333\"\n      }\n    },\n    interaction: {}\n  };\n\n  var defaultOptions$2 = {\n    scales: {\n      y: {\n        ticks: {\n          maxTicksLimit: 4\n        },\n        title: {\n          font: {\n            size: 16\n          },\n          color: \"#333\"\n        },\n        grid: {}\n      },\n      x: {\n        grid: {\n          drawOnChartArea: false\n        },\n        title: {\n          font: {\n            size: 16\n          },\n          color: \"#333\"\n        },\n        time: {},\n        ticks: {}\n      }\n    }\n  };\n\n  // http://there4.io/2012/05/02/google-chart-color-list/\n  var defaultColors = [\n    \"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\",\n    \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\",\n    \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"\n  ];\n\n  var hideLegend$2 = function (options, legend, hideLegend) {\n    if (legend !== undefined) {\n      options.plugins.legend.display = !!legend;\n      if (legend && legend !== true) {\n        options.plugins.legend.position = legend;\n      }\n    } else if (hideLegend) {\n      options.plugins.legend.display = false;\n    }\n  };\n\n  var setTitle$2 = function (options, title) {\n    options.plugins.title.display = true;\n    options.plugins.title.text = title;\n  };\n\n  var setMin$2 = function (options, min) {\n    if (min !== null) {\n      options.scales.y.min = toFloat(min);\n    }\n  };\n\n  var setMax$2 = function (options, max) {\n    options.scales.y.max = toFloat(max);\n  };\n\n  var setBarMin$1 = function (options, min) {\n    if (min !== null) {\n      options.scales.x.min = toFloat(min);\n    }\n  };\n\n  var setBarMax$1 = function (options, max) {\n    options.scales.x.max = toFloat(max);\n  };\n\n  var setStacked$2 = function (options, stacked) {\n    options.scales.x.stacked = !!stacked;\n    options.scales.y.stacked = !!stacked;\n  };\n\n  var setXtitle$2 = function (options, title) {\n    options.scales.x.title.display = true;\n    options.scales.x.title.text = title;\n  };\n\n  var setYtitle$2 = function (options, title) {\n    options.scales.y.title.display = true;\n    options.scales.y.title.text = title;\n  };\n\n  // https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n  var addOpacity = function (hex, opacity) {\n    var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n  };\n\n  // check if not null or undefined\n  // https://stackoverflow.com/a/27757708/1177228\n  var notnull = function (x) {\n    return x != null;\n  };\n\n  var setLabelSize = function (chart, data, options) {\n    var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n    if (maxLabelSize > 25) {\n      maxLabelSize = 25;\n    } else if (maxLabelSize < 10) {\n      maxLabelSize = 10;\n    }\n    if (!options.scales.x.ticks.callback) {\n      options.scales.x.ticks.callback = function (value) {\n        value = toStr(this.getLabelForValue(value));\n        if (value.length > maxLabelSize) {\n          return value.substring(0, maxLabelSize - 2) + \"...\";\n        } else {\n          return value;\n        }\n      };\n    }\n  };\n\n  var setFormatOptions$1 = function (chart, options, chartType) {\n    var formatOptions = {\n      prefix: chart.options.prefix,\n      suffix: chart.options.suffix,\n      thousands: chart.options.thousands,\n      decimal: chart.options.decimal,\n      precision: chart.options.precision,\n      round: chart.options.round,\n      zeros: chart.options.zeros\n    };\n\n    if (chart.options.bytes) {\n      var series = chart.data;\n      if (chartType === \"pie\") {\n        series = [{data: series}];\n      }\n\n      // calculate max\n      var max = 0;\n      for (var i = 0; i < series.length; i++) {\n        var s = series[i];\n        for (var j = 0; j < s.data.length; j++) {\n          if (s.data[j][1] > max) {\n            max = s.data[j][1];\n          }\n        }\n      }\n\n      // calculate scale\n      var scale = 1;\n      while (max >= 1024) {\n        scale *= 1024;\n        max /= 1024;\n      }\n\n      // set step size\n      formatOptions.byteScale = scale;\n    }\n\n    if (chartType !== \"pie\") {\n      var axis = options.scales.y;\n      if (chartType === \"bar\") {\n        axis = options.scales.x;\n      }\n\n      if (formatOptions.byteScale) {\n        if (!axis.ticks.stepSize) {\n          axis.ticks.stepSize = formatOptions.byteScale / 2;\n        }\n        if (!axis.ticks.maxTicksLimit) {\n          axis.ticks.maxTicksLimit = 4;\n        }\n      }\n\n      if (!axis.ticks.callback) {\n        axis.ticks.callback = function (value) {\n          return formatValue(\"\", value, formatOptions, true);\n        };\n      }\n    }\n\n    if (!options.plugins.tooltip.callbacks.label) {\n      if (chartType === \"scatter\") {\n        options.plugins.tooltip.callbacks.label = function (context) {\n          var label = context.dataset.label || '';\n          if (label) {\n            label += ': ';\n          }\n          return label + '(' + context.label + ', ' + context.formattedValue + ')';\n        };\n      } else if (chartType === \"bubble\") {\n        options.plugins.tooltip.callbacks.label = function (context) {\n          var label = context.dataset.label || '';\n          if (label) {\n            label += ': ';\n          }\n          var dataPoint = context.raw;\n          return label + '(' + dataPoint.x + ', ' + dataPoint.y + ', ' + dataPoint.v + ')';\n        };\n      } else if (chartType === \"pie\") {\n        // need to use separate label for pie charts\n        options.plugins.tooltip.callbacks.label = function (context) {\n          var dataLabel = context.label;\n          var value = ': ';\n\n          if (isArray(dataLabel)) {\n            // show value on first line of multiline label\n            // need to clone because we are changing the value\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n\n          return formatValue(dataLabel, context.parsed, formatOptions);\n        };\n      } else {\n        var valueLabel = chartType === \"bar\" ? \"x\" : \"y\";\n        options.plugins.tooltip.callbacks.label = function (context) {\n          // don't show null values for stacked charts\n          if (context.parsed[valueLabel] === null) {\n            return;\n          }\n\n          var label = context.dataset.label || '';\n          if (label) {\n            label += ': ';\n          }\n          return formatValue(label, context.parsed[valueLabel], formatOptions);\n        };\n      }\n    }\n  };\n\n  var jsOptions$2 = jsOptionsFunc(merge(baseOptions, defaultOptions$2), hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\n  var createDataTable = function (chart, options, chartType) {\n    var datasets = [];\n    var labels = [];\n\n    var colors = chart.options.colors || defaultColors;\n\n    var day = true;\n    var week = true;\n    var dayOfWeek;\n    var month = true;\n    var year = true;\n    var hour = true;\n    var minute = true;\n\n    var series = chart.data;\n\n    var max = 0;\n    if (chartType === \"bubble\") {\n      for (var i$1 = 0; i$1 < series.length; i$1++) {\n        var s$1 = series[i$1];\n        for (var j$1 = 0; j$1 < s$1.data.length; j$1++) {\n          if (s$1.data[j$1][2] > max) {\n            max = s$1.data[j$1][2];\n          }\n        }\n      }\n    }\n\n    var i, j, s, d, key, rows = [], rows2 = [];\n\n    if (chartType === \"bar\" || chartType === \"column\" || (chart.xtype !== \"number\" && chart.xtype !== \"bubble\")) {\n      var sortedLabels = [];\n\n      for (i = 0; i < series.length; i++) {\n        s = series[i];\n\n        for (j = 0; j < s.data.length; j++) {\n          d = s.data[j];\n          key = chart.xtype == \"datetime\" ? d[0].getTime() : d[0];\n          if (!rows[key]) {\n            rows[key] = new Array(series.length);\n          }\n          rows[key][i] = toFloat(d[1]);\n          if (sortedLabels.indexOf(key) === -1) {\n            sortedLabels.push(key);\n          }\n        }\n      }\n\n      if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n        sortedLabels.sort(sortByNumber);\n      }\n\n      for (j = 0; j < series.length; j++) {\n        rows2.push([]);\n      }\n\n      var value;\n      var k;\n      for (k = 0; k < sortedLabels.length; k++) {\n        i = sortedLabels[k];\n        if (chart.xtype === \"datetime\") {\n          value = new Date(toFloat(i));\n          // TODO make this efficient\n          day = day && isDay(value);\n          if (!dayOfWeek) {\n            dayOfWeek = value.getDay();\n          }\n          week = week && isWeek(value, dayOfWeek);\n          month = month && isMonth(value);\n          year = year && isYear(value);\n          hour = hour && isHour(value);\n          minute = minute && isMinute(value);\n        } else {\n          value = i;\n        }\n        labels.push(value);\n        for (j = 0; j < series.length; j++) {\n          // Chart.js doesn't like undefined\n          rows2[j].push(rows[i][j] === undefined ? null : rows[i][j]);\n        }\n      }\n    } else {\n      for (var i$2 = 0; i$2 < series.length; i$2++) {\n        var s$2 = series[i$2];\n        var d$1 = [];\n        for (var j$2 = 0; j$2 < s$2.data.length; j$2++) {\n          var point = {\n            x: toFloat(s$2.data[j$2][0]),\n            y: toFloat(s$2.data[j$2][1])\n          };\n          if (chartType === \"bubble\") {\n            point.r = toFloat(s$2.data[j$2][2]) * 20 / max;\n            // custom attribute, for tooltip\n            point.v = s$2.data[j$2][2];\n          }\n          d$1.push(point);\n        }\n        rows2.push(d$1);\n      }\n    }\n\n    var color;\n    var backgroundColor;\n\n    for (i = 0; i < series.length; i++) {\n      s = series[i];\n\n      // use colors for each bar for single series format\n      if (chart.options.colors && chart.singleSeriesFormat && (chartType === \"bar\" || chartType === \"column\") && !s.color && isArray(chart.options.colors) && !isArray(chart.options.colors[0])) {\n        color = colors;\n        backgroundColor = [];\n        for (var j$3 = 0; j$3 < colors.length; j$3++) {\n          backgroundColor[j$3] = addOpacity(color[j$3], 0.5);\n        }\n      } else {\n        color = s.color || colors[i];\n        backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n      }\n\n      var dataset = {\n        label: s.name || \"\",\n        data: rows2[i],\n        fill: chartType === \"area\",\n        borderColor: color,\n        backgroundColor: backgroundColor,\n        borderWidth: 2\n      };\n\n      var pointChart = chartType === \"line\" || chartType === \"area\" || chartType === \"scatter\" || chartType === \"bubble\";\n      if (pointChart) {\n        dataset.pointBackgroundColor = color;\n        dataset.pointHoverBackgroundColor = color;\n        dataset.pointHitRadius = 50;\n      }\n\n      if (chartType === \"bubble\") {\n        dataset.pointBackgroundColor = backgroundColor;\n        dataset.pointHoverBackgroundColor = backgroundColor;\n        dataset.pointHoverBorderWidth = 2;\n      }\n\n      if (s.stack) {\n        dataset.stack = s.stack;\n      }\n\n      var curve = seriesOption(chart, s, \"curve\");\n      if (curve === false) {\n        dataset.tension = 0;\n      } else if (pointChart) {\n        dataset.tension = 0.4;\n      }\n\n      var points = seriesOption(chart, s, \"points\");\n      if (points === false) {\n        dataset.pointRadius = 0;\n        dataset.pointHoverRadius = 0;\n      }\n\n      dataset = merge(dataset, chart.options.dataset || {});\n      dataset = merge(dataset, s.library || {});\n      dataset = merge(dataset, s.dataset || {});\n\n      datasets.push(dataset);\n    }\n\n    var xmin = chart.options.xmin;\n    var xmax = chart.options.xmax;\n\n    if (chart.xtype === \"datetime\") {\n      if (notnull(xmin)) {\n        options.scales.x.min = toDate(xmin).getTime();\n      }\n      if (notnull(xmax)) {\n        options.scales.x.max = toDate(xmax).getTime();\n      }\n    } else if (chart.xtype === \"number\") {\n      if (notnull(xmin)) {\n        options.scales.x.min = xmin;\n      }\n      if (notnull(xmax)) {\n        options.scales.x.max = xmax;\n      }\n    }\n\n    // for empty datetime chart\n    if (chart.xtype === \"datetime\" && labels.length === 0) {\n      if (notnull(xmin)) {\n        labels.push(toDate(xmin));\n      }\n      if (notnull(xmax)) {\n        labels.push(toDate(xmax));\n      }\n      day = false;\n      week = false;\n      month = false;\n      year = false;\n      hour = false;\n      minute = false;\n    }\n\n    if (chart.xtype === \"datetime\" && labels.length > 0) {\n      var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n      var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n      for (i = 1; i < labels.length; i++) {\n        var value$1 = labels[i].getTime();\n        if (value$1 < minTime) {\n          minTime = value$1;\n        }\n        if (value$1 > maxTime) {\n          maxTime = value$1;\n        }\n      }\n\n      var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n      if (!options.scales.x.time.unit) {\n        var step;\n        if (year || timeDiff > 365 * 10) {\n          options.scales.x.time.unit = \"year\";\n          step = 365;\n        } else if (month || timeDiff > 30 * 10) {\n          options.scales.x.time.unit = \"month\";\n          step = 30;\n        } else if (day || timeDiff > 10) {\n          options.scales.x.time.unit = \"day\";\n          step = 1;\n        } else if (hour || timeDiff > 0.5) {\n          options.scales.x.time.displayFormats = {hour: \"MMM d, h a\"};\n          options.scales.x.time.unit = \"hour\";\n          step = 1 / 24.0;\n        } else if (minute) {\n          options.scales.x.time.displayFormats = {minute: \"h:mm a\"};\n          options.scales.x.time.unit = \"minute\";\n          step = 1 / 24.0 / 60.0;\n        }\n\n        if (step && timeDiff > 0) {\n          // width not available for hidden elements\n          var width = chart.element.offsetWidth;\n          if (width > 0) {\n            var unitStepSize = Math.ceil(timeDiff / step / (width / 100.0));\n            if (week && step === 1) {\n              unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n            }\n            options.scales.x.time.stepSize = unitStepSize;\n          }\n        }\n      }\n\n      if (!options.scales.x.time.tooltipFormat) {\n        if (day) {\n          options.scales.x.time.tooltipFormat = \"PP\";\n        } else if (hour) {\n          options.scales.x.time.tooltipFormat = \"MMM d, h a\";\n        } else if (minute) {\n          options.scales.x.time.tooltipFormat = \"h:mm a\";\n        }\n      }\n    }\n\n    var data = {\n      labels: labels,\n      datasets: datasets\n    };\n\n    return data;\n  };\n\n  var defaultExport$2 = function defaultExport(library) {\n    this.name = \"chartjs\";\n    this.library = library;\n  };\n\n  defaultExport$2.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n    var chartOptions = {};\n    // fix for https://github.com/chartjs/Chart.js/issues/2441\n    if (!chart.options.max && allZeros(chart.data)) {\n      chartOptions.max = 1;\n    }\n\n    var options = jsOptions$2(chart, merge(chartOptions, chart.options));\n    setFormatOptions$1(chart, options, chartType);\n\n    var data = createDataTable(chart, options, chartType || \"line\");\n\n    if (chart.xtype === \"number\") {\n      options.scales.x.type = options.scales.x.type || \"linear\";\n      options.scales.x.position = options.scales.x.position ||\"bottom\";\n    } else {\n      options.scales.x.type = chart.xtype === \"string\" ? \"category\" : \"time\";\n    }\n\n    this.drawChart(chart, \"line\", data, options);\n  };\n\n  defaultExport$2.prototype.renderPieChart = function renderPieChart (chart) {\n    var options = merge({}, baseOptions);\n    if (chart.options.donut) {\n      options.cutout = \"50%\";\n    }\n\n    if (\"legend\" in chart.options) {\n      hideLegend$2(options, chart.options.legend);\n    }\n\n    if (chart.options.title) {\n      setTitle$2(options, chart.options.title);\n    }\n\n    options = merge(options, chart.options.library || {});\n    setFormatOptions$1(chart, options, \"pie\");\n\n    var labels = [];\n    var values = [];\n    for (var i = 0; i < chart.data.length; i++) {\n      var point = chart.data[i];\n      labels.push(point[0]);\n      values.push(point[1]);\n    }\n\n    var dataset = {\n      data: values,\n      backgroundColor: chart.options.colors || defaultColors\n    };\n    dataset = merge(dataset, chart.options.dataset || {});\n\n    var data = {\n      labels: labels,\n      datasets: [dataset]\n    };\n\n    this.drawChart(chart, \"pie\", data, options);\n  };\n\n  defaultExport$2.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n    var options;\n    if (chartType === \"bar\") {\n      var barOptions = merge(baseOptions, defaultOptions$2);\n      barOptions.indexAxis = \"y\";\n\n      // ensure gridlines have proper orientation\n      barOptions.scales.x.grid.drawOnChartArea = true;\n      barOptions.scales.y.grid.drawOnChartArea = false;\n      delete barOptions.scales.y.ticks.maxTicksLimit;\n\n      options = jsOptionsFunc(barOptions, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options);\n    } else {\n      options = jsOptions$2(chart, chart.options);\n    }\n    setFormatOptions$1(chart, options, chartType);\n    var data = createDataTable(chart, options, \"column\");\n    if (chartType !== \"bar\") {\n      setLabelSize(chart, data, options);\n    }\n    this.drawChart(chart, \"bar\", data, options);\n  };\n\n  defaultExport$2.prototype.renderAreaChart = function renderAreaChart (chart) {\n    this.renderLineChart(chart, \"area\");\n  };\n\n  defaultExport$2.prototype.renderBarChart = function renderBarChart (chart) {\n    this.renderColumnChart(chart, \"bar\");\n  };\n\n  defaultExport$2.prototype.renderScatterChart = function renderScatterChart (chart, chartType) {\n    chartType = chartType || \"scatter\";\n\n    var options = jsOptions$2(chart, chart.options);\n    setFormatOptions$1(chart, options, chartType);\n\n    if (!(\"showLine\" in options)) {\n      options.showLine = false;\n    }\n\n    var data = createDataTable(chart, options, chartType);\n\n    options.scales.x.type = options.scales.x.type || \"linear\";\n    options.scales.x.position = options.scales.x.position || \"bottom\";\n\n    // prevent grouping hover and tooltips\n    if (!(\"mode\" in options.interaction)) {\n      options.interaction.mode = \"nearest\";\n    }\n\n    this.drawChart(chart, chartType, data, options);\n  };\n\n  defaultExport$2.prototype.renderBubbleChart = function renderBubbleChart (chart) {\n    this.renderScatterChart(chart, \"bubble\");\n  };\n\n  defaultExport$2.prototype.destroy = function destroy (chart) {\n    if (chart.chart) {\n      chart.chart.destroy();\n    }\n  };\n\n  defaultExport$2.prototype.drawChart = function drawChart (chart, type, data, options) {\n    this.destroy(chart);\n    if (chart.destroyed) { return; }\n\n    var chartOptions = {\n      type: type,\n      data: data,\n      options: options\n    };\n\n    if (chart.options.code) {\n      window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n    }\n\n    chart.element.innerHTML = \"<canvas></canvas>\";\n    var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n    chart.chart = new this.library(ctx, chartOptions);\n  };\n\n  var defaultOptions$1 = {\n    chart: {},\n    xAxis: {\n      title: {\n        text: null\n      },\n      labels: {\n        style: {\n          fontSize: \"12px\"\n        }\n      }\n    },\n    yAxis: {\n      title: {\n        text: null\n      },\n      labels: {\n        style: {\n          fontSize: \"12px\"\n        }\n      }\n    },\n    title: {\n      text: null\n    },\n    credits: {\n      enabled: false\n    },\n    legend: {\n      borderWidth: 0\n    },\n    tooltip: {\n      style: {\n        fontSize: \"12px\"\n      }\n    },\n    plotOptions: {\n      areaspline: {},\n      area: {},\n      series: {\n        marker: {}\n      }\n    },\n    time: {\n      useUTC: false\n    }\n  };\n\n  var hideLegend$1 = function (options, legend, hideLegend) {\n    if (legend !== undefined) {\n      options.legend.enabled = !!legend;\n      if (legend && legend !== true) {\n        if (legend === \"top\" || legend === \"bottom\") {\n          options.legend.verticalAlign = legend;\n        } else {\n          options.legend.layout = \"vertical\";\n          options.legend.verticalAlign = \"middle\";\n          options.legend.align = legend;\n        }\n      }\n    } else if (hideLegend) {\n      options.legend.enabled = false;\n    }\n  };\n\n  var setTitle$1 = function (options, title) {\n    options.title.text = title;\n  };\n\n  var setMin$1 = function (options, min) {\n    options.yAxis.min = min;\n  };\n\n  var setMax$1 = function (options, max) {\n    options.yAxis.max = max;\n  };\n\n  var setStacked$1 = function (options, stacked) {\n    var stackedValue = stacked ? (stacked === true ? \"normal\" : stacked) : null;\n    options.plotOptions.series.stacking = stackedValue;\n    options.plotOptions.area.stacking = stackedValue;\n    options.plotOptions.areaspline.stacking = stackedValue;\n  };\n\n  var setXtitle$1 = function (options, title) {\n    options.xAxis.title.text = title;\n  };\n\n  var setYtitle$1 = function (options, title) {\n    options.yAxis.title.text = title;\n  };\n\n  var jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\n  var setFormatOptions = function(chart, options, chartType) {\n    var formatOptions = {\n      prefix: chart.options.prefix,\n      suffix: chart.options.suffix,\n      thousands: chart.options.thousands,\n      decimal: chart.options.decimal,\n      precision: chart.options.precision,\n      round: chart.options.round,\n      zeros: chart.options.zeros\n    };\n\n    // skip when axis is an array (like with min/max)\n    if (chartType !== \"pie\" && !isArray(options.yAxis) && !options.yAxis.labels.formatter) {\n      options.yAxis.labels.formatter = function () {\n        return formatValue(\"\", this.value, formatOptions);\n      };\n    }\n\n    if (!options.tooltip.pointFormatter && !options.tooltip.pointFormat) {\n      options.tooltip.pointFormatter = function () {\n        return '<span style=\"color:' + this.color + '\">\\u25CF</span> ' + formatValue(this.series.name + ': <b>', this.y, formatOptions) + '</b><br/>';\n      };\n    }\n  };\n\n  var defaultExport$1 = function defaultExport(library) {\n    this.name = \"highcharts\";\n    this.library = library;\n  };\n\n  defaultExport$1.prototype.renderLineChart = function renderLineChart (chart, chartType) {\n    chartType = chartType || \"spline\";\n    var chartOptions = {};\n    if (chartType === \"areaspline\") {\n      chartOptions = {\n        plotOptions: {\n          areaspline: {\n            stacking: \"normal\"\n          },\n          area: {\n            stacking: \"normal\"\n          },\n          series: {\n            marker: {\n              enabled: false\n            }\n          }\n        }\n      };\n    }\n\n    if (chart.options.curve === false) {\n      if (chartType === \"areaspline\") {\n        chartType = \"area\";\n      } else if (chartType === \"spline\") {\n        chartType = \"line\";\n      }\n    }\n\n    var options = jsOptions$1(chart, chart.options, chartOptions), data, i, j;\n    if (chart.xtype === \"number\") {\n      options.xAxis.type = options.xAxis.type || \"linear\";\n    } else {\n      options.xAxis.type = chart.xtype === \"string\" ? \"category\" : \"datetime\";\n    }\n    if (!options.chart.type) {\n      options.chart.type = chartType;\n    }\n    setFormatOptions(chart, options, chartType);\n\n    var series = chart.data;\n    for (i = 0; i < series.length; i++) {\n      series[i].name = series[i].name || \"Value\";\n      data = series[i].data;\n      if (chart.xtype === \"datetime\") {\n        for (j = 0; j < data.length; j++) {\n          data[j][0] = data[j][0].getTime();\n        }\n      }\n      series[i].marker = {symbol: \"circle\"};\n      if (chart.options.points === false) {\n        series[i].marker.enabled = false;\n      }\n    }\n\n    this.drawChart(chart, series, options);\n  };\n\n  defaultExport$1.prototype.renderScatterChart = function renderScatterChart (chart) {\n    var options = jsOptions$1(chart, chart.options, {});\n    options.chart.type = \"scatter\";\n    this.drawChart(chart, chart.data, options);\n  };\n\n  defaultExport$1.prototype.renderPieChart = function renderPieChart (chart) {\n    var chartOptions = merge(defaultOptions$1, {});\n\n    if (chart.options.colors) {\n      chartOptions.colors = chart.options.colors;\n    }\n    if (chart.options.donut) {\n      chartOptions.plotOptions = {pie: {innerSize: \"50%\"}};\n    }\n\n    if (\"legend\" in chart.options) {\n      hideLegend$1(chartOptions, chart.options.legend);\n    }\n\n    if (chart.options.title) {\n      setTitle$1(chartOptions, chart.options.title);\n    }\n\n    var options = merge(chartOptions, chart.options.library || {});\n    setFormatOptions(chart, options, \"pie\");\n    var series = [{\n      type: \"pie\",\n      name: chart.options.label || \"Value\",\n      data: chart.data\n    }];\n\n    this.drawChart(chart, series, options);\n  };\n\n  defaultExport$1.prototype.renderColumnChart = function renderColumnChart (chart, chartType) {\n    chartType = chartType || \"column\";\n    var series = chart.data;\n    var options = jsOptions$1(chart, chart.options), i, j, s, d, rows = [], categories = [];\n    options.chart.type = chartType;\n    setFormatOptions(chart, options, chartType);\n\n    for (i = 0; i < series.length; i++) {\n      s = series[i];\n\n      for (j = 0; j < s.data.length; j++) {\n        d = s.data[j];\n        if (!rows[d[0]]) {\n          rows[d[0]] = new Array(series.length);\n          categories.push(d[0]);\n        }\n        rows[d[0]][i] = d[1];\n      }\n    }\n\n    if (chart.xtype === \"number\") {\n      categories.sort(sortByNumber);\n    }\n\n    options.xAxis.categories = categories;\n\n    var newSeries = [], d2;\n    for (i = 0; i < series.length; i++) {\n      d = [];\n      for (j = 0; j < categories.length; j++) {\n        d.push(rows[categories[j]][i] || 0);\n      }\n\n      d2 = {\n        name: series[i].name || \"Value\",\n        data: d\n      };\n      if (series[i].stack) {\n        d2.stack = series[i].stack;\n      }\n\n      newSeries.push(d2);\n    }\n\n    this.drawChart(chart, newSeries, options);\n  };\n\n  defaultExport$1.prototype.renderBarChart = function renderBarChart (chart) {\n    this.renderColumnChart(chart, \"bar\");\n  };\n\n  defaultExport$1.prototype.renderAreaChart = function renderAreaChart (chart) {\n    this.renderLineChart(chart, \"areaspline\");\n  };\n\n  defaultExport$1.prototype.destroy = function destroy (chart) {\n    if (chart.chart) {\n      chart.chart.destroy();\n    }\n  };\n\n  defaultExport$1.prototype.drawChart = function drawChart (chart, data, options) {\n    this.destroy(chart);\n    if (chart.destroyed) { return; }\n\n    options.chart.renderTo = chart.element.id;\n    options.series = data;\n\n    if (chart.options.code) {\n      window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n    }\n\n    chart.chart = new this.library.Chart(options);\n  };\n\n  var loaded = {};\n  var callbacks = [];\n\n  // Set chart options\n  var defaultOptions = {\n    chartArea: {},\n    fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n    pointSize: 6,\n    legend: {\n      textStyle: {\n        fontSize: 12,\n        color: \"#444\"\n      },\n      alignment: \"center\",\n      position: \"right\"\n    },\n    curveType: \"function\",\n    hAxis: {\n      textStyle: {\n        color: \"#666\",\n        fontSize: 12\n      },\n      titleTextStyle: {},\n      gridlines: {\n        color: \"transparent\"\n      },\n      baselineColor: \"#ccc\",\n      viewWindow: {}\n    },\n    vAxis: {\n      textStyle: {\n        color: \"#666\",\n        fontSize: 12\n      },\n      titleTextStyle: {},\n      baselineColor: \"#ccc\",\n      viewWindow: {}\n    },\n    tooltip: {\n      textStyle: {\n        color: \"#666\",\n        fontSize: 12\n      }\n    }\n  };\n\n  var hideLegend = function (options, legend, hideLegend) {\n    if (legend !== undefined) {\n      var position;\n      if (!legend) {\n        position = \"none\";\n      } else if (legend === true) {\n        position = \"right\";\n      } else {\n        position = legend;\n      }\n      options.legend.position = position;\n    } else if (hideLegend) {\n      options.legend.position = \"none\";\n    }\n  };\n\n  var setTitle = function (options, title) {\n    options.title = title;\n    options.titleTextStyle = {color: \"#333\", fontSize: \"20px\"};\n  };\n\n  var setMin = function (options, min) {\n    options.vAxis.viewWindow.min = min;\n  };\n\n  var setMax = function (options, max) {\n    options.vAxis.viewWindow.max = max;\n  };\n\n  var setBarMin = function (options, min) {\n    options.hAxis.viewWindow.min = min;\n  };\n\n  var setBarMax = function (options, max) {\n    options.hAxis.viewWindow.max = max;\n  };\n\n  var setStacked = function (options, stacked) {\n    options.isStacked = stacked ? stacked : false;\n  };\n\n  var setXtitle = function (options, title) {\n    options.hAxis.title = title;\n    options.hAxis.titleTextStyle.italic = false;\n  };\n\n  var setYtitle = function (options, title) {\n    options.vAxis.title = title;\n    options.vAxis.titleTextStyle.italic = false;\n  };\n\n  var jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\n  var resize = function (callback) {\n    if (window.attachEvent) {\n      window.attachEvent(\"onresize\", callback);\n    } else if (window.addEventListener) {\n      window.addEventListener(\"resize\", callback, true);\n    }\n    callback();\n  };\n\n  var defaultExport = function defaultExport(library) {\n    this.name = \"google\";\n    this.library = library;\n  };\n\n  defaultExport.prototype.renderLineChart = function renderLineChart (chart) {\n      var this$1$1 = this;\n\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {};\n\n      if (chart.options.curve === false) {\n        chartOptions.curveType = \"none\";\n      }\n\n      if (chart.options.points === false) {\n        chartOptions.pointSize = 0;\n      }\n\n      var options = jsOptions(chart, chart.options, chartOptions);\n      var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n      this$1$1.drawChart(chart, \"LineChart\", data, options);\n    });\n  };\n\n  defaultExport.prototype.renderPieChart = function renderPieChart (chart) {\n      var this$1$1 = this;\n\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {\n        chartArea: {\n          top: \"10%\",\n          height: \"80%\"\n        },\n        legend: {}\n      };\n      if (chart.options.colors) {\n        chartOptions.colors = chart.options.colors;\n      }\n      if (chart.options.donut) {\n        chartOptions.pieHole = 0.5;\n      }\n      if (\"legend\" in chart.options) {\n        hideLegend(chartOptions, chart.options.legend);\n      }\n      if (chart.options.title) {\n        setTitle(chartOptions, chart.options.title);\n      }\n      var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n      var data = new this$1$1.library.visualization.DataTable();\n      data.addColumn(\"string\", \"\");\n      data.addColumn(\"number\", \"Value\");\n      data.addRows(chart.data);\n\n      this$1$1.drawChart(chart, \"PieChart\", data, options);\n    });\n  };\n\n  defaultExport.prototype.renderColumnChart = function renderColumnChart (chart) {\n      var this$1$1 = this;\n\n    this.waitForLoaded(chart, function () {\n      var options = jsOptions(chart, chart.options);\n      var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n      this$1$1.drawChart(chart, \"ColumnChart\", data, options);\n    });\n  };\n\n  defaultExport.prototype.renderBarChart = function renderBarChart (chart) {\n      var this$1$1 = this;\n\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {\n        hAxis: {\n          gridlines: {\n            color: \"#ccc\"\n          }\n        }\n      };\n      var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);\n      var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n      this$1$1.drawChart(chart, \"BarChart\", data, options);\n    });\n  };\n\n  defaultExport.prototype.renderAreaChart = function renderAreaChart (chart) {\n      var this$1$1 = this;\n\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {\n        isStacked: true,\n        pointSize: 0,\n        areaOpacity: 0.5\n      };\n\n      var options = jsOptions(chart, chart.options, chartOptions);\n      var data = this$1$1.createDataTable(chart.data, chart.xtype);\n\n      this$1$1.drawChart(chart, \"AreaChart\", data, options);\n    });\n  };\n\n  defaultExport.prototype.renderGeoChart = function renderGeoChart (chart) {\n      var this$1$1 = this;\n\n    this.waitForLoaded(chart, \"geochart\", function () {\n      var chartOptions = {\n        legend: \"none\",\n        colorAxis: {\n          colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n        }\n      };\n      var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n      var data = new this$1$1.library.visualization.DataTable();\n      data.addColumn(\"string\", \"\");\n      data.addColumn(\"number\", chart.options.label || \"Value\");\n      data.addRows(chart.data);\n\n      this$1$1.drawChart(chart, \"GeoChart\", data, options);\n    });\n  };\n\n  defaultExport.prototype.renderScatterChart = function renderScatterChart (chart) {\n      var this$1$1 = this;\n\n    this.waitForLoaded(chart, function () {\n      var chartOptions = {};\n      var options = jsOptions(chart, chart.options, chartOptions);\n\n      var series = chart.data, rows2 = [], i, j, data, d;\n      for (i = 0; i < series.length; i++) {\n        series[i].name = series[i].name || \"Value\";\n        d = series[i].data;\n        for (j = 0; j < d.length; j++) {\n          var row = new Array(series.length + 1);\n          row[0] = d[j][0];\n          row[i + 1] = d[j][1];\n          rows2.push(row);\n        }\n      }\n\n      data = new this$1$1.library.visualization.DataTable();\n      data.addColumn(\"number\", \"\");\n      for (i = 0; i < series.length; i++) {\n        data.addColumn(\"number\", series[i].name);\n      }\n      data.addRows(rows2);\n\n      this$1$1.drawChart(chart, \"ScatterChart\", data, options);\n    });\n  };\n\n  defaultExport.prototype.renderTimeline = function renderTimeline (chart) {\n      var this$1$1 = this;\n\n    this.waitForLoaded(chart, \"timeline\", function () {\n      var chartOptions = {\n        legend: \"none\"\n      };\n\n      if (chart.options.colors) {\n        chartOptions.colors = chart.options.colors;\n      }\n      var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n\n      var data = new this$1$1.library.visualization.DataTable();\n      data.addColumn({type: \"string\", id: \"Name\"});\n      data.addColumn({type: \"date\", id: \"Start\"});\n      data.addColumn({type: \"date\", id: \"End\"});\n      data.addRows(chart.data);\n\n      chart.element.style.lineHeight = \"normal\";\n\n      this$1$1.drawChart(chart, \"Timeline\", data, options);\n    });\n  };\n\n  // TODO remove resize events\n  defaultExport.prototype.destroy = function destroy (chart) {\n    if (chart.chart) {\n      chart.chart.clearChart();\n    }\n  };\n\n  defaultExport.prototype.drawChart = function drawChart (chart, type, data, options) {\n    this.destroy(chart);\n    if (chart.destroyed) { return; }\n\n    if (chart.options.code) {\n      window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n    }\n\n    chart.chart = new this.library.visualization[type](chart.element);\n    resize(function () {\n      chart.chart.draw(data, options);\n    });\n  };\n\n  defaultExport.prototype.waitForLoaded = function waitForLoaded (chart, pack, callback) {\n      var this$1$1 = this;\n\n    if (!callback) {\n      callback = pack;\n      pack = \"corechart\";\n    }\n\n    callbacks.push({pack: pack, callback: callback});\n\n    if (loaded[pack]) {\n      this.runCallbacks();\n    } else {\n      loaded[pack] = true;\n\n      // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n      var loadOptions = {\n        packages: [pack],\n        callback: function () { this$1$1.runCallbacks(); }\n      };\n      var config = chart.__config();\n      if (config.language) {\n        loadOptions.language = config.language;\n      }\n      if (pack === \"geochart\" && config.mapsApiKey) {\n        loadOptions.mapsApiKey = config.mapsApiKey;\n      }\n\n      this.library.charts.load(\"current\", loadOptions);\n    }\n  };\n\n  defaultExport.prototype.runCallbacks = function runCallbacks () {\n    var cb, call;\n    for (var i = 0; i < callbacks.length; i++) {\n      cb = callbacks[i];\n      call = this.library.visualization && ((cb.pack === \"corechart\" && this.library.visualization.LineChart) || (cb.pack === \"timeline\" && this.library.visualization.Timeline) || (cb.pack === \"geochart\" && this.library.visualization.GeoChart));\n      if (call) {\n        cb.callback();\n        callbacks.splice(i, 1);\n        i--;\n      }\n    }\n  };\n\n  // cant use object as key\n  defaultExport.prototype.createDataTable = function createDataTable (series, columnType) {\n    var i, j, s, d, key, rows = [], sortedLabels = [];\n    for (i = 0; i < series.length; i++) {\n      s = series[i];\n      series[i].name = series[i].name || \"Value\";\n\n      for (j = 0; j < s.data.length; j++) {\n        d = s.data[j];\n        key = (columnType === \"datetime\") ? d[0].getTime() : d[0];\n        if (!rows[key]) {\n          rows[key] = new Array(series.length);\n          sortedLabels.push(key);\n        }\n        rows[key][i] = toFloat(d[1]);\n      }\n    }\n\n    var rows2 = [];\n    var day = true;\n    var value;\n    for (j = 0; j < sortedLabels.length; j++) {\n      i = sortedLabels[j];\n      if (columnType === \"datetime\") {\n        value = new Date(toFloat(i));\n        day = day && isDay(value);\n      } else if (columnType === \"number\") {\n        value = toFloat(i);\n      } else {\n        value = i;\n      }\n      rows2.push([value].concat(rows[i]));\n    }\n    if (columnType === \"datetime\") {\n      rows2.sort(sortByTime);\n    } else if (columnType === \"number\") {\n      rows2.sort(sortByNumberSeries);\n\n      for (i = 0; i < rows2.length; i++) {\n        rows2[i][0] = toStr(rows2[i][0]);\n      }\n\n      columnType = \"string\";\n    }\n\n    // create datatable\n    var data = new this.library.visualization.DataTable();\n    columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n    data.addColumn(columnType, \"\");\n    for (i = 0; i < series.length; i++) {\n      data.addColumn(\"number\", series[i].name);\n    }\n    data.addRows(rows2);\n\n    return data;\n  };\n\n  function formatSeriesData(data, keyType) {\n    var r = [], j, keyFunc;\n\n    if (keyType === \"number\") {\n      keyFunc = toFloat;\n    } else if (keyType === \"datetime\") {\n      keyFunc = toDate;\n    } else {\n      keyFunc = toStr;\n    }\n\n    if (keyType === \"bubble\") {\n      for (j = 0; j < data.length; j++) {\n        r.push([toFloat(data[j][0]), toFloat(data[j][1]), toFloat(data[j][2])]);\n      }\n    } else {\n      for (j = 0; j < data.length; j++) {\n        r.push([keyFunc(data[j][0]), toFloat(data[j][1])]);\n      }\n    }\n\n    if (keyType === \"datetime\") {\n      r.sort(sortByTime);\n    } else if (keyType === \"number\") {\n      r.sort(sortByNumberSeries);\n    }\n\n    return r;\n  }\n\n  function detectXType(series, noDatetime, options) {\n    if (dataEmpty(series)) {\n      if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n        return \"datetime\";\n      } else {\n        return \"number\";\n      }\n    } else if (detectXTypeWithFunction(series, isNumber)) {\n      return \"number\";\n    } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n      return \"datetime\";\n    } else {\n      return \"string\";\n    }\n  }\n\n  function detectXTypeWithFunction(series, func) {\n    var i, j, data;\n    for (i = 0; i < series.length; i++) {\n      data = toArr(series[i].data);\n      for (j = 0; j < data.length; j++) {\n        if (!func(data[j][0])) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  // creates a shallow copy of each element of the array\n  // elements are expected to be objects\n  function copySeries(series) {\n    var newSeries = [], i, j;\n    for (i = 0; i < series.length; i++) {\n      var copy = {};\n      for (j in series[i]) {\n        if (series[i].hasOwnProperty(j)) {\n          copy[j] = series[i][j];\n        }\n      }\n      newSeries.push(copy);\n    }\n    return newSeries;\n  }\n\n  function processSeries(chart, keyType, noDatetime) {\n    var i;\n\n    var opts = chart.options;\n    var series = chart.rawData;\n\n    // see if one series or multiple\n    chart.singleSeriesFormat = (!isArray(series) || typeof series[0] !== \"object\" || isArray(series[0]));\n    if (chart.singleSeriesFormat) {\n      series = [{name: opts.label, data: series}];\n    }\n\n    // convert to array\n    // must come before dataEmpty check\n    series = copySeries(series);\n    for (i = 0; i < series.length; i++) {\n      series[i].data = toArr(series[i].data);\n    }\n\n    chart.xtype = keyType ? keyType : (opts.discrete ? \"string\" : detectXType(series, noDatetime, opts));\n\n    // right format\n    for (i = 0; i < series.length; i++) {\n      series[i].data = formatSeriesData(series[i].data, chart.xtype);\n    }\n\n    return series;\n  }\n\n  function processSimple(chart) {\n    var perfectData = toArr(chart.rawData), i;\n    for (i = 0; i < perfectData.length; i++) {\n      perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n    }\n    return perfectData;\n  }\n\n  function dataEmpty(data, chartType) {\n    if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n      return data.length === 0;\n    } else {\n      for (var i = 0; i < data.length; i++) {\n        if (data[i].data.length > 0) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n  function addDownloadButton(chart) {\n    var element = chart.element;\n    var link = document.createElement(\"a\");\n\n    var download = chart.options.download;\n    if (download === true) {\n      download = {};\n    } else if (typeof download === \"string\") {\n      download = {filename: download};\n    }\n    link.download = download.filename || \"chart.png\"; // https://caniuse.com/download\n\n    link.style.position = \"absolute\";\n    link.style.top = \"20px\";\n    link.style.right = \"20px\";\n    link.style.zIndex = 1000;\n    link.style.lineHeight = \"20px\";\n    link.target = \"_blank\"; // for safari\n    var image = document.createElement(\"img\");\n    image.alt = \"Download\";\n    image.style.border = \"none\";\n    // icon from font-awesome\n    // http://fa2png.io/\n    image.src = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABCFBMVEUAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMywEsqxAAAAV3RSTlMAAQIDBggJCgsMDQ4PERQaHB0eISIjJCouLzE0OTo/QUJHSUpLTU5PUllhYmltcHh5foWLjI+SlaCio6atr7S1t7m6vsHHyM7R2tze5Obo7fHz9ff5+/1hlxK2AAAA30lEQVQYGUXBhVYCQQBA0TdYWAt2d3d3YWAHyur7/z9xgD16Lw0DW+XKx+1GgX+FRzM3HWQWrHl5N/oapW5RPe0PkBu+UYeICvozTWZVK23Ao04B79oJrOsJDOoxkZoQPWgX29pHpCZEk7rEvQYiNSFq1UMqvlCjJkRBS1R8hb00Vb/TajtBL7nTHE1X1vyMQF732dQhyF2o6SAwrzP06iUQzvwsArlnzcOdrgBhJyHa1QOgO9U1GsKuvjUTjavliZYQ8nNPapG6sap/3nrIdJ6bOWzmX/fy0XVpfzZP3S8OJT3g9EEiJwAAAABJRU5ErkJggg==\";\n    link.appendChild(image);\n    element.style.position = \"relative\";\n\n    chart.__downloadAttached = true;\n\n    // mouseenter\n    chart.__enterEvent = addEvent(element, \"mouseover\", function(e) {\n      var related = e.relatedTarget;\n      // check download option again to ensure it wasn't changed\n      if ((!related || (related !== this && !childOf(this, related))) && chart.options.download) {\n        link.href = chart.toImage(download);\n        element.appendChild(link);\n      }\n    });\n\n    // mouseleave\n    chart.__leaveEvent = addEvent(element, \"mouseout\", function(e) {\n      var related = e.relatedTarget;\n      if (!related || (related !== this && !childOf(this, related))) {\n        if (link.parentNode) {\n          link.parentNode.removeChild(link);\n        }\n      }\n    });\n  }\n\n  // https://stackoverflow.com/questions/10149963/adding-event-listener-cross-browser\n  function addEvent(elem, event, fn) {\n    if (elem.addEventListener) {\n      elem.addEventListener(event, fn, false);\n      return fn;\n    } else {\n      var fn2 = function() {\n        // set the this pointer same as addEventListener when fn is called\n        return(fn.call(elem, window.event));\n      };\n      elem.attachEvent(\"on\" + event, fn2);\n      return fn2;\n    }\n  }\n\n  function removeEvent(elem, event, fn) {\n    if (elem.removeEventListener) {\n      elem.removeEventListener(event, fn, false);\n    } else {\n      elem.detachEvent(\"on\" + event, fn);\n    }\n  }\n\n  // https://gist.github.com/shawnbot/4166283\n  function childOf(p, c) {\n    if (p === c) { return false; }\n    while (c && c !== p) { c = c.parentNode; }\n    return c === p;\n  }\n\n  var pendingRequests = [], runningRequests = 0, maxRequests = 4;\n\n  function pushRequest(url, success, error) {\n    pendingRequests.push([url, success, error]);\n    runNext();\n  }\n\n  function runNext() {\n    if (runningRequests < maxRequests) {\n      var request = pendingRequests.shift();\n      if (request) {\n        runningRequests++;\n        getJSON(request[0], request[1], request[2]);\n        runNext();\n      }\n    }\n  }\n\n  function requestComplete() {\n    runningRequests--;\n    runNext();\n  }\n\n  function getJSON(url, success, error) {\n    ajaxCall(url, success, function (jqXHR, textStatus, errorThrown) {\n      var message = (typeof errorThrown === \"string\") ? errorThrown : errorThrown.message;\n      error(message);\n    });\n  }\n\n  function ajaxCall(url, success, error) {\n    var $ = window.jQuery || window.Zepto || window.$;\n\n    if ($ && $.ajax) {\n      $.ajax({\n        dataType: \"json\",\n        url: url,\n        success: success,\n        error: error,\n        complete: requestComplete\n      });\n    } else {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"GET\", url, true);\n      xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n      xhr.onload = function () {\n        requestComplete();\n        if (xhr.status === 200) {\n          success(JSON.parse(xhr.responseText), xhr.statusText, xhr);\n        } else {\n          error(xhr, \"error\", xhr.statusText);\n        }\n      };\n      xhr.send();\n    }\n  }\n\n  var config = {};\n  var adapters = [];\n\n  // helpers\n\n  function setText(element, text) {\n    if (document.body.innerText) {\n      element.innerText = text;\n    } else {\n      element.textContent = text;\n    }\n  }\n\n  // TODO remove prefix for all messages\n  function chartError(element, message, noPrefix) {\n    if (!noPrefix) {\n      message = \"Error Loading Chart: \" + message;\n    }\n    setText(element, message);\n    element.style.color = \"#ff0000\";\n  }\n\n  function errorCatcher(chart) {\n    try {\n      chart.__render();\n    } catch (err) {\n      chartError(chart.element, err.message);\n      throw err;\n    }\n  }\n\n  function fetchDataSource(chart, dataSource, showLoading) {\n    // only show loading message for urls and callbacks\n    if (showLoading && chart.options.loading && (typeof dataSource === \"string\" || typeof dataSource === \"function\")) {\n      setText(chart.element, chart.options.loading);\n    }\n\n    if (typeof dataSource === \"string\") {\n      pushRequest(dataSource, function (data) {\n        chart.rawData = data;\n        errorCatcher(chart);\n      }, function (message) {\n        chartError(chart.element, message);\n      });\n    } else if (typeof dataSource === \"function\") {\n      try {\n        dataSource(function (data) {\n          chart.rawData = data;\n          errorCatcher(chart);\n        }, function (message) {\n          chartError(chart.element, message, true);\n        });\n      } catch (err) {\n        chartError(chart.element, err, true);\n      }\n    } else {\n      chart.rawData = dataSource;\n      errorCatcher(chart);\n    }\n  }\n\n  function getAdapterType(library) {\n    if (library) {\n      if (library.product === \"Highcharts\") {\n        return defaultExport$1;\n      } else if (library.charts) {\n        return defaultExport;\n      } else if (isFunction(library)) {\n        return defaultExport$2;\n      }\n    }\n    throw new Error(\"Unknown adapter\");\n  }\n\n  function addAdapter(library) {\n    var adapterType = getAdapterType(library);\n    var adapter = new adapterType(library);\n\n    if (adapters.indexOf(adapter) === -1) {\n      adapters.push(adapter);\n    }\n  }\n\n  function loadAdapters() {\n    if (\"Chart\" in window) {\n      addAdapter(window.Chart);\n    }\n\n    if (\"Highcharts\" in window) {\n      addAdapter(window.Highcharts);\n    }\n\n    if (window.google && window.google.charts) {\n      addAdapter(window.google);\n    }\n  }\n\n  function renderChart(chartType, chart) {\n    if (dataEmpty(chart.data, chartType)) {\n      var message = chart.options.empty || (chart.options.messages && chart.options.messages.empty) || \"No data\";\n      setText(chart.element, message);\n    } else {\n      callAdapter(chartType, chart);\n      if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n        addDownloadButton(chart);\n      }\n    }\n  }\n\n  // TODO remove chartType if cross-browser way\n  // to get the name of the chart class\n  function callAdapter(chartType, chart) {\n    var i, adapter, fnName, adapterName;\n    fnName = \"render\" + chartType;\n    adapterName = chart.options.adapter;\n\n    loadAdapters();\n\n    for (i = 0; i < adapters.length; i++) {\n      adapter = adapters[i];\n      if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n        chart.adapter = adapter.name;\n        chart.__adapterObject = adapter;\n        return adapter[fnName](chart);\n      }\n    }\n\n    if (adapters.length > 0) {\n      throw new Error(\"No charting library found for \" + chartType);\n    } else {\n      throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n    }\n  }\n\n  // define classes\n\n  var Chart = function Chart(element, dataSource, options) {\n    var elementId;\n    if (typeof element === \"string\") {\n      elementId = element;\n      element = document.getElementById(element);\n      if (!element) {\n        throw new Error(\"No element with id \" + elementId);\n      }\n    }\n    this.element = element;\n    this.options = merge(Chartkick.options, options || {});\n    this.dataSource = dataSource;\n\n    Chartkick.charts[element.id] = this;\n\n    fetchDataSource(this, dataSource, true);\n\n    if (this.options.refresh) {\n      this.startRefresh();\n    }\n  };\n\n  Chart.prototype.getElement = function getElement () {\n    return this.element;\n  };\n\n  Chart.prototype.getDataSource = function getDataSource () {\n    return this.dataSource;\n  };\n\n  Chart.prototype.getData = function getData () {\n    return this.data;\n  };\n\n  Chart.prototype.getOptions = function getOptions () {\n    return this.options;\n  };\n\n  Chart.prototype.getChartObject = function getChartObject () {\n    return this.chart;\n  };\n\n  Chart.prototype.getAdapter = function getAdapter () {\n    return this.adapter;\n  };\n\n  Chart.prototype.updateData = function updateData (dataSource, options) {\n    this.dataSource = dataSource;\n    if (options) {\n      this.__updateOptions(options);\n    }\n    fetchDataSource(this, dataSource, true);\n  };\n\n  Chart.prototype.setOptions = function setOptions (options) {\n    this.__updateOptions(options);\n    this.redraw();\n  };\n\n  Chart.prototype.redraw = function redraw () {\n    fetchDataSource(this, this.rawData);\n  };\n\n  Chart.prototype.refreshData = function refreshData () {\n    if (typeof this.dataSource === \"string\") {\n      // prevent browser from caching\n      var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n      var url = this.dataSource + sep + \"_=\" + (new Date()).getTime();\n      fetchDataSource(this, url);\n    } else if (typeof this.dataSource === \"function\") {\n      fetchDataSource(this, this.dataSource);\n    }\n  };\n\n  Chart.prototype.startRefresh = function startRefresh () {\n      var this$1$1 = this;\n\n    var refresh = this.options.refresh;\n\n    if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n      throw new Error(\"Data source must be a URL or callback for refresh\");\n    }\n\n    if (!this.intervalId) {\n      if (refresh) {\n        this.intervalId = setInterval( function () {\n          this$1$1.refreshData();\n        }, refresh * 1000);\n      } else {\n        throw new Error(\"No refresh interval\");\n      }\n    }\n  };\n\n  Chart.prototype.stopRefresh = function stopRefresh () {\n    if (this.intervalId) {\n      clearInterval(this.intervalId);\n      this.intervalId = null;\n    }\n  };\n\n  Chart.prototype.toImage = function toImage (download) {\n    if (this.adapter === \"chartjs\") {\n      if (download && download.background && download.background !== \"transparent\") {\n        // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n        var canvas = this.chart.canvas;\n        var ctx = this.chart.ctx;\n        var tmpCanvas = document.createElement(\"canvas\");\n        var tmpCtx = tmpCanvas.getContext(\"2d\");\n        tmpCanvas.width = ctx.canvas.width;\n        tmpCanvas.height = ctx.canvas.height;\n        tmpCtx.fillStyle = download.background;\n        tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n        tmpCtx.drawImage(canvas, 0, 0);\n        return tmpCanvas.toDataURL(\"image/png\");\n      } else {\n        return this.chart.toBase64Image();\n      }\n    } else {\n      throw new Error(\"Feature only available for Chart.js\");\n    }\n  };\n\n  Chart.prototype.destroy = function destroy () {\n    this.destroyed = true;\n    this.stopRefresh();\n\n    if (this.__adapterObject) {\n      this.__adapterObject.destroy(this);\n    }\n\n    if (this.__enterEvent) {\n      removeEvent(this.element, \"mouseover\", this.__enterEvent);\n    }\n\n    if (this.__leaveEvent) {\n      removeEvent(this.element, \"mouseout\", this.__leaveEvent);\n    }\n  };\n\n  Chart.prototype.__updateOptions = function __updateOptions (options) {\n    var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n    this.options = merge(Chartkick.options, options);\n    if (updateRefresh) {\n      this.stopRefresh();\n      this.startRefresh();\n    }\n  };\n\n  Chart.prototype.__render = function __render () {\n    this.data = this.__processData();\n    renderChart(this.__chartName(), this);\n  };\n\n  Chart.prototype.__config = function __config () {\n    return config;\n  };\n\n  var LineChart = /*@__PURE__*/(function (Chart) {\n    function LineChart () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) LineChart.__proto__ = Chart;\n    LineChart.prototype = Object.create( Chart && Chart.prototype );\n    LineChart.prototype.constructor = LineChart;\n\n    LineChart.prototype.__processData = function __processData () {\n      return processSeries(this);\n    };\n\n    LineChart.prototype.__chartName = function __chartName () {\n      return \"LineChart\";\n    };\n\n    return LineChart;\n  }(Chart));\n\n  var PieChart = /*@__PURE__*/(function (Chart) {\n    function PieChart () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) PieChart.__proto__ = Chart;\n    PieChart.prototype = Object.create( Chart && Chart.prototype );\n    PieChart.prototype.constructor = PieChart;\n\n    PieChart.prototype.__processData = function __processData () {\n      return processSimple(this);\n    };\n\n    PieChart.prototype.__chartName = function __chartName () {\n      return \"PieChart\";\n    };\n\n    return PieChart;\n  }(Chart));\n\n  var ColumnChart = /*@__PURE__*/(function (Chart) {\n    function ColumnChart () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) ColumnChart.__proto__ = Chart;\n    ColumnChart.prototype = Object.create( Chart && Chart.prototype );\n    ColumnChart.prototype.constructor = ColumnChart;\n\n    ColumnChart.prototype.__processData = function __processData () {\n      return processSeries(this, null, true);\n    };\n\n    ColumnChart.prototype.__chartName = function __chartName () {\n      return \"ColumnChart\";\n    };\n\n    return ColumnChart;\n  }(Chart));\n\n  var BarChart = /*@__PURE__*/(function (Chart) {\n    function BarChart () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) BarChart.__proto__ = Chart;\n    BarChart.prototype = Object.create( Chart && Chart.prototype );\n    BarChart.prototype.constructor = BarChart;\n\n    BarChart.prototype.__processData = function __processData () {\n      return processSeries(this, null, true);\n    };\n\n    BarChart.prototype.__chartName = function __chartName () {\n      return \"BarChart\";\n    };\n\n    return BarChart;\n  }(Chart));\n\n  var AreaChart = /*@__PURE__*/(function (Chart) {\n    function AreaChart () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) AreaChart.__proto__ = Chart;\n    AreaChart.prototype = Object.create( Chart && Chart.prototype );\n    AreaChart.prototype.constructor = AreaChart;\n\n    AreaChart.prototype.__processData = function __processData () {\n      return processSeries(this);\n    };\n\n    AreaChart.prototype.__chartName = function __chartName () {\n      return \"AreaChart\";\n    };\n\n    return AreaChart;\n  }(Chart));\n\n  var GeoChart = /*@__PURE__*/(function (Chart) {\n    function GeoChart () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) GeoChart.__proto__ = Chart;\n    GeoChart.prototype = Object.create( Chart && Chart.prototype );\n    GeoChart.prototype.constructor = GeoChart;\n\n    GeoChart.prototype.__processData = function __processData () {\n      return processSimple(this);\n    };\n\n    GeoChart.prototype.__chartName = function __chartName () {\n      return \"GeoChart\";\n    };\n\n    return GeoChart;\n  }(Chart));\n\n  var ScatterChart = /*@__PURE__*/(function (Chart) {\n    function ScatterChart () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) ScatterChart.__proto__ = Chart;\n    ScatterChart.prototype = Object.create( Chart && Chart.prototype );\n    ScatterChart.prototype.constructor = ScatterChart;\n\n    ScatterChart.prototype.__processData = function __processData () {\n      return processSeries(this, \"number\");\n    };\n\n    ScatterChart.prototype.__chartName = function __chartName () {\n      return \"ScatterChart\";\n    };\n\n    return ScatterChart;\n  }(Chart));\n\n  var BubbleChart = /*@__PURE__*/(function (Chart) {\n    function BubbleChart () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) BubbleChart.__proto__ = Chart;\n    BubbleChart.prototype = Object.create( Chart && Chart.prototype );\n    BubbleChart.prototype.constructor = BubbleChart;\n\n    BubbleChart.prototype.__processData = function __processData () {\n      return processSeries(this, \"bubble\");\n    };\n\n    BubbleChart.prototype.__chartName = function __chartName () {\n      return \"BubbleChart\";\n    };\n\n    return BubbleChart;\n  }(Chart));\n\n  var Timeline = /*@__PURE__*/(function (Chart) {\n    function Timeline () {\n      Chart.apply(this, arguments);\n    }\n\n    if ( Chart ) Timeline.__proto__ = Chart;\n    Timeline.prototype = Object.create( Chart && Chart.prototype );\n    Timeline.prototype.constructor = Timeline;\n\n    Timeline.prototype.__processData = function __processData () {\n      var i, data = this.rawData;\n      for (i = 0; i < data.length; i++) {\n        data[i][1] = toDate(data[i][1]);\n        data[i][2] = toDate(data[i][2]);\n      }\n      return data;\n    };\n\n    Timeline.prototype.__chartName = function __chartName () {\n      return \"Timeline\";\n    };\n\n    return Timeline;\n  }(Chart));\n\n  var Chartkick = {\n    LineChart: LineChart,\n    PieChart: PieChart,\n    ColumnChart: ColumnChart,\n    BarChart: BarChart,\n    AreaChart: AreaChart,\n    GeoChart: GeoChart,\n    ScatterChart: ScatterChart,\n    BubbleChart: BubbleChart,\n    Timeline: Timeline,\n    charts: {},\n    configure: function (options) {\n      for (var key in options) {\n        if (options.hasOwnProperty(key)) {\n          config[key] = options[key];\n        }\n      }\n    },\n    setDefaultOptions: function (opts) {\n      Chartkick.options = opts;\n    },\n    eachChart: function (callback) {\n      for (var chartId in Chartkick.charts) {\n        if (Chartkick.charts.hasOwnProperty(chartId)) {\n          callback(Chartkick.charts[chartId]);\n        }\n      }\n    },\n    destroyAll: function() {\n      for (var chartId in Chartkick.charts) {\n        if (Chartkick.charts.hasOwnProperty(chartId)) {\n          Chartkick.charts[chartId].destroy();\n          delete Chartkick.charts[chartId];\n        }\n      }\n    },\n    config: config,\n    options: {},\n    adapters: adapters,\n    addAdapter: addAdapter,\n    use: function(adapter) {\n      addAdapter(adapter);\n      return Chartkick;\n    }\n  };\n\n  // not ideal, but allows for simpler integration\n  if (typeof window !== \"undefined\" && !window.Chartkick) {\n    window.Chartkick = Chartkick;\n\n    // clean up previous charts before Turbolinks loads new page\n    document.addEventListener(\"turbolinks:before-render\", function() {\n      if (config.autoDestroy !== false) {\n        Chartkick.destroyAll();\n      }\n    });\n    document.addEventListener(\"turbo:before-render\", function() {\n      if (config.autoDestroy !== false) {\n        Chartkick.destroyAll();\n      }\n    });\n\n    // use setTimeout so charting library can come later in same JS file\n    setTimeout(function() {\n      window.dispatchEvent(new Event(\"chartkick:load\"));\n    }, 0);\n  }\n\n  // backwards compatibility for esm require\n  Chartkick.default = Chartkick;\n\n  return Chartkick;\n\n}));\n", "export function fixProto(target, prototype) {\n    var setPrototypeOf = Object.setPrototypeOf;\n    setPrototypeOf\n        ? setPrototypeOf(target, prototype)\n        : (target.__proto__ = prototype);\n}\nexport function fixStack(target, fn) {\n    if (fn === void 0) { fn = target.constructor; }\n    var captureStackTrace = Error.captureStackTrace;\n    captureStackTrace && captureStackTrace(target, fn);\n}\n//# sourceMappingURL=utils.js.map", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { fixProto, fixStack } from './utils';\nvar CustomError = (function (_super) {\n    __extends(CustomError, _super);\n    function CustomError(message, options) {\n        var _newTarget = this.constructor;\n        var _this = _super.call(this, message, options) || this;\n        Object.defineProperty(_this, 'name', {\n            value: _newTarget.name,\n            enumerable: false,\n            configurable: true,\n        });\n        fixProto(_this, _newTarget.prototype);\n        fixStack(_this);\n        return _this;\n    }\n    return CustomError;\n}(Error));\nexport { CustomError };\n//# sourceMappingURL=custom-error.js.map", "var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { fixStack } from './utils';\nexport function customErrorFactory(fn, parent) {\n    if (parent === void 0) { parent = Error; }\n    function CustomError() {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!(this instanceof CustomError))\n            return new (CustomError.bind.apply(CustomError, __spreadArray([void 0], args, false)))();\n        parent.apply(this, args);\n        Object.defineProperty(this, 'name', {\n            value: fn.name || parent.name,\n            enumerable: false,\n            configurable: true,\n        });\n        fn.apply(this, args);\n        fixStack(this, CustomError);\n    }\n    return Object.defineProperties(CustomError, {\n        prototype: {\n            value: Object.create(parent.prototype, {\n                constructor: {\n                    value: CustomError,\n                    writable: true,\n                    configurable: true,\n                },\n            }),\n        },\n    });\n}\n//# sourceMappingURL=factory.js.map", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport { CustomError } from 'ts-custom-error';\n/**\n * Custom Error class of type Exception.\n */\nvar Exception = /** @class */ (function (_super) {\n    __extends(Exception, _super);\n    /**\n     * Allows Exception to be constructed directly\n     * with some message and prototype definition.\n     */\n    function Exception(message) {\n        if (message === void 0) { message = undefined; }\n        var _this = _super.call(this, message) || this;\n        _this.message = message;\n        return _this;\n    }\n    Exception.prototype.getKind = function () {\n        var ex = this.constructor;\n        return ex.kind;\n    };\n    /**\n     * It's typed as string so it can be extended and overriden.\n     */\n    Exception.kind = 'Exception';\n    return Exception;\n}(CustomError));\nexport default Exception;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ArgumentException = /** @class */ (function (_super) {\n    __extends(ArgumentException, _super);\n    function ArgumentException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ArgumentException.kind = 'ArgumentException';\n    return ArgumentException;\n}(Exception));\nexport default ArgumentException;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar IllegalArgumentException = /** @class */ (function (_super) {\n    __extends(IllegalArgumentException, _super);\n    function IllegalArgumentException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    IllegalArgumentException.kind = 'IllegalArgumentException';\n    return IllegalArgumentException;\n}(Exception));\nexport default IllegalArgumentException;\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 */\nimport IllegalArgumentException from './IllegalArgumentException';\nvar BinaryBitmap = /** @class */ (function () {\n    function BinaryBitmap(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    BinaryBitmap.prototype.getWidth = function () {\n        return this.binarizer.getWidth();\n    };\n    /**\n     * @return The height of the bitmap.\n     */\n    BinaryBitmap.prototype.getHeight = function () {\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    BinaryBitmap.prototype.getBlackRow = function (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    BinaryBitmap.prototype.getBlackMatrix = function () {\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    BinaryBitmap.prototype.isCropSupported = function () {\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    BinaryBitmap.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n        var 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    BinaryBitmap.prototype.isRotateSupported = function () {\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    BinaryBitmap.prototype.rotateCounterClockwise = function () {\n        var 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    BinaryBitmap.prototype.rotateCounterClockwise45 = function () {\n        var newSource = this.binarizer.getLuminanceSource().rotateCounterClockwise45();\n        return new BinaryBitmap(this.binarizer.createBinarizer(newSource));\n    };\n    /*@Override*/\n    BinaryBitmap.prototype.toString = function () {\n        try {\n            return this.getBlackMatrix().toString();\n        }\n        catch (e /*: NotFoundException*/) {\n            return '';\n        }\n    };\n    return BinaryBitmap;\n}());\nexport default BinaryBitmap;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ChecksumException = /** @class */ (function (_super) {\n    __extends(ChecksumException, _super);\n    function ChecksumException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ChecksumException.getChecksumInstance = function () {\n        return new ChecksumException();\n    };\n    ChecksumException.kind = 'ChecksumException';\n    return ChecksumException;\n}(Exception));\nexport default ChecksumException;\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 */\nvar Binarizer = /** @class */ (function () {\n    function Binarizer(source) {\n        this.source = source;\n    }\n    Binarizer.prototype.getLuminanceSource = function () {\n        return this.source;\n    };\n    Binarizer.prototype.getWidth = function () {\n        return this.source.getWidth();\n    };\n    Binarizer.prototype.getHeight = function () {\n        return this.source.getHeight();\n    };\n    return Binarizer;\n}());\nexport default Binarizer;\n", "var System = /** @class */ (function () {\n    function System() {\n    }\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    System.arraycopy = function (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    System.currentTimeMillis = function () {\n        return Date.now();\n    };\n    return System;\n}());\nexport default System;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar IndexOutOfBoundsException = /** @class */ (function (_super) {\n    __extends(IndexOutOfBoundsException, _super);\n    function IndexOutOfBoundsException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    IndexOutOfBoundsException.kind = 'IndexOutOfBoundsException';\n    return IndexOutOfBoundsException;\n}(Exception));\nexport default IndexOutOfBoundsException;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport IndexOutOfBoundsException from './IndexOutOfBoundsException';\n/**\n * Custom Error class of type Exception.\n */\nvar ArrayIndexOutOfBoundsException = /** @class */ (function (_super) {\n    __extends(ArrayIndexOutOfBoundsException, _super);\n    function ArrayIndexOutOfBoundsException(index, message) {\n        if (index === void 0) { index = undefined; }\n        if (message === void 0) { message = undefined; }\n        var _this = _super.call(this, message) || this;\n        _this.index = index;\n        _this.message = message;\n        return _this;\n    }\n    ArrayIndexOutOfBoundsException.kind = 'ArrayIndexOutOfBoundsException';\n    return ArrayIndexOutOfBoundsException;\n}(IndexOutOfBoundsException));\nexport default ArrayIndexOutOfBoundsException;\n", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport System from './System';\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport ArrayIndexOutOfBoundsException from '../ArrayIndexOutOfBoundsException';\nvar Arrays = /** @class */ (function () {\n    function Arrays() {\n    }\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    Arrays.fill = function (a, val) {\n        for (var 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    Arrays.fillWithin = function (a, fromIndex, toIndex, val) {\n        Arrays.rangeCheck(a.length, fromIndex, toIndex);\n        for (var 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    Arrays.rangeCheck = function (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    Arrays.asList = function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return args;\n    };\n    Arrays.create = function (rows, cols, value) {\n        var arr = Array.from({ length: rows });\n        return arr.map(function (x) { return Array.from({ length: cols }).fill(value); });\n    };\n    Arrays.createInt32Array = function (rows, cols, value) {\n        var arr = Array.from({ length: rows });\n        return arr.map(function (x) { return Int32Array.from({ length: cols }).fill(value); });\n    };\n    Arrays.equals = function (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 (var i = 0, length_1 = first.length; i < length_1; i++) {\n            if (first[i] !== second[i]) {\n                return false;\n            }\n        }\n        return true;\n    };\n    Arrays.hashCode = function (a) {\n        var e_1, _a;\n        if (a === null) {\n            return 0;\n        }\n        var result = 1;\n        try {\n            for (var a_1 = __values(a), a_1_1 = a_1.next(); !a_1_1.done; a_1_1 = a_1.next()) {\n                var element = a_1_1.value;\n                result = 31 * result + element;\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (a_1_1 && !a_1_1.done && (_a = a_1.return)) _a.call(a_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return result;\n    };\n    Arrays.fillUint8Array = function (a, value) {\n        for (var i = 0; i !== a.length; i++) {\n            a[i] = value;\n        }\n    };\n    Arrays.copyOf = function (original, newLength) {\n        return original.slice(0, newLength);\n    };\n    Arrays.copyOfUint8Array = function (original, newLength) {\n        if (original.length <= newLength) {\n            var newArray = new Uint8Array(newLength);\n            newArray.set(original);\n            return newArray;\n        }\n        return original.slice(0, newLength);\n    };\n    Arrays.copyOfRange = function (original, from, to) {\n        var newLength = to - from;\n        var 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    Arrays.binarySearch = function (ar, el, comparator) {\n        if (undefined === comparator) {\n            comparator = Arrays.numberComparator;\n        }\n        var m = 0;\n        var n = ar.length - 1;\n        while (m <= n) {\n            var k = (n + m) >> 1;\n            var 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    Arrays.numberComparator = function (a, b) {\n        return a - b;\n    };\n    return Arrays;\n}());\nexport default Arrays;\n", "/**\n * Ponyfill for Java's Integer class.\n */\nvar Integer = /** @class */ (function () {\n    function Integer() {\n    }\n    Integer.numberOfTrailingZeros = function (i) {\n        var y;\n        if (i === 0)\n            return 32;\n        var 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    Integer.numberOfLeadingZeros = function (i) {\n        // HD, Figure 5-6\n        if (i === 0) {\n            return 32;\n        }\n        var 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    Integer.toHexString = function (i) {\n        return i.toString(16);\n    };\n    Integer.toBinaryString = function (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    Integer.bitCount = function (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    Integer.truncDivision = function (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    Integer.parseInt = function (num, radix) {\n        if (radix === void 0) { radix = undefined; }\n        return parseInt(num, radix);\n    };\n    Integer.MIN_VALUE_32_BITS = -2147483648;\n    Integer.MAX_VALUE = Number.MAX_SAFE_INTEGER;\n    return Integer;\n}());\nexport default Integer;\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.Arrays;*/\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport Arrays from '../util/Arrays';\nimport Integer from '../util/Integer';\nimport System from '../util/System';\n/**\n * <p>A simple, fast array of bits, represented compactly by an array of ints internally.</p>\n *\n * @author Sean Owen\n */\nvar BitArray /*implements Cloneable*/ = /** @class */ (function () {\n    // public constructor() {\n    //   this.size = 0\n    //   this.bits = new Int32Array(1)\n    // }\n    // public constructor(size?: number /*int*/) {\n    //   if (undefined === size) {\n    //     this.size = 0\n    //   } else {\n    //     this.size = size\n    //   }\n    //   this.bits = this.makeArray(size)\n    // }\n    // For testing only\n    function BitArray(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    BitArray.prototype.getSize = function () {\n        return this.size;\n    };\n    BitArray.prototype.getSizeInBytes = function () {\n        return Math.floor((this.size + 7) / 8);\n    };\n    BitArray.prototype.ensureCapacity = function (size /*int*/) {\n        if (size > this.bits.length * 32) {\n            var 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    BitArray.prototype.get = function (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    BitArray.prototype.set = function (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    BitArray.prototype.flip = function (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    BitArray.prototype.getNextSet = function (from /*int*/) {\n        var size = this.size;\n        if (from >= size) {\n            return size;\n        }\n        var bits = this.bits;\n        var bitsOffset = Math.floor(from / 32);\n        var currentBits = bits[bitsOffset];\n        // mask off lesser bits first\n        currentBits &= ~((1 << (from & 0x1F)) - 1);\n        var length = bits.length;\n        while (currentBits === 0) {\n            if (++bitsOffset === length) {\n                return size;\n            }\n            currentBits = bits[bitsOffset];\n        }\n        var 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    BitArray.prototype.getNextUnset = function (from /*int*/) {\n        var size = this.size;\n        if (from >= size) {\n            return size;\n        }\n        var bits = this.bits;\n        var bitsOffset = Math.floor(from / 32);\n        var currentBits = ~bits[bitsOffset];\n        // mask off lesser bits first\n        currentBits &= ~((1 << (from & 0x1F)) - 1);\n        var length = bits.length;\n        while (currentBits === 0) {\n            if (++bitsOffset === length) {\n                return size;\n            }\n            currentBits = ~bits[bitsOffset];\n        }\n        var 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    BitArray.prototype.setBulk = function (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    BitArray.prototype.setRange = function (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        var firstInt = Math.floor(start / 32);\n        var lastInt = Math.floor(end / 32);\n        var bits = this.bits;\n        for (var i = firstInt; i <= lastInt; i++) {\n            var firstBit = i > firstInt ? 0 : start & 0x1F;\n            var lastBit = i < lastInt ? 31 : end & 0x1F;\n            // Ones from firstBit to lastBit, inclusive\n            var mask = (2 << lastBit) - (1 << firstBit);\n            bits[i] |= mask;\n        }\n    };\n    /**\n     * Clears all bits (sets to false).\n     */\n    BitArray.prototype.clear = function () {\n        var max = this.bits.length;\n        var bits = this.bits;\n        for (var 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     * @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    BitArray.prototype.isRange = function (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        var firstInt = Math.floor(start / 32);\n        var lastInt = Math.floor(end / 32);\n        var bits = this.bits;\n        for (var i = firstInt; i <= lastInt; i++) {\n            var firstBit = i > firstInt ? 0 : start & 0x1F;\n            var lastBit = i < lastInt ? 31 : end & 0x1F;\n            // Ones from firstBit to lastBit, inclusive\n            var 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    BitArray.prototype.appendBit = function (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    BitArray.prototype.appendBits = function (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 (var numBitsLeft = numBits; numBitsLeft > 0; numBitsLeft--) {\n            this.appendBit(((value >> (numBitsLeft - 1)) & 0x01) === 1);\n        }\n    };\n    BitArray.prototype.appendBitArray = function (other) {\n        var otherSize = other.size;\n        this.ensureCapacity(this.size + otherSize);\n        // const appendBit = this.appendBit;\n        for (var i = 0; i < otherSize; i++) {\n            this.appendBit(other.get(i));\n        }\n    };\n    BitArray.prototype.xor = function (other) {\n        if (this.size !== other.size) {\n            throw new IllegalArgumentException('Sizes don\\'t match');\n        }\n        var bits = this.bits;\n        for (var i = 0, length_1 = bits.length; i < length_1; 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    BitArray.prototype.toBytes = function (bitOffset /*int*/, array, offset /*int*/, numBytes /*int*/) {\n        for (var i = 0; i < numBytes; i++) {\n            var theByte = 0;\n            for (var 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    BitArray.prototype.getBitArray = function () {\n        return this.bits;\n    };\n    /**\n     * Reverses all bits in the array.\n     */\n    BitArray.prototype.reverse = function () {\n        var newBits = new Int32Array(this.bits.length);\n        // reverse all int's first\n        var len = Math.floor((this.size - 1) / 32);\n        var oldBitsLen = len + 1;\n        var bits = this.bits;\n        for (var i = 0; i < oldBitsLen; i++) {\n            var 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            var leftOffset = oldBitsLen * 32 - this.size;\n            var currentInt = newBits[0] >>> leftOffset;\n            for (var i = 1; i < oldBitsLen; i++) {\n                var 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    BitArray.makeArray = function (size /*int*/) {\n        return new Int32Array(Math.floor((size + 31) / 32));\n    };\n    /*@Override*/\n    BitArray.prototype.equals = function (o) {\n        if (!(o instanceof BitArray)) {\n            return false;\n        }\n        var other = o;\n        return this.size === other.size && Arrays.equals(this.bits, other.bits);\n    };\n    /*@Override*/\n    BitArray.prototype.hashCode = function () {\n        return 31 * this.size + Arrays.hashCode(this.bits);\n    };\n    /*@Override*/\n    BitArray.prototype.toString = function () {\n        var result = '';\n        for (var 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    BitArray.prototype.clone = function () {\n        return new BitArray(this.size, this.bits.slice());\n    };\n    /**\n     * converts to boolean array.\n     */\n    BitArray.prototype.toArray = function () {\n        var result = [];\n        for (var i = 0, size = this.size; i < size; i++) {\n            result.push(this.get(i));\n        }\n        return result;\n    };\n    return BitArray;\n}());\nexport default BitArray;\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 */\nvar 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 = {}));\nexport default DecodeHintType;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar FormatException = /** @class */ (function (_super) {\n    __extends(FormatException, _super);\n    function FormatException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    FormatException.getFormatInstance = function () {\n        return new FormatException();\n    };\n    FormatException.kind = 'FormatException';\n    return FormatException;\n}(Exception));\nexport default FormatException;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.common {*/\nimport FormatException from '../FormatException';\n/*import java.util.HashMap;*/\n/*import java.util.Map;*/\nexport 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 */\nvar CharacterSetECI = /** @class */ (function () {\n    function CharacterSetECI(valueIdentifier, valuesParam, name) {\n        var e_1, _a;\n        var otherEncodingNames = [];\n        for (var _i = 3; _i < arguments.length; _i++) {\n            otherEncodingNames[_i - 3] = arguments[_i];\n        }\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        var values = this.values;\n        for (var i = 0, length_1 = values.length; i !== length_1; i++) {\n            var v = values[i];\n            CharacterSetECI.VALUES_TO_ECI.set(v, this);\n        }\n        try {\n            for (var otherEncodingNames_1 = __values(otherEncodingNames), otherEncodingNames_1_1 = otherEncodingNames_1.next(); !otherEncodingNames_1_1.done; otherEncodingNames_1_1 = otherEncodingNames_1.next()) {\n                var otherName = otherEncodingNames_1_1.value;\n                CharacterSetECI.NAME_TO_ECI.set(otherName, this);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (otherEncodingNames_1_1 && !otherEncodingNames_1_1.done && (_a = otherEncodingNames_1.return)) _a.call(otherEncodingNames_1);\n            }\n            finally { if (e_1) throw e_1.error; }\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    CharacterSetECI.prototype.getValueIdentifier = function () {\n        return this.valueIdentifier;\n    };\n    CharacterSetECI.prototype.getName = function () {\n        return this.name;\n    };\n    CharacterSetECI.prototype.getValue = function () {\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    CharacterSetECI.getCharacterSetECIByValue = function (value /*int*/) {\n        if (value < 0 || value >= 900) {\n            throw new FormatException('incorect value');\n        }\n        var 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    CharacterSetECI.getCharacterSetECIByName = function (name) {\n        var characterSet = CharacterSetECI.NAME_TO_ECI.get(name);\n        if (undefined === characterSet) {\n            throw new FormatException('incorect value');\n        }\n        return characterSet;\n    };\n    CharacterSetECI.prototype.equals = function (o) {\n        if (!(o instanceof CharacterSetECI)) {\n            return false;\n        }\n        var other = o;\n        return this.getName() === other.getName();\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    return CharacterSetECI;\n}());\nexport default CharacterSetECI;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar UnsupportedOperationException = /** @class */ (function (_super) {\n    __extends(UnsupportedOperationException, _super);\n    function UnsupportedOperationException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    UnsupportedOperationException.kind = 'UnsupportedOperationException';\n    return UnsupportedOperationException;\n}(Exception));\nexport default UnsupportedOperationException;\n", "import UnsupportedOperationException from '../UnsupportedOperationException';\nimport CharacterSetECI from '../common/CharacterSetECI';\n/**\n * Responsible for en/decoding strings.\n */\nvar StringEncoding = /** @class */ (function () {\n    function StringEncoding() {\n    }\n    /**\n     * Decodes some Uint8Array to a string format.\n     */\n    StringEncoding.decode = function (bytes, encoding) {\n        var 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    StringEncoding.shouldDecodeOnFallback = function (encodingName) {\n        return !StringEncoding.isBrowser() && encodingName === 'ISO-8859-1';\n    };\n    /**\n     * Encodes some string into a Uint8Array.\n     */\n    StringEncoding.encode = function (s, encoding) {\n        var 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    StringEncoding.isBrowser = function () {\n        return (typeof window !== 'undefined' && {}.toString.call(window) === '[object Window]');\n    };\n    /**\n     * Returns the string value from some encoding character set.\n     */\n    StringEncoding.encodingName = function (encoding) {\n        return typeof encoding === 'string'\n            ? encoding\n            : encoding.getName();\n    };\n    /**\n     * Returns character set from some encoding character set.\n     */\n    StringEncoding.encodingCharacterSet = function (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    StringEncoding.decodeFallback = function (bytes, encoding) {\n        var characterSet = this.encodingCharacterSet(encoding);\n        if (StringEncoding.isDecodeFallbackSupported(characterSet)) {\n            var s = '';\n            for (var i = 0, length_1 = bytes.length; i < length_1; i++) {\n                var 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    StringEncoding.isDecodeFallbackSupported = function (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    StringEncoding.encodeFallback = function (s) {\n        var encodedURIstring = btoa(unescape(encodeURIComponent(s)));\n        var charList = encodedURIstring.split('');\n        var uintArray = [];\n        for (var i = 0; i < charList.length; i++) {\n            uintArray.push(charList[i].charCodeAt(0));\n        }\n        return new Uint8Array(uintArray);\n    };\n    return StringEncoding;\n}());\nexport default StringEncoding;\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/*namespace com.google.zxing.common {*/\n/*import java.nio.charset.Charset;*/\n/*import java.util.Map;*/\nimport DecodeHintType from '../DecodeHintType';\nimport CharacterSetECI from './CharacterSetECI';\nimport StringEncoding from '../util/StringEncoding';\n/**\n * Common string-related functions.\n *\n * @author Sean Owen\n * @author Alex Dupre\n */\nvar StringUtils = /** @class */ (function () {\n    function StringUtils() {\n    }\n    // SHIFT_JIS.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING) ||\n    // EUC_JP.equalsIgnoreCase(PLATFORM_DEFAULT_ENCODING);\n    StringUtils.castAsNonUtf8Char = function (code, encoding) {\n        if (encoding === void 0) { 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        var 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    StringUtils.guessEncoding = function (bytes, hints) {\n        if (hints !== null && hints !== undefined && undefined !== hints.get(DecodeHintType.CHARACTER_SET)) {\n            return hints.get(DecodeHintType.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        var length = bytes.length;\n        var canBeISO88591 = true;\n        var canBeShiftJIS = true;\n        var canBeUTF8 = true;\n        var utf8BytesLeft = 0;\n        // int utf8LowChars = 0\n        var utf2BytesChars = 0;\n        var utf3BytesChars = 0;\n        var utf4BytesChars = 0;\n        var sjisBytesLeft = 0;\n        // int sjisLowChars = 0\n        var sjisKatakanaChars = 0;\n        // int sjisDoubleBytesChars = 0\n        var sjisCurKatakanaWordLength = 0;\n        var sjisCurDoubleBytesWordLength = 0;\n        var sjisMaxKatakanaWordLength = 0;\n        var sjisMaxDoubleBytesWordLength = 0;\n        // int isoLowChars = 0\n        // int isoHighChars = 0\n        var isoHighOther = 0;\n        var utf8bom = bytes.length > 3 &&\n            bytes[0] === /*(byte) */ 0xEF &&\n            bytes[1] === /*(byte) */ 0xBB &&\n            bytes[2] === /*(byte) */ 0xBF;\n        for (var i = 0; i < length && (canBeISO88591 || canBeShiftJIS || canBeUTF8); i++) {\n            var 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    StringUtils.format = function (append) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var 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            var base = p3 ? parseInt(p3.substr(1)) : undefined;\n            var 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            var size = parseInt(p1); /* padding size */\n            var 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        var regex = /%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;\n        return append.replace(regex, callback);\n    };\n    /**\n     *\n     */\n    StringUtils.getBytes = function (str, encoding) {\n        return StringEncoding.encode(str, encoding);\n    };\n    /**\n     * Returns the charcode at the specified index or at index zero.\n     */\n    StringUtils.getCharCode = function (str, index) {\n        if (index === void 0) { index = 0; }\n        return str.charCodeAt(index);\n    };\n    /**\n     * Returns char for given charcode\n     */\n    StringUtils.getCharAt = function (charCode) {\n        return String.fromCharCode(charCode);\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    return StringUtils;\n}());\nexport default StringUtils;\n", "import StringUtils from '../common/StringUtils';\nvar StringBuilder = /** @class */ (function () {\n    function StringBuilder(value) {\n        if (value === void 0) { value = ''; }\n        this.value = value;\n    }\n    StringBuilder.prototype.enableDecoding = function (encoding) {\n        this.encoding = encoding;\n        return this;\n    };\n    StringBuilder.prototype.append = function (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    StringBuilder.prototype.appendChars = function (str, offset, len) {\n        for (var i = offset; offset < offset + len; i++) {\n            this.append(str[i]);\n        }\n        return this;\n    };\n    StringBuilder.prototype.length = function () {\n        return this.value.length;\n    };\n    StringBuilder.prototype.charAt = function (n) {\n        return this.value.charAt(n);\n    };\n    StringBuilder.prototype.deleteCharAt = function (n) {\n        this.value = this.value.substr(0, n) + this.value.substring(n + 1);\n    };\n    StringBuilder.prototype.setCharAt = function (n, c) {\n        this.value = this.value.substr(0, n) + c + this.value.substr(n + 1);\n    };\n    StringBuilder.prototype.substring = function (start, end) {\n        return this.value.substring(start, end);\n    };\n    /**\n     * @note helper method for RSS Expanded\n     */\n    StringBuilder.prototype.setLengthToZero = function () {\n        this.value = '';\n    };\n    StringBuilder.prototype.toString = function () {\n        return this.value;\n    };\n    StringBuilder.prototype.insert = function (n, c) {\n        this.value = this.value.substring(0, n) + c + this.value.substring(n);\n    };\n    return StringBuilder;\n}());\nexport default StringBuilder;\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.Arrays;*/\nimport BitArray from './BitArray';\nimport System from '../util/System';\nimport Arrays from '../util/Arrays';\nimport StringBuilder from '../util/StringBuilder';\nimport IllegalArgumentException from '../IllegalArgumentException';\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 */\nvar BitMatrix /*implements Cloneable*/ = /** @class */ (function () {\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    function BitMatrix(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    BitMatrix.parseFromBooleanArray = function (image) {\n        var height = image.length;\n        var width = image[0].length;\n        var bits = new BitMatrix(width, height);\n        for (var i = 0; i < height; i++) {\n            var imageI = image[i];\n            for (var 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    BitMatrix.parseFromString = function (stringRepresentation, setString, unsetString) {\n        if (stringRepresentation === null) {\n            throw new IllegalArgumentException('stringRepresentation cannot be null');\n        }\n        var bits = new Array(stringRepresentation.length);\n        var bitsPos = 0;\n        var rowStartPos = 0;\n        var rowLength = -1;\n        var nRows = 0;\n        var 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        var matrix = new BitMatrix(rowLength, nRows);\n        for (var 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    BitMatrix.prototype.get = function (x /*int*/, y /*int*/) {\n        var 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    BitMatrix.prototype.set = function (x /*int*/, y /*int*/) {\n        var offset = y * this.rowSize + Math.floor(x / 32);\n        this.bits[offset] |= (1 << (x & 0x1f)) & 0xFFFFFFFF;\n    };\n    BitMatrix.prototype.unset = function (x /*int*/, y /*int*/) {\n        var 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    BitMatrix.prototype.flip = function (x /*int*/, y /*int*/) {\n        var 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    BitMatrix.prototype.xor = function (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        var rowArray = new BitArray(Math.floor(this.width / 32) + 1);\n        var rowSize = this.rowSize;\n        var bits = this.bits;\n        for (var y = 0, height = this.height; y < height; y++) {\n            var offset = y * rowSize;\n            var row = mask.getRow(y, rowArray).getBitArray();\n            for (var x = 0; x < rowSize; x++) {\n                bits[offset + x] ^= row[x];\n            }\n        }\n    };\n    /**\n     * Clears all bits (sets to false).\n     */\n    BitMatrix.prototype.clear = function () {\n        var bits = this.bits;\n        var max = bits.length;\n        for (var 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    BitMatrix.prototype.setRegion = function (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        var right = left + width;\n        var bottom = top + height;\n        if (bottom > this.height || right > this.width) {\n            throw new IllegalArgumentException('The region must fit inside the matrix');\n        }\n        var rowSize = this.rowSize;\n        var bits = this.bits;\n        for (var y = top; y < bottom; y++) {\n            var offset = y * rowSize;\n            for (var 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    BitMatrix.prototype.getRow = function (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        var rowSize = this.rowSize;\n        var bits = this.bits;\n        var offset = y * rowSize;\n        for (var 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    BitMatrix.prototype.setRow = function (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    BitMatrix.prototype.rotate180 = function () {\n        var width = this.getWidth();\n        var height = this.getHeight();\n        var topRow = new BitArray(width);\n        var bottomRow = new BitArray(width);\n        for (var i = 0, length_1 = Math.floor((height + 1) / 2); i < length_1; 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    BitMatrix.prototype.getEnclosingRectangle = function () {\n        var width = this.width;\n        var height = this.height;\n        var rowSize = this.rowSize;\n        var bits = this.bits;\n        var left = width;\n        var top = height;\n        var right = -1;\n        var bottom = -1;\n        for (var y = 0; y < height; y++) {\n            for (var x32 = 0; x32 < rowSize; x32++) {\n                var 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                        var 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                        var 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    BitMatrix.prototype.getTopLeftOnBit = function () {\n        var rowSize = this.rowSize;\n        var bits = this.bits;\n        var bitsOffset = 0;\n        while (bitsOffset < bits.length && bits[bitsOffset] === 0) {\n            bitsOffset++;\n        }\n        if (bitsOffset === bits.length) {\n            return null;\n        }\n        var y = bitsOffset / rowSize;\n        var x = (bitsOffset % rowSize) * 32;\n        var theBits = bits[bitsOffset];\n        var bit = 0;\n        while (((theBits << (31 - bit)) & 0xFFFFFFFF) === 0) {\n            bit++;\n        }\n        x += bit;\n        return Int32Array.from([x, y]);\n    };\n    BitMatrix.prototype.getBottomRightOnBit = function () {\n        var rowSize = this.rowSize;\n        var bits = this.bits;\n        var bitsOffset = bits.length - 1;\n        while (bitsOffset >= 0 && bits[bitsOffset] === 0) {\n            bitsOffset--;\n        }\n        if (bitsOffset < 0) {\n            return null;\n        }\n        var y = Math.floor(bitsOffset / rowSize);\n        var x = Math.floor(bitsOffset % rowSize) * 32;\n        var theBits = bits[bitsOffset];\n        var 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    BitMatrix.prototype.getWidth = function () {\n        return this.width;\n    };\n    /**\n     * @return The height of the matrix\n     */\n    BitMatrix.prototype.getHeight = function () {\n        return this.height;\n    };\n    /**\n     * @return The row size of the matrix\n     */\n    BitMatrix.prototype.getRowSize = function () {\n        return this.rowSize;\n    };\n    /*@Override*/\n    BitMatrix.prototype.equals = function (o) {\n        if (!(o instanceof BitMatrix)) {\n            return false;\n        }\n        var 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    BitMatrix.prototype.hashCode = function () {\n        var 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    BitMatrix.prototype.toString = function (setString, unsetString, lineSeparator) {\n        if (setString === void 0) { setString = 'X '; }\n        if (unsetString === void 0) { unsetString = '  '; }\n        if (lineSeparator === void 0) { lineSeparator = '\\n'; }\n        return this.buildToString(setString, unsetString, lineSeparator);\n    };\n    BitMatrix.prototype.buildToString = function (setString, unsetString, lineSeparator) {\n        var result = new StringBuilder();\n        // result.append(lineSeparator);\n        for (var y = 0, height = this.height; y < height; y++) {\n            for (var 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    BitMatrix.prototype.clone = function () {\n        return new BitMatrix(this.width, this.height, this.rowSize, this.bits.slice());\n    };\n    return BitMatrix;\n}());\nexport default BitMatrix;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar NotFoundException = /** @class */ (function (_super) {\n    __extends(NotFoundException, _super);\n    function NotFoundException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    NotFoundException.getNotFoundInstance = function () {\n        return new NotFoundException();\n    };\n    NotFoundException.kind = 'NotFoundException';\n    return NotFoundException;\n}(Exception));\nexport default NotFoundException;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.common {*/\nimport Binarizer from '../Binarizer';\nimport BitArray from './BitArray';\nimport BitMatrix from './BitMatrix';\nimport NotFoundException from '../NotFoundException';\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 */\nvar GlobalHistogramBinarizer = /** @class */ (function (_super) {\n    __extends(GlobalHistogramBinarizer, _super);\n    function GlobalHistogramBinarizer(source) {\n        var _this = _super.call(this, source) || this;\n        _this.luminances = GlobalHistogramBinarizer.EMPTY;\n        _this.buckets = new Int32Array(GlobalHistogramBinarizer.LUMINANCE_BUCKETS);\n        return _this;\n    }\n    // Applies simple sharpening to the row data to improve performance of the 1D Readers.\n    /*@Override*/\n    GlobalHistogramBinarizer.prototype.getBlackRow = function (y /*int*/, row) {\n        var source = this.getLuminanceSource();\n        var 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        var localLuminances = source.getRow(y, this.luminances);\n        var localBuckets = this.buckets;\n        for (var x = 0; x < width; x++) {\n            localBuckets[(localLuminances[x] & 0xff) >> GlobalHistogramBinarizer.LUMINANCE_SHIFT]++;\n        }\n        var blackPoint = GlobalHistogramBinarizer.estimateBlackPoint(localBuckets);\n        if (width < 3) {\n            // Special case for very small images\n            for (var x = 0; x < width; x++) {\n                if ((localLuminances[x] & 0xff) < blackPoint) {\n                    row.set(x);\n                }\n            }\n        }\n        else {\n            var left = localLuminances[0] & 0xff;\n            var center = localLuminances[1] & 0xff;\n            for (var x = 1; x < width - 1; x++) {\n                var 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    GlobalHistogramBinarizer.prototype.getBlackMatrix = function () {\n        var source = this.getLuminanceSource();\n        var width = source.getWidth();\n        var height = source.getHeight();\n        var 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        var localBuckets = this.buckets;\n        for (var y = 1; y < 5; y++) {\n            var row = Math.floor((height * y) / 5);\n            var localLuminances_1 = source.getRow(row, this.luminances);\n            var right = Math.floor((width * 4) / 5);\n            for (var x = Math.floor(width / 5); x < right; x++) {\n                var pixel = localLuminances_1[x] & 0xff;\n                localBuckets[pixel >> GlobalHistogramBinarizer.LUMINANCE_SHIFT]++;\n            }\n        }\n        var 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        var localLuminances = source.getMatrix();\n        for (var y = 0; y < height; y++) {\n            var offset = y * width;\n            for (var x = 0; x < width; x++) {\n                var pixel = localLuminances[offset + x] & 0xff;\n                if (pixel < blackPoint) {\n                    matrix.set(x, y);\n                }\n            }\n        }\n        return matrix;\n    };\n    /*@Override*/\n    GlobalHistogramBinarizer.prototype.createBinarizer = function (source) {\n        return new GlobalHistogramBinarizer(source);\n    };\n    GlobalHistogramBinarizer.prototype.initArrays = function (luminanceSize /*int*/) {\n        if (this.luminances.length < luminanceSize) {\n            this.luminances = new Uint8ClampedArray(luminanceSize);\n        }\n        var buckets = this.buckets;\n        for (var x = 0; x < GlobalHistogramBinarizer.LUMINANCE_BUCKETS; x++) {\n            buckets[x] = 0;\n        }\n    };\n    GlobalHistogramBinarizer.estimateBlackPoint = function (buckets) {\n        // Find the tallest peak in the histogram.\n        var numBuckets = buckets.length;\n        var maxBucketCount = 0;\n        var firstPeak = 0;\n        var firstPeakSize = 0;\n        for (var 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        var secondPeak = 0;\n        var secondPeakScore = 0;\n        for (var x = 0; x < numBuckets; x++) {\n            var distanceToBiggest = x - firstPeak;\n            // Encourage more distant second peaks by multiplying by square of distance.\n            var 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            var 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        var bestValley = secondPeak - 1;\n        var bestValleyScore = -1;\n        for (var x = secondPeak - 1; x > firstPeak; x--) {\n            var fromFirst = x - firstPeak;\n            var 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    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    return GlobalHistogramBinarizer;\n}(Binarizer));\nexport default GlobalHistogramBinarizer;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport GlobalHistogramBinarizer from './GlobalHistogramBinarizer';\nimport BitMatrix from './BitMatrix';\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 */\nvar HybridBinarizer = /** @class */ (function (_super) {\n    __extends(HybridBinarizer, _super);\n    function HybridBinarizer(source) {\n        var _this = _super.call(this, source) || this;\n        _this.matrix = null;\n        return _this;\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    HybridBinarizer.prototype.getBlackMatrix = function () {\n        if (this.matrix !== null) {\n            return this.matrix;\n        }\n        var source = this.getLuminanceSource();\n        var width = source.getWidth();\n        var height = source.getHeight();\n        if (width >= HybridBinarizer.MINIMUM_DIMENSION && height >= HybridBinarizer.MINIMUM_DIMENSION) {\n            var luminances = source.getMatrix();\n            var subWidth = width >> HybridBinarizer.BLOCK_SIZE_POWER;\n            if ((width & HybridBinarizer.BLOCK_SIZE_MASK) !== 0) {\n                subWidth++;\n            }\n            var subHeight = height >> HybridBinarizer.BLOCK_SIZE_POWER;\n            if ((height & HybridBinarizer.BLOCK_SIZE_MASK) !== 0) {\n                subHeight++;\n            }\n            var blackPoints = HybridBinarizer.calculateBlackPoints(luminances, subWidth, subHeight, width, height);\n            var 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.prototype.getBlackMatrix.call(this);\n        }\n        return this.matrix;\n    };\n    /*@Override*/\n    HybridBinarizer.prototype.createBinarizer = function (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    HybridBinarizer.calculateThresholdForBlock = function (luminances, subWidth /*int*/, subHeight /*int*/, width /*int*/, height /*int*/, blackPoints, matrix) {\n        var maxYOffset = height - HybridBinarizer.BLOCK_SIZE;\n        var maxXOffset = width - HybridBinarizer.BLOCK_SIZE;\n        for (var y = 0; y < subHeight; y++) {\n            var yoffset = y << HybridBinarizer.BLOCK_SIZE_POWER;\n            if (yoffset > maxYOffset) {\n                yoffset = maxYOffset;\n            }\n            var top_1 = HybridBinarizer.cap(y, 2, subHeight - 3);\n            for (var x = 0; x < subWidth; x++) {\n                var xoffset = x << HybridBinarizer.BLOCK_SIZE_POWER;\n                if (xoffset > maxXOffset) {\n                    xoffset = maxXOffset;\n                }\n                var left = HybridBinarizer.cap(x, 2, subWidth - 3);\n                var sum = 0;\n                for (var z = -2; z <= 2; z++) {\n                    var blackRow = blackPoints[top_1 + z];\n                    sum += blackRow[left - 2] + blackRow[left - 1] + blackRow[left] + blackRow[left + 1] + blackRow[left + 2];\n                }\n                var average = sum / 25;\n                HybridBinarizer.thresholdBlock(luminances, xoffset, yoffset, average, width, matrix);\n            }\n        }\n    };\n    HybridBinarizer.cap = function (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    HybridBinarizer.thresholdBlock = function (luminances, xoffset /*int*/, yoffset /*int*/, threshold /*int*/, stride /*int*/, matrix) {\n        for (var y = 0, offset = yoffset * stride + xoffset; y < HybridBinarizer.BLOCK_SIZE; y++, offset += stride) {\n            for (var 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    HybridBinarizer.calculateBlackPoints = function (luminances, subWidth /*int*/, subHeight /*int*/, width /*int*/, height /*int*/) {\n        var maxYOffset = height - HybridBinarizer.BLOCK_SIZE;\n        var maxXOffset = width - HybridBinarizer.BLOCK_SIZE;\n        // tslint:disable-next-line:whitespace\n        var blackPoints = new Array(subHeight); // subWidth\n        for (var y = 0; y < subHeight; y++) {\n            blackPoints[y] = new Int32Array(subWidth);\n            var yoffset = y << HybridBinarizer.BLOCK_SIZE_POWER;\n            if (yoffset > maxYOffset) {\n                yoffset = maxYOffset;\n            }\n            for (var x = 0; x < subWidth; x++) {\n                var xoffset = x << HybridBinarizer.BLOCK_SIZE_POWER;\n                if (xoffset > maxXOffset) {\n                    xoffset = maxXOffset;\n                }\n                var sum = 0;\n                var min = 0xFF;\n                var max = 0;\n                for (var yy = 0, offset = yoffset * width + xoffset; yy < HybridBinarizer.BLOCK_SIZE; yy++, offset += width) {\n                    for (var xx = 0; xx < HybridBinarizer.BLOCK_SIZE; xx++) {\n                        var 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 (var 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                var 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                        var 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    // 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    return HybridBinarizer;\n}(GlobalHistogramBinarizer));\nexport default HybridBinarizer;\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 */\nimport StringBuilder from './util/StringBuilder';\nimport UnsupportedOperationException from './UnsupportedOperationException';\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 */\nvar LuminanceSource = /** @class */ (function () {\n    function LuminanceSource(width /*int*/, height /*int*/) {\n        this.width = width;\n        this.height = height;\n    }\n    /**\n     * @return The width of the bitmap.\n     */\n    LuminanceSource.prototype.getWidth = function () {\n        return this.width;\n    };\n    /**\n     * @return The height of the bitmap.\n     */\n    LuminanceSource.prototype.getHeight = function () {\n        return this.height;\n    };\n    /**\n     * @return Whether this subclass supports cropping.\n     */\n    LuminanceSource.prototype.isCropSupported = function () {\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    LuminanceSource.prototype.crop = function (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    LuminanceSource.prototype.isRotateSupported = function () {\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    LuminanceSource.prototype.rotateCounterClockwise = function () {\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    LuminanceSource.prototype.rotateCounterClockwise45 = function () {\n        throw new UnsupportedOperationException('This luminance source does not support rotation by 45 degrees.');\n    };\n    /*@Override*/\n    LuminanceSource.prototype.toString = function () {\n        var row = new Uint8ClampedArray(this.width);\n        var result = new StringBuilder();\n        for (var y = 0; y < this.height; y++) {\n            var sourceRow = this.getRow(y, row);\n            for (var x = 0; x < this.width; x++) {\n                var luminance = sourceRow[x] & 0xFF;\n                var c = void 0;\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    return LuminanceSource;\n}());\nexport default LuminanceSource;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport LuminanceSource from './LuminanceSource';\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 */\nvar InvertedLuminanceSource = /** @class */ (function (_super) {\n    __extends(InvertedLuminanceSource, _super);\n    function InvertedLuminanceSource(delegate) {\n        var _this = _super.call(this, delegate.getWidth(), delegate.getHeight()) || this;\n        _this.delegate = delegate;\n        return _this;\n    }\n    /*@Override*/\n    InvertedLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n        var sourceRow = this.delegate.getRow(y, row);\n        var width = this.getWidth();\n        for (var i = 0; i < width; i++) {\n            sourceRow[i] = /*(byte)*/ (255 - (sourceRow[i] & 0xFF));\n        }\n        return sourceRow;\n    };\n    /*@Override*/\n    InvertedLuminanceSource.prototype.getMatrix = function () {\n        var matrix = this.delegate.getMatrix();\n        var length = this.getWidth() * this.getHeight();\n        var invertedMatrix = new Uint8ClampedArray(length);\n        for (var i = 0; i < length; i++) {\n            invertedMatrix[i] = /*(byte)*/ (255 - (matrix[i] & 0xFF));\n        }\n        return invertedMatrix;\n    };\n    /*@Override*/\n    InvertedLuminanceSource.prototype.isCropSupported = function () {\n        return this.delegate.isCropSupported();\n    };\n    /*@Override*/\n    InvertedLuminanceSource.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n        return new InvertedLuminanceSource(this.delegate.crop(left, top, width, height));\n    };\n    /*@Override*/\n    InvertedLuminanceSource.prototype.isRotateSupported = function () {\n        return this.delegate.isRotateSupported();\n    };\n    /**\n     * @return original delegate {@link LuminanceSource} since invert undoes itself\n     */\n    /*@Override*/\n    InvertedLuminanceSource.prototype.invert = function () {\n        return this.delegate;\n    };\n    /*@Override*/\n    InvertedLuminanceSource.prototype.rotateCounterClockwise = function () {\n        return new InvertedLuminanceSource(this.delegate.rotateCounterClockwise());\n    };\n    /*@Override*/\n    InvertedLuminanceSource.prototype.rotateCounterClockwise45 = function () {\n        return new InvertedLuminanceSource(this.delegate.rotateCounterClockwise45());\n    };\n    return InvertedLuminanceSource;\n}(LuminanceSource));\nexport default InvertedLuminanceSource;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport InvertedLuminanceSource from '../core/InvertedLuminanceSource';\nimport LuminanceSource from '../core/LuminanceSource';\nimport IllegalArgumentException from '../core/IllegalArgumentException';\n/**\n * @deprecated Moving to @zxing/browser\n */\nvar HTMLCanvasElementLuminanceSource = /** @class */ (function (_super) {\n    __extends(HTMLCanvasElementLuminanceSource, _super);\n    function HTMLCanvasElementLuminanceSource(canvas) {\n        var _this = _super.call(this, canvas.width, canvas.height) || this;\n        _this.canvas = canvas;\n        _this.tempCanvasElement = null;\n        _this.buffer = HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData(canvas);\n        return _this;\n    }\n    HTMLCanvasElementLuminanceSource.makeBufferFromCanvasImageData = function (canvas) {\n        var imageData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);\n        return HTMLCanvasElementLuminanceSource.toGrayscaleBuffer(imageData.data, canvas.width, canvas.height);\n    };\n    HTMLCanvasElementLuminanceSource.toGrayscaleBuffer = function (imageBuffer, width, height) {\n        var grayscaleBuffer = new Uint8ClampedArray(width * height);\n        HTMLCanvasElementLuminanceSource.FRAME_INDEX = !HTMLCanvasElementLuminanceSource.FRAME_INDEX;\n        if (HTMLCanvasElementLuminanceSource.FRAME_INDEX) {\n            for (var i = 0, j = 0, length_1 = imageBuffer.length; i < length_1; i += 4, j++) {\n                var gray = void 0;\n                var 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                    var pixelR = imageBuffer[i];\n                    var pixelG = imageBuffer[i + 1];\n                    var 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        }\n        else {\n            for (var i = 0, j = 0, length_2 = imageBuffer.length; i < length_2; i += 4, j++) {\n                var gray = void 0;\n                var 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                    var pixelR = imageBuffer[i];\n                    var pixelG = imageBuffer[i + 1];\n                    var 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] = 0xFF - gray;\n            }\n        }\n        return grayscaleBuffer;\n    };\n    HTMLCanvasElementLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n        if (y < 0 || y >= this.getHeight()) {\n            throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n        }\n        var width = this.getWidth();\n        var 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    HTMLCanvasElementLuminanceSource.prototype.getMatrix = function () {\n        return this.buffer;\n    };\n    HTMLCanvasElementLuminanceSource.prototype.isCropSupported = function () {\n        return true;\n    };\n    HTMLCanvasElementLuminanceSource.prototype.crop = function (left /*int*/, top /*int*/, width /*int*/, height /*int*/) {\n        _super.prototype.crop.call(this, 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    HTMLCanvasElementLuminanceSource.prototype.isRotateSupported = function () {\n        return true;\n    };\n    HTMLCanvasElementLuminanceSource.prototype.rotateCounterClockwise = function () {\n        this.rotate(-90);\n        return this;\n    };\n    HTMLCanvasElementLuminanceSource.prototype.rotateCounterClockwise45 = function () {\n        this.rotate(-45);\n        return this;\n    };\n    HTMLCanvasElementLuminanceSource.prototype.getTempCanvasElement = function () {\n        if (null === this.tempCanvasElement) {\n            var 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    HTMLCanvasElementLuminanceSource.prototype.rotate = function (angle) {\n        var tempCanvasElement = this.getTempCanvasElement();\n        var tempContext = tempCanvasElement.getContext('2d');\n        var angleRadians = angle * HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS;\n        // Calculate and set new dimensions for temp canvas\n        var width = this.canvas.width;\n        var height = this.canvas.height;\n        var newWidth = Math.ceil(Math.abs(Math.cos(angleRadians)) * width + Math.abs(Math.sin(angleRadians)) * height);\n        var 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    HTMLCanvasElementLuminanceSource.prototype.invert = function () {\n        return new InvertedLuminanceSource(this);\n    };\n    HTMLCanvasElementLuminanceSource.DEGREE_TO_RADIANS = Math.PI / 180;\n    HTMLCanvasElementLuminanceSource.FRAME_INDEX = true;\n    return HTMLCanvasElementLuminanceSource;\n}(LuminanceSource));\nexport { HTMLCanvasElementLuminanceSource };\n", "/**\n * @deprecated Moving to @zxing/browser\n *\n * Video input device metadata containing the id and label of the device if available.\n */\nvar VideoInputDevice = /** @class */ (function () {\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    function VideoInputDevice(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    VideoInputDevice.prototype.toJSON = function () {\n        return {\n            kind: this.kind,\n            groupId: this.groupId,\n            deviceId: this.deviceId,\n            label: this.label,\n        };\n    };\n    return VideoInputDevice;\n}());\nexport { VideoInputDevice };\n", "var __awaiter = (this && this.__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};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport ArgumentException from '../core/ArgumentException';\nimport BinaryBitmap from '../core/BinaryBitmap';\nimport ChecksumException from '../core/ChecksumException';\nimport HybridBinarizer from '../core/common/HybridBinarizer';\nimport FormatException from '../core/FormatException';\nimport NotFoundException from '../core/NotFoundException';\nimport { HTMLCanvasElementLuminanceSource } from './HTMLCanvasElementLuminanceSource';\nimport { VideoInputDevice } from './VideoInputDevice';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * Base class for browser code reader.\n */\nvar BrowserCodeReader = /** @class */ (function () {\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    function BrowserCodeReader(reader, timeBetweenScansMillis, _hints) {\n        if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\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    Object.defineProperty(BrowserCodeReader.prototype, \"hasNavigator\", {\n        /**\n         * If navigator is present.\n         */\n        get: function () {\n            return typeof navigator !== 'undefined';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BrowserCodeReader.prototype, \"isMediaDevicesSuported\", {\n        /**\n         * If mediaDevices under navigator is supported.\n         */\n        get: function () {\n            return this.hasNavigator && !!navigator.mediaDevices;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BrowserCodeReader.prototype, \"canEnumerateDevices\", {\n        /**\n         * If enumerateDevices under navigator is supported.\n         */\n        get: function () {\n            return !!(this.isMediaDevicesSuported && navigator.mediaDevices.enumerateDevices);\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BrowserCodeReader.prototype, \"timeBetweenDecodingAttempts\", {\n        /** Time between two decoding tries in milli seconds. */\n        get: function () {\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: function (millis) {\n            this._timeBetweenDecodingAttempts = millis < 0 ? 0 : millis;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(BrowserCodeReader.prototype, \"hints\", {\n        /**\n         * Sets the hints.\n         */\n        get: function () {\n            return this._hints;\n        },\n        /**\n         * Sets the hints.\n         */\n        set: function (hints) {\n            this._hints = hints || null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Lists all the available video input devices.\n     */\n    BrowserCodeReader.prototype.listVideoInputDevices = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var devices, videoDevices, devices_1, devices_1_1, device, kind, deviceId, label, groupId, videoDevice;\n            var e_1, _a;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\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                        return [4 /*yield*/, navigator.mediaDevices.enumerateDevices()];\n                    case 1:\n                        devices = _b.sent();\n                        videoDevices = [];\n                        try {\n                            for (devices_1 = __values(devices), devices_1_1 = devices_1.next(); !devices_1_1.done; devices_1_1 = devices_1.next()) {\n                                device = devices_1_1.value;\n                                kind = device.kind === 'video' ? 'videoinput' : device.kind;\n                                if (kind !== 'videoinput') {\n                                    continue;\n                                }\n                                deviceId = device.deviceId || device.id;\n                                label = device.label || \"Video device \" + (videoDevices.length + 1);\n                                groupId = device.groupId;\n                                videoDevice = { deviceId: deviceId, label: label, kind: kind, groupId: groupId };\n                                videoDevices.push(videoDevice);\n                            }\n                        }\n                        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                        finally {\n                            try {\n                                if (devices_1_1 && !devices_1_1.done && (_a = devices_1.return)) _a.call(devices_1);\n                            }\n                            finally { if (e_1) throw e_1.error; }\n                        }\n                        return [2 /*return*/, videoDevices];\n                }\n            });\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    BrowserCodeReader.prototype.getVideoInputDevices = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var devices;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.listVideoInputDevices()];\n                    case 1:\n                        devices = _a.sent();\n                        return [2 /*return*/, devices.map(function (d) { return new VideoInputDevice(d.deviceId, d.label); })];\n                }\n            });\n        });\n    };\n    /**\n     * Let's you find a device using it's Id.\n     */\n    BrowserCodeReader.prototype.findDeviceById = function (deviceId) {\n        return __awaiter(this, void 0, void 0, function () {\n            var devices;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.listVideoInputDevices()];\n                    case 1:\n                        devices = _a.sent();\n                        if (!devices) {\n                            return [2 /*return*/, null];\n                        }\n                        return [2 /*return*/, devices.find(function (x) { return x.deviceId === deviceId; })];\n                }\n            });\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    BrowserCodeReader.prototype.decodeFromInputVideoDevice = function (deviceId, videoSource) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.decodeOnceFromVideoDevice(deviceId, videoSource)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\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    BrowserCodeReader.prototype.decodeOnceFromVideoDevice = function (deviceId, videoSource) {\n        return __awaiter(this, void 0, void 0, function () {\n            var videoConstraints, constraints;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        this.reset();\n                        if (!deviceId) {\n                            videoConstraints = { facingMode: 'environment' };\n                        }\n                        else {\n                            videoConstraints = { deviceId: { exact: deviceId } };\n                        }\n                        constraints = { video: videoConstraints };\n                        return [4 /*yield*/, this.decodeOnceFromConstraints(constraints, videoSource)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\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    BrowserCodeReader.prototype.decodeOnceFromConstraints = function (constraints, videoSource) {\n        return __awaiter(this, void 0, void 0, function () {\n            var stream;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];\n                    case 1:\n                        stream = _a.sent();\n                        return [4 /*yield*/, this.decodeOnceFromStream(stream, videoSource)];\n                    case 2: return [2 /*return*/, _a.sent()];\n                }\n            });\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    BrowserCodeReader.prototype.decodeOnceFromStream = function (stream, videoSource) {\n        return __awaiter(this, void 0, void 0, function () {\n            var video, result;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        this.reset();\n                        return [4 /*yield*/, this.attachStreamToVideo(stream, videoSource)];\n                    case 1:\n                        video = _a.sent();\n                        return [4 /*yield*/, this.decodeOnce(video)];\n                    case 2:\n                        result = _a.sent();\n                        return [2 /*return*/, result];\n                }\n            });\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    BrowserCodeReader.prototype.decodeFromInputVideoDeviceContinuously = function (deviceId, videoSource, callbackFn) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.decodeFromVideoDevice(deviceId, videoSource, callbackFn)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\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    BrowserCodeReader.prototype.decodeFromVideoDevice = function (deviceId, videoSource, callbackFn) {\n        return __awaiter(this, void 0, void 0, function () {\n            var videoConstraints, constraints;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        if (!deviceId) {\n                            videoConstraints = { facingMode: 'environment' };\n                        }\n                        else {\n                            videoConstraints = { deviceId: { exact: deviceId } };\n                        }\n                        constraints = { video: videoConstraints };\n                        return [4 /*yield*/, this.decodeFromConstraints(constraints, videoSource, callbackFn)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                }\n            });\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    BrowserCodeReader.prototype.decodeFromConstraints = function (constraints, videoSource, callbackFn) {\n        return __awaiter(this, void 0, void 0, function () {\n            var stream;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, navigator.mediaDevices.getUserMedia(constraints)];\n                    case 1:\n                        stream = _a.sent();\n                        return [4 /*yield*/, this.decodeFromStream(stream, videoSource, callbackFn)];\n                    case 2: return [2 /*return*/, _a.sent()];\n                }\n            });\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    BrowserCodeReader.prototype.decodeFromStream = function (stream, videoSource, callbackFn) {\n        return __awaiter(this, void 0, void 0, function () {\n            var video;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        this.reset();\n                        return [4 /*yield*/, this.attachStreamToVideo(stream, videoSource)];\n                    case 1:\n                        video = _a.sent();\n                        return [4 /*yield*/, this.decodeContinuously(video, callbackFn)];\n                    case 2: return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    /**\n     * Breaks the decoding loop.\n     */\n    BrowserCodeReader.prototype.stopAsyncDecode = function () {\n        this._stopAsyncDecode = true;\n    };\n    /**\n     * Breaks the decoding loop.\n     */\n    BrowserCodeReader.prototype.stopContinuousDecode = function () {\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    BrowserCodeReader.prototype.attachStreamToVideo = function (stream, videoSource) {\n        return __awaiter(this, void 0, void 0, function () {\n            var videoElement;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        videoElement = this.prepareVideoElement(videoSource);\n                        this.addVideoSource(videoElement, stream);\n                        this.videoElement = videoElement;\n                        this.stream = stream;\n                        return [4 /*yield*/, this.playVideoOnLoadAsync(videoElement)];\n                    case 1:\n                        _a.sent();\n                        return [2 /*return*/, videoElement];\n                }\n            });\n        });\n    };\n    /**\n     *\n     * @param videoElement\n     */\n    BrowserCodeReader.prototype.playVideoOnLoadAsync = function (videoElement) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            return _this.playVideoOnLoad(videoElement, function () { return resolve(); });\n        });\n    };\n    /**\n     * Binds listeners and callbacks to the videoElement.\n     *\n     * @param element\n     * @param callbackFn\n     */\n    BrowserCodeReader.prototype.playVideoOnLoad = function (element, callbackFn) {\n        var _this = this;\n        this.videoEndedListener = function () { return _this.stopStreams(); };\n        this.videoCanPlayListener = function () { return _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    BrowserCodeReader.prototype.isVideoPlaying = function (video) {\n        return (video.currentTime > 0 &&\n            !video.paused &&\n            !video.ended &&\n            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    BrowserCodeReader.prototype.tryPlayVideo = function (videoElement) {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        if (this.isVideoPlaying(videoElement)) {\n                            console.warn('Trying to play video that is already playing.');\n                            return [2 /*return*/];\n                        }\n                        _b.label = 1;\n                    case 1:\n                        _b.trys.push([1, 3, , 4]);\n                        return [4 /*yield*/, videoElement.play()];\n                    case 2:\n                        _b.sent();\n                        return [3 /*break*/, 4];\n                    case 3:\n                        _a = _b.sent();\n                        console.warn('It was not possible to play the video.');\n                        return [3 /*break*/, 4];\n                    case 4: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    /**\n     * Searches and validates a media element.\n     */\n    BrowserCodeReader.prototype.getMediaElement = function (mediaElementId, type) {\n        var 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    BrowserCodeReader.prototype.decodeFromImage = function (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    BrowserCodeReader.prototype.decodeFromVideo = function (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    BrowserCodeReader.prototype.decodeFromVideoContinuously = function (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    BrowserCodeReader.prototype.decodeFromImageElement = function (source) {\n        if (!source) {\n            throw new ArgumentException('An image element must be provided.');\n        }\n        this.reset();\n        var element = this.prepareImageElement(source);\n        this.imageElement = element;\n        var 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    BrowserCodeReader.prototype.decodeFromVideoElement = function (source) {\n        var element = this._decodeFromVideoElementSetup(source);\n        return this._decodeOnLoadVideo(element);\n    };\n    /**\n     * Decodes something from an image HTML element.\n     */\n    BrowserCodeReader.prototype.decodeFromVideoElementContinuously = function (source, callbackFn) {\n        var 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    BrowserCodeReader.prototype._decodeFromVideoElementSetup = function (source) {\n        if (!source) {\n            throw new ArgumentException('A video element must be provided.');\n        }\n        this.reset();\n        var 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    BrowserCodeReader.prototype.decodeFromImageUrl = function (url) {\n        if (!url) {\n            throw new ArgumentException('An URL must be provided.');\n        }\n        this.reset();\n        var element = this.prepareImageElement();\n        this.imageElement = element;\n        var decodeTask = this._decodeOnLoadImage(element);\n        element.src = url;\n        return decodeTask;\n    };\n    /**\n     * Decodes an image from a URL.\n     */\n    BrowserCodeReader.prototype.decodeFromVideoUrl = function (url) {\n        if (!url) {\n            throw new ArgumentException('An URL must be provided.');\n        }\n        this.reset();\n        // creates a new element\n        var element = this.prepareVideoElement();\n        var 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    BrowserCodeReader.prototype.decodeFromVideoUrlContinuously = function (url, callbackFn) {\n        if (!url) {\n            throw new ArgumentException('An URL must be provided.');\n        }\n        this.reset();\n        // creates a new element\n        var element = this.prepareVideoElement();\n        var decodeTask = this.decodeFromVideoElementContinuously(element, callbackFn);\n        element.src = url;\n        return decodeTask;\n    };\n    BrowserCodeReader.prototype._decodeOnLoadImage = function (element) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            _this.imageLoadedListener = function () {\n                return _this.decodeOnce(element, false, true).then(resolve, reject);\n            };\n            element.addEventListener('load', _this.imageLoadedListener);\n        });\n    };\n    BrowserCodeReader.prototype._decodeOnLoadVideo = function (videoElement) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: \n                    // plays the video\n                    return [4 /*yield*/, this.playVideoOnLoadAsync(videoElement)];\n                    case 1:\n                        // plays the video\n                        _a.sent();\n                        return [4 /*yield*/, this.decodeOnce(videoElement)];\n                    case 2: \n                    // starts decoding after played the video\n                    return [2 /*return*/, _a.sent()];\n                }\n            });\n        });\n    };\n    BrowserCodeReader.prototype._decodeOnLoadVideoContinuously = function (videoElement, callbackFn) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: \n                    // plays the video\n                    return [4 /*yield*/, this.playVideoOnLoadAsync(videoElement)];\n                    case 1:\n                        // plays the video\n                        _a.sent();\n                        // starts decoding after played the video\n                        this.decodeContinuously(videoElement, callbackFn);\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    BrowserCodeReader.prototype.isImageLoaded = function (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    BrowserCodeReader.prototype.prepareImageElement = function (imageSource) {\n        var 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    BrowserCodeReader.prototype.prepareVideoElement = function (videoSource) {\n        var 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    BrowserCodeReader.prototype.decodeOnce = function (element, retryIfNotFound, retryIfChecksumOrFormatError) {\n        var _this = this;\n        if (retryIfNotFound === void 0) { retryIfNotFound = true; }\n        if (retryIfChecksumOrFormatError === void 0) { retryIfChecksumOrFormatError = true; }\n        this._stopAsyncDecode = false;\n        var loop = function (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                var result = _this.decode(element);\n                resolve(result);\n            }\n            catch (e) {\n                var ifNotFound = retryIfNotFound && e instanceof NotFoundException;\n                var isChecksumOrFormatError = e instanceof ChecksumException || e instanceof FormatException;\n                var 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(function (resolve, reject) { return loop(resolve, reject); });\n    };\n    /**\n     * Continuously decodes from video input.\n     */\n    BrowserCodeReader.prototype.decodeContinuously = function (element, callbackFn) {\n        var _this = this;\n        this._stopContinuousDecode = false;\n        var loop = function () {\n            if (_this._stopContinuousDecode) {\n                _this._stopContinuousDecode = undefined;\n                return;\n            }\n            try {\n                var result = _this.decode(element);\n                callbackFn(result, null);\n                setTimeout(loop, _this.timeBetweenScansMillis);\n            }\n            catch (e) {\n                callbackFn(null, e);\n                var isChecksumOrFormatError = e instanceof ChecksumException || e instanceof FormatException;\n                var 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    BrowserCodeReader.prototype.decode = function (element) {\n        // get binary bitmap for decode function\n        var binaryBitmap = this.createBinaryBitmap(element);\n        return this.decodeBitmap(binaryBitmap);\n    };\n    /**\n     * Creates a binaryBitmap based in some image source.\n     *\n     * @param mediaElement HTML element containing drawable image source.\n     */\n    BrowserCodeReader.prototype.createBinaryBitmap = function (mediaElement) {\n        var ctx = this.getCaptureCanvasContext(mediaElement);\n        if (mediaElement instanceof HTMLVideoElement) {\n            this.drawFrameOnCanvas(mediaElement);\n        }\n        else {\n            this.drawImageOnCanvas(mediaElement);\n        }\n        var canvas = this.getCaptureCanvas(mediaElement);\n        var luminanceSource = new HTMLCanvasElementLuminanceSource(canvas);\n        var hybridBinarizer = new HybridBinarizer(luminanceSource);\n        return new BinaryBitmap(hybridBinarizer);\n    };\n    /**\n     *\n     */\n    BrowserCodeReader.prototype.getCaptureCanvasContext = function (mediaElement) {\n        if (!this.captureCanvasContext) {\n            var elem = this.getCaptureCanvas(mediaElement);\n            var ctx = void 0;\n            try {\n                ctx = elem.getContext('2d', { willReadFrequently: true });\n            }\n            catch (e) {\n                ctx = elem.getContext('2d');\n            }\n            this.captureCanvasContext = ctx;\n        }\n        return this.captureCanvasContext;\n    };\n    /**\n     *\n     */\n    BrowserCodeReader.prototype.getCaptureCanvas = function (mediaElement) {\n        if (!this.captureCanvas) {\n            var elem = this.createCaptureCanvas(mediaElement);\n            this.captureCanvas = elem;\n        }\n        return this.captureCanvas;\n    };\n    /**\n     * Overwriting this allows you to manipulate the next frame in anyway you want before decode.\n     */\n    BrowserCodeReader.prototype.drawFrameOnCanvas = function (srcElement, dimensions, canvasElementContext) {\n        if (dimensions === void 0) { 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 === void 0) { canvasElementContext = this.captureCanvasContext; }\n        canvasElementContext.drawImage(srcElement, dimensions.sx, dimensions.sy, dimensions.sWidth, dimensions.sHeight, dimensions.dx, dimensions.dy, dimensions.dWidth, dimensions.dHeight);\n    };\n    /**\n     * Ovewriting this allows you to manipulate the snapshot image in anyway you want before decode.\n     */\n    BrowserCodeReader.prototype.drawImageOnCanvas = function (srcElement, dimensions, canvasElementContext) {\n        if (dimensions === void 0) { 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        if (canvasElementContext === void 0) { canvasElementContext = this.captureCanvasContext; }\n        canvasElementContext.drawImage(srcElement, dimensions.sx, dimensions.sy, dimensions.sWidth, dimensions.sHeight, dimensions.dx, dimensions.dy, dimensions.dWidth, dimensions.dHeight);\n    };\n    /**\n     * Call the encapsulated readers decode\n     */\n    BrowserCodeReader.prototype.decodeBitmap = function (binaryBitmap) {\n        return this.reader.decode(binaryBitmap, this._hints);\n    };\n    /**\n     * \uD83D\uDD8C Prepares the canvas for capture and scan frames.\n     */\n    BrowserCodeReader.prototype.createCaptureCanvas = function (mediaElement) {\n        if (typeof document === 'undefined') {\n            this._destroyCaptureCanvas();\n            return null;\n        }\n        var canvasElement = document.createElement('canvas');\n        var width;\n        var 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    BrowserCodeReader.prototype.stopStreams = function () {\n        if (this.stream) {\n            this.stream.getVideoTracks().forEach(function (t) { return 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    BrowserCodeReader.prototype.reset = function () {\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    BrowserCodeReader.prototype._destroyVideoElement = function () {\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    BrowserCodeReader.prototype._destroyImageElement = function () {\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    BrowserCodeReader.prototype._destroyCaptureCanvas = function () {\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    BrowserCodeReader.prototype.addVideoSource = function (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            // @ts-ignore\n            videoElement.src = URL.createObjectURL(stream);\n        }\n    };\n    /**\n     * Unbinds a HTML video src property.\n     *\n     * @param videoElement\n     */\n    BrowserCodeReader.prototype.cleanVideoSource = function (videoElement) {\n        try {\n            videoElement.srcObject = null;\n        }\n        catch (err) {\n            videoElement.src = '';\n        }\n        this.videoElement.removeAttribute('src');\n    };\n    return BrowserCodeReader;\n}());\nexport { BrowserCodeReader };\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 */\nimport System from './util/System';\n/**\n * <p>Encapsulates the result of decoding a barcode within an image.</p>\n *\n * @author Sean Owen\n */\nvar Result = /** @class */ (function () {\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    function Result(text, rawBytes, numBits, resultPoints, format, timestamp) {\n        if (numBits === void 0) { numBits = rawBytes == null ? 0 : 8 * rawBytes.length; }\n        if (timestamp === void 0) { 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    Result.prototype.getText = function () {\n        return this.text;\n    };\n    /**\n     * @return raw bytes encoded by the barcode, if applicable, otherwise {@code null}\n     */\n    Result.prototype.getRawBytes = function () {\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    Result.prototype.getNumBits = function () {\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    Result.prototype.getResultPoints = function () {\n        return this.resultPoints;\n    };\n    /**\n     * @return {@link BarcodeFormat} representing the format of the barcode that was decoded\n     */\n    Result.prototype.getBarcodeFormat = function () {\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    Result.prototype.getResultMetadata = function () {\n        return this.resultMetadata;\n    };\n    Result.prototype.putMetadata = function (type, value) {\n        if (this.resultMetadata === null) {\n            this.resultMetadata = new Map();\n        }\n        this.resultMetadata.set(type, value);\n    };\n    Result.prototype.putAllMetadata = function (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    Result.prototype.addResultPoints = function (newPoints) {\n        var oldPoints = this.resultPoints;\n        if (oldPoints === null) {\n            this.resultPoints = newPoints;\n        }\n        else if (newPoints !== null && newPoints.length > 0) {\n            var 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    Result.prototype.getTimestamp = function () {\n        return this.timestamp;\n    };\n    /*@Override*/\n    Result.prototype.toString = function () {\n        return this.text;\n    };\n    return Result;\n}());\nexport default Result;\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 */\nvar 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 = {}));\nexport default BarcodeFormat;\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/*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 */\nvar 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 = {}));\nexport default ResultMetadataType;\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 */\nvar DecoderResult = /** @class */ (function () {\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    function DecoderResult(rawBytes, text, byteSegments, ecLevel, structuredAppendSequenceNumber, structuredAppendParity) {\n        if (structuredAppendSequenceNumber === void 0) { structuredAppendSequenceNumber = -1; }\n        if (structuredAppendParity === void 0) { 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    DecoderResult.prototype.getRawBytes = function () {\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    DecoderResult.prototype.getNumBits = function () {\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    DecoderResult.prototype.setNumBits = function (numBits /*int*/) {\n        this.numBits = numBits;\n    };\n    /**\n     * @return text representation of the result\n     */\n    DecoderResult.prototype.getText = function () {\n        return this.text;\n    };\n    /**\n     * @return list of byte segments in the result, or {@code null} if not applicable\n     */\n    DecoderResult.prototype.getByteSegments = function () {\n        return this.byteSegments;\n    };\n    /**\n     * @return name of error correction level used, or {@code null} if not applicable\n     */\n    DecoderResult.prototype.getECLevel = function () {\n        return this.ecLevel;\n    };\n    /**\n     * @return number of errors corrected, or {@code null} if not applicable\n     */\n    DecoderResult.prototype.getErrorsCorrected = function () {\n        return this.errorsCorrected;\n    };\n    DecoderResult.prototype.setErrorsCorrected = function (errorsCorrected /*Integer*/) {\n        this.errorsCorrected = errorsCorrected;\n    };\n    /**\n     * @return number of erasures corrected, or {@code null} if not applicable\n     */\n    DecoderResult.prototype.getErasures = function () {\n        return this.erasures;\n    };\n    DecoderResult.prototype.setErasures = function (erasures /*Integer*/) {\n        this.erasures = erasures;\n    };\n    /**\n     * @return arbitrary additional metadata\n     */\n    DecoderResult.prototype.getOther = function () {\n        return this.other;\n    };\n    DecoderResult.prototype.setOther = function (other) {\n        this.other = other;\n    };\n    DecoderResult.prototype.hasStructuredAppend = function () {\n        return this.structuredAppendParity >= 0 && this.structuredAppendSequenceNumber >= 0;\n    };\n    DecoderResult.prototype.getStructuredAppendParity = function () {\n        return this.structuredAppendParity;\n    };\n    DecoderResult.prototype.getStructuredAppendSequenceNumber = function () {\n        return this.structuredAppendSequenceNumber;\n    };\n    return DecoderResult;\n}());\nexport default DecoderResult;\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 */\nimport IllegalArgumentException from '../../IllegalArgumentException';\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 */\nvar AbstractGenericGF = /** @class */ (function () {\n    function AbstractGenericGF() {\n    }\n    /**\n     * @return 2 to the power of a in GF(size)\n     */\n    AbstractGenericGF.prototype.exp = function (a) {\n        return this.expTable[a];\n    };\n    /**\n     * @return base 2 log of a in GF(size)\n     */\n    AbstractGenericGF.prototype.log = function (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    AbstractGenericGF.addOrSubtract = function (a /*int*/, b /*int*/) {\n        return a ^ b;\n    };\n    return AbstractGenericGF;\n}());\nexport default AbstractGenericGF;\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.reedsolomon {*/\nimport AbstractGenericGF from './AbstractGenericGF';\nimport System from '../../util/System';\nimport IllegalArgumentException from '../../IllegalArgumentException';\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 */\nvar GenericGFPoly = /** @class */ (function () {\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    function GenericGFPoly(field, coefficients) {\n        if (coefficients.length === 0) {\n            throw new IllegalArgumentException();\n        }\n        this.field = field;\n        var 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            var 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    GenericGFPoly.prototype.getCoefficients = function () {\n        return this.coefficients;\n    };\n    /**\n     * @return degree of this polynomial\n     */\n    GenericGFPoly.prototype.getDegree = function () {\n        return this.coefficients.length - 1;\n    };\n    /**\n     * @return true iff this polynomial is the monomial \"0\"\n     */\n    GenericGFPoly.prototype.isZero = function () {\n        return this.coefficients[0] === 0;\n    };\n    /**\n     * @return coefficient of x^degree term in this polynomial\n     */\n    GenericGFPoly.prototype.getCoefficient = function (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    GenericGFPoly.prototype.evaluateAt = function (a /*int*/) {\n        if (a === 0) {\n            // Just return the x^0 coefficient\n            return this.getCoefficient(0);\n        }\n        var coefficients = this.coefficients;\n        var result;\n        if (a === 1) {\n            // Just the sum of the coefficients\n            result = 0;\n            for (var i = 0, length_1 = coefficients.length; i !== length_1; i++) {\n                var coefficient = coefficients[i];\n                result = AbstractGenericGF.addOrSubtract(result, coefficient);\n            }\n            return result;\n        }\n        result = coefficients[0];\n        var size = coefficients.length;\n        var field = this.field;\n        for (var i = 1; i < size; i++) {\n            result = AbstractGenericGF.addOrSubtract(field.multiply(a, result), coefficients[i]);\n        }\n        return result;\n    };\n    GenericGFPoly.prototype.addOrSubtract = function (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        var smallerCoefficients = this.coefficients;\n        var largerCoefficients = other.coefficients;\n        if (smallerCoefficients.length > largerCoefficients.length) {\n            var temp = smallerCoefficients;\n            smallerCoefficients = largerCoefficients;\n            largerCoefficients = temp;\n        }\n        var sumDiff = new Int32Array(largerCoefficients.length);\n        var 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 (var 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    GenericGFPoly.prototype.multiply = function (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        var aCoefficients = this.coefficients;\n        var aLength = aCoefficients.length;\n        var bCoefficients = other.coefficients;\n        var bLength = bCoefficients.length;\n        var product = new Int32Array(aLength + bLength - 1);\n        var field = this.field;\n        for (var i = 0; i < aLength; i++) {\n            var aCoeff = aCoefficients[i];\n            for (var 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    GenericGFPoly.prototype.multiplyScalar = function (scalar /*int*/) {\n        if (scalar === 0) {\n            return this.field.getZero();\n        }\n        if (scalar === 1) {\n            return this;\n        }\n        var size = this.coefficients.length;\n        var field = this.field;\n        var product = new Int32Array(size);\n        var coefficients = this.coefficients;\n        for (var i = 0; i < size; i++) {\n            product[i] = field.multiply(coefficients[i], scalar);\n        }\n        return new GenericGFPoly(field, product);\n    };\n    GenericGFPoly.prototype.multiplyByMonomial = function (degree /*int*/, coefficient /*int*/) {\n        if (degree < 0) {\n            throw new IllegalArgumentException();\n        }\n        if (coefficient === 0) {\n            return this.field.getZero();\n        }\n        var coefficients = this.coefficients;\n        var size = coefficients.length;\n        var product = new Int32Array(size + degree);\n        var field = this.field;\n        for (var i = 0; i < size; i++) {\n            product[i] = field.multiply(coefficients[i], coefficient);\n        }\n        return new GenericGFPoly(field, product);\n    };\n    GenericGFPoly.prototype.divide = function (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        var field = this.field;\n        var quotient = field.getZero();\n        var remainder = this;\n        var denominatorLeadingTerm = other.getCoefficient(other.getDegree());\n        var inverseDenominatorLeadingTerm = field.inverse(denominatorLeadingTerm);\n        while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {\n            var degreeDifference = remainder.getDegree() - other.getDegree();\n            var scale = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);\n            var term = other.multiplyByMonomial(degreeDifference, scale);\n            var iterationQuotient = field.buildMonomial(degreeDifference, scale);\n            quotient = quotient.addOrSubtract(iterationQuotient);\n            remainder = remainder.addOrSubtract(term);\n        }\n        return [quotient, remainder];\n    };\n    /*@Override*/\n    GenericGFPoly.prototype.toString = function () {\n        var result = '';\n        for (var degree = this.getDegree(); degree >= 0; degree--) {\n            var 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                    var 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    return GenericGFPoly;\n}());\nexport default GenericGFPoly;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ArithmeticException = /** @class */ (function (_super) {\n    __extends(ArithmeticException, _super);\n    function ArithmeticException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ArithmeticException.kind = 'ArithmeticException';\n    return ArithmeticException;\n}(Exception));\nexport default ArithmeticException;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.common.reedsolomon {*/\nimport GenericGFPoly from './GenericGFPoly';\nimport AbstractGenericGF from './AbstractGenericGF';\nimport Integer from '../../util/Integer';\nimport IllegalArgumentException from '../../IllegalArgumentException';\nimport ArithmeticException from '../../ArithmeticException';\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 */\nvar GenericGF = /** @class */ (function (_super) {\n    __extends(GenericGF, _super);\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    function GenericGF(primitive /*int*/, size /*int*/, generatorBase /*int*/) {\n        var _this = _super.call(this) || this;\n        _this.primitive = primitive;\n        _this.size = size;\n        _this.generatorBase = generatorBase;\n        var expTable = new Int32Array(size);\n        var x = 1;\n        for (var 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        var logTable = new Int32Array(size);\n        for (var 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        return _this;\n    }\n    GenericGF.prototype.getZero = function () {\n        return this.zero;\n    };\n    GenericGF.prototype.getOne = function () {\n        return this.one;\n    };\n    /**\n     * @return the monomial representing coefficient * x^degree\n     */\n    GenericGF.prototype.buildMonomial = function (degree /*int*/, coefficient /*int*/) {\n        if (degree < 0) {\n            throw new IllegalArgumentException();\n        }\n        if (coefficient === 0) {\n            return this.zero;\n        }\n        var 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    GenericGF.prototype.inverse = function (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    GenericGF.prototype.multiply = function (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    GenericGF.prototype.getSize = function () {\n        return this.size;\n    };\n    GenericGF.prototype.getGeneratorBase = function () {\n        return this.generatorBase;\n    };\n    /*@Override*/\n    GenericGF.prototype.toString = function () {\n        return ('GF(0x' + Integer.toHexString(this.primitive) + ',' + this.size + ')');\n    };\n    GenericGF.prototype.equals = function (o) {\n        return o === this;\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    return GenericGF;\n}(AbstractGenericGF));\nexport default GenericGF;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ReedSolomonException = /** @class */ (function (_super) {\n    __extends(ReedSolomonException, _super);\n    function ReedSolomonException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ReedSolomonException.kind = 'ReedSolomonException';\n    return ReedSolomonException;\n}(Exception));\nexport default ReedSolomonException;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar IllegalStateException = /** @class */ (function (_super) {\n    __extends(IllegalStateException, _super);\n    function IllegalStateException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    IllegalStateException.kind = 'IllegalStateException';\n    return IllegalStateException;\n}(Exception));\nexport default IllegalStateException;\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.reedsolomon {*/\nimport GenericGF from './GenericGF';\nimport GenericGFPoly from './GenericGFPoly';\nimport ReedSolomonException from '../../ReedSolomonException';\nimport IllegalStateException from '../../IllegalStateException';\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 */\nvar ReedSolomonDecoder = /** @class */ (function () {\n    function ReedSolomonDecoder(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    ReedSolomonDecoder.prototype.decode = function (received, twoS /*int*/) {\n        var field = this.field;\n        var poly = new GenericGFPoly(field, received);\n        var syndromeCoefficients = new Int32Array(twoS);\n        var noError = true;\n        for (var i = 0; i < twoS; i++) {\n            var 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        var syndrome = new GenericGFPoly(field, syndromeCoefficients);\n        var sigmaOmega = this.runEuclideanAlgorithm(field.buildMonomial(twoS, 1), syndrome, twoS);\n        var sigma = sigmaOmega[0];\n        var omega = sigmaOmega[1];\n        var errorLocations = this.findErrorLocations(sigma);\n        var errorMagnitudes = this.findErrorMagnitudes(omega, errorLocations);\n        for (var i = 0; i < errorLocations.length; i++) {\n            var 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    ReedSolomonDecoder.prototype.runEuclideanAlgorithm = function (a, b, R /*int*/) {\n        // Assume a's degree is >= b's\n        if (a.getDegree() < b.getDegree()) {\n            var temp = a;\n            a = b;\n            b = temp;\n        }\n        var field = this.field;\n        var rLast = a;\n        var r = b;\n        var tLast = field.getZero();\n        var t = field.getOne();\n        // Run Euclidean algorithm until r's degree is less than R/2\n        while (r.getDegree() >= (R / 2 | 0)) {\n            var rLastLast = rLast;\n            var 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            var q = field.getZero();\n            var denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());\n            var dltInverse = field.inverse(denominatorLeadingTerm);\n            while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {\n                var degreeDiff = r.getDegree() - rLast.getDegree();\n                var 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        var sigmaTildeAtZero = t.getCoefficient(0);\n        if (sigmaTildeAtZero === 0) {\n            throw new ReedSolomonException('sigmaTilde(0) was zero');\n        }\n        var inverse = field.inverse(sigmaTildeAtZero);\n        var sigma = t.multiplyScalar(inverse);\n        var omega = r.multiplyScalar(inverse);\n        return [sigma, omega];\n    };\n    ReedSolomonDecoder.prototype.findErrorLocations = function (errorLocator) {\n        // This is a direct application of Chien's search\n        var numErrors = errorLocator.getDegree();\n        if (numErrors === 1) { // shortcut\n            return Int32Array.from([errorLocator.getCoefficient(1)]);\n        }\n        var result = new Int32Array(numErrors);\n        var e = 0;\n        var field = this.field;\n        for (var 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    ReedSolomonDecoder.prototype.findErrorMagnitudes = function (errorEvaluator, errorLocations) {\n        // This is directly applying Forney's Formula\n        var s = errorLocations.length;\n        var result = new Int32Array(s);\n        var field = this.field;\n        for (var i = 0; i < s; i++) {\n            var xiInverse = field.inverse(errorLocations[i]);\n            var denominator = 1;\n            for (var 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                    var term = field.multiply(errorLocations[j], xiInverse);\n                    var 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    return ReedSolomonDecoder;\n}());\nexport default ReedSolomonDecoder;\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 */\nimport DecoderResult from '../../common/DecoderResult';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonDecoder from '../../common/reedsolomon/ReedSolomonDecoder';\nimport IllegalStateException from '../../IllegalStateException';\nimport FormatException from '../../FormatException';\nimport StringUtils from '../../common/StringUtils';\nimport Integer from '../../util/Integer';\n// import java.util.Arrays;\nvar 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 */\nvar Decoder = /** @class */ (function () {\n    function Decoder() {\n    }\n    Decoder.prototype.decode = function (detectorResult) {\n        this.ddata = detectorResult;\n        var matrix = detectorResult.getBits();\n        var rawbits = this.extractBits(matrix);\n        var correctedBits = this.correctBits(rawbits);\n        var rawBytes = Decoder.convertBoolArrayToByteArray(correctedBits);\n        var result = Decoder.getEncodedData(correctedBits);\n        var 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    Decoder.highLevelDecode = function (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    Decoder.getEncodedData = function (correctedBits) {\n        var endIndex = correctedBits.length;\n        var latchTable = Table.UPPER; // table most recently latched to\n        var shiftTable = Table.UPPER; // table to use for the next read\n        var result = '';\n        var index = 0;\n        while (index < endIndex) {\n            if (shiftTable === Table.BINARY) {\n                if (endIndex - index < 5) {\n                    break;\n                }\n                var length_1 = Decoder.readCode(correctedBits, index, 5);\n                index += 5;\n                if (length_1 === 0) {\n                    if (endIndex - index < 11) {\n                        break;\n                    }\n                    length_1 = Decoder.readCode(correctedBits, index, 11) + 31;\n                    index += 11;\n                }\n                for (var charCount = 0; charCount < length_1; charCount++) {\n                    if (endIndex - index < 8) {\n                        index = endIndex; // Force outer loop to exit\n                        break;\n                    }\n                    var 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                var size = shiftTable === Table.DIGIT ? 4 : 5;\n                if (endIndex - index < size) {\n                    break;\n                }\n                var code = Decoder.readCode(correctedBits, index, size);\n                index += size;\n                var 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    Decoder.getTable = function (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    Decoder.getCharacter = function (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    Decoder.prototype.correctBits = function (rawbits) {\n        var gf;\n        var 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        var numDataCodewords = this.ddata.getNbDatablocks();\n        var numCodewords = rawbits.length / codewordSize;\n        if (numCodewords < numDataCodewords) {\n            throw new FormatException();\n        }\n        var offset = rawbits.length % codewordSize;\n        var dataWords = new Int32Array(numCodewords);\n        for (var i = 0; i < numCodewords; i++, offset += codewordSize) {\n            dataWords[i] = Decoder.readCode(rawbits, offset, codewordSize);\n        }\n        try {\n            var 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        var mask = (1 << codewordSize) - 1;\n        var stuffedBits = 0;\n        for (var i = 0; i < numDataCodewords; i++) {\n            var 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        var correctedBits = new Array(numDataCodewords * codewordSize - stuffedBits);\n        var index = 0;\n        for (var i = 0; i < numDataCodewords; i++) {\n            var 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 (var 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    Decoder.prototype.extractBits = function (matrix) {\n        var compact = this.ddata.isCompact();\n        var layers = this.ddata.getNbLayers();\n        var baseMatrixSize = (compact ? 11 : 14) + layers * 4; // not including alignment lines\n        var alignmentMap = new Int32Array(baseMatrixSize);\n        var rawbits = new Array(this.totalBitsInLayer(layers, compact));\n        if (compact) {\n            for (var i = 0; i < alignmentMap.length; i++) {\n                alignmentMap[i] = i;\n            }\n        }\n        else {\n            var matrixSize = baseMatrixSize + 1 + 2 * Integer.truncDivision((Integer.truncDivision(baseMatrixSize, 2) - 1), 15);\n            var origCenter = baseMatrixSize / 2;\n            var center = Integer.truncDivision(matrixSize, 2);\n            for (var i = 0; i < origCenter; i++) {\n                var 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 (var i = 0, rowOffset = 0; i < layers; i++) {\n            var rowSize = (layers - i) * 4 + (compact ? 9 : 12);\n            // The top-left most point of this layer is <low, low> (not including alignment lines)\n            var low = i * 2;\n            // The bottom-right most point of this layer is <high, high> (not including alignment lines)\n            var high = baseMatrixSize - 1 - low;\n            // We pull bits from the two 2 x rowSize columns and two rowSize x 2 rows\n            for (var j = 0; j < rowSize; j++) {\n                var columnOffset = j * 2;\n                for (var 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    Decoder.readCode = function (rawbits, startIndex, length) {\n        var res = 0;\n        for (var 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    Decoder.readByte = function (rawbits, startIndex) {\n        var 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    Decoder.convertBoolArrayToByteArray = function (boolArr) {\n        var byteArr = new Uint8Array((boolArr.length + 7) / 8);\n        for (var i = 0; i < byteArr.length; i++) {\n            byteArr[i] = Decoder.readByte(boolArr, 8 * i);\n        }\n        return byteArr;\n    };\n    Decoder.prototype.totalBitsInLayer = function (layers, compact) {\n        return ((compact ? 88 : 112) + 16 * layers) * layers;\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    return Decoder;\n}());\nexport default Decoder;\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 */\nvar MathUtils = /** @class */ (function () {\n    function MathUtils() {\n    }\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    MathUtils.round = function (d /*float*/) {\n        if (isNaN(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    MathUtils.distance = function (aX /*float|int*/, aY /*float|int*/, bX /*float|int*/, bY /*float|int*/) {\n        var xDiff = aX - bX;\n        var 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    MathUtils.sum = function (array) {\n        var count = 0;\n        for (var i = 0, length_1 = array.length; i !== length_1; i++) {\n            var a = array[i];\n            count += a;\n        }\n        return count;\n    };\n    return MathUtils;\n}());\nexport default MathUtils;\n", "/**\n * Ponyfill for Java's Float class.\n */\nvar Float = /** @class */ (function () {\n    function Float() {\n    }\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    Float.floatToIntBits = function (f) {\n        return f;\n    };\n    /**\n     * The float max value in JS is the number max value.\n     */\n    Float.MAX_VALUE = Number.MAX_SAFE_INTEGER;\n    return Float;\n}());\nexport default Float;\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 {*/\nimport MathUtils from './common/detector/MathUtils';\nimport Float from './util/Float';\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 */\nvar ResultPoint = /** @class */ (function () {\n    function ResultPoint(x, y) {\n        this.x = x;\n        this.y = y;\n    }\n    ResultPoint.prototype.getX = function () {\n        return this.x;\n    };\n    ResultPoint.prototype.getY = function () {\n        return this.y;\n    };\n    /*@Override*/\n    ResultPoint.prototype.equals = function (other) {\n        if (other instanceof ResultPoint) {\n            var otherPoint = other;\n            return this.x === otherPoint.x && this.y === otherPoint.y;\n        }\n        return false;\n    };\n    /*@Override*/\n    ResultPoint.prototype.hashCode = function () {\n        return 31 * Float.floatToIntBits(this.x) + Float.floatToIntBits(this.y);\n    };\n    /*@Override*/\n    ResultPoint.prototype.toString = function () {\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    ResultPoint.orderBestPatterns = function (patterns) {\n        // Find distances between pattern centers\n        var zeroOneDistance = this.distance(patterns[0], patterns[1]);\n        var oneTwoDistance = this.distance(patterns[1], patterns[2]);\n        var zeroTwoDistance = this.distance(patterns[0], patterns[2]);\n        var pointA;\n        var pointB;\n        var 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            var 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    ResultPoint.distance = function (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    ResultPoint.crossProductZ = function (pointA, pointB, pointC) {\n        var bX = pointB.x;\n        var bY = pointB.y;\n        return ((pointC.x - bX) * (pointA.y - bY)) - ((pointC.y - bY) * (pointA.x - bX));\n    };\n    return ResultPoint;\n}());\nexport default ResultPoint;\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 */\nvar DetectorResult = /** @class */ (function () {\n    function DetectorResult(bits, points) {\n        this.bits = bits;\n        this.points = points;\n    }\n    DetectorResult.prototype.getBits = function () {\n        return this.bits;\n    };\n    DetectorResult.prototype.getPoints = function () {\n        return this.points;\n    };\n    return DetectorResult;\n}());\nexport default DetectorResult;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport DetectorResult from '../common/DetectorResult';\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 */\nvar AztecDetectorResult = /** @class */ (function (_super) {\n    __extends(AztecDetectorResult, _super);\n    function AztecDetectorResult(bits, points, compact, nbDatablocks, nbLayers) {\n        var _this = _super.call(this, bits, points) || this;\n        _this.compact = compact;\n        _this.nbDatablocks = nbDatablocks;\n        _this.nbLayers = nbLayers;\n        return _this;\n    }\n    AztecDetectorResult.prototype.getNbLayers = function () {\n        return this.nbLayers;\n    };\n    AztecDetectorResult.prototype.getNbDatablocks = function () {\n        return this.nbDatablocks;\n    };\n    AztecDetectorResult.prototype.isCompact = function () {\n        return this.compact;\n    };\n    return AztecDetectorResult;\n}(DetectorResult));\nexport default AztecDetectorResult;\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/*namespace com.google.zxing.common.detector {*/\nimport ResultPoint from '../../ResultPoint';\nimport MathUtils from './MathUtils';\nimport NotFoundException from '../../NotFoundException';\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 */\nvar WhiteRectangleDetector = /** @class */ (function () {\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    function WhiteRectangleDetector(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        var 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    WhiteRectangleDetector.prototype.detect = function () {\n        var left = this.leftInit;\n        var right = this.rightInit;\n        var up = this.upInit;\n        var down = this.downInit;\n        var sizeExceeded = false;\n        var aBlackPointFoundOnBorder = true;\n        var atLeastOneBlackPointFoundOnBorder = false;\n        var atLeastOneBlackPointFoundOnRight = false;\n        var atLeastOneBlackPointFoundOnBottom = false;\n        var atLeastOneBlackPointFoundOnLeft = false;\n        var atLeastOneBlackPointFoundOnTop = false;\n        var width = this.width;\n        var height = this.height;\n        while (aBlackPointFoundOnBorder) {\n            aBlackPointFoundOnBorder = false;\n            // .....\n            // .   |\n            // .....\n            var 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            var 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            var 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            var 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            var maxSize = right - left;\n            var z = null;\n            for (var 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            var t = null;\n            // go down right\n            for (var 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            var x = null;\n            // go down left\n            for (var 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            var y = null;\n            // go up left\n            for (var 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    WhiteRectangleDetector.prototype.getBlackPointOnSegment = function (aX /*float*/, aY /*float*/, bX /*float*/, bY /*float*/) {\n        var dist = MathUtils.round(MathUtils.distance(aX, aY, bX, bY));\n        var xStep = (bX - aX) / dist;\n        var yStep = (bY - aY) / dist;\n        var image = this.image;\n        for (var i = 0; i < dist; i++) {\n            var x = MathUtils.round(aX + i * xStep);\n            var 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    WhiteRectangleDetector.prototype.centerEdges = function (y, z, x, t) {\n        //\n        //       t            t\n        //  z                      x\n        //        x    OR    z\n        //   y                    y\n        //\n        var yi = y.getX();\n        var yj = y.getY();\n        var zi = z.getX();\n        var zj = z.getY();\n        var xi = x.getX();\n        var xj = x.getY();\n        var ti = t.getX();\n        var tj = t.getY();\n        var 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    WhiteRectangleDetector.prototype.containsBlackPoint = function (a /*int*/, b /*int*/, fixed /*int*/, horizontal) {\n        var image = this.image;\n        if (horizontal) {\n            for (var x = a; x <= b; x++) {\n                if (image.get(x, fixed)) {\n                    return true;\n                }\n            }\n        }\n        else {\n            for (var y = a; y <= b; y++) {\n                if (image.get(fixed, y)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    WhiteRectangleDetector.INIT_SIZE = 10;\n    WhiteRectangleDetector.CORR = 1;\n    return WhiteRectangleDetector;\n}());\nexport default WhiteRectangleDetector;\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 */\nimport NotFoundException from '../NotFoundException';\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 */\nvar GridSampler = /** @class */ (function () {\n    function GridSampler() {\n    }\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    GridSampler.checkAndNudgePoints = function (image, points) {\n        var width = image.getWidth();\n        var height = image.getHeight();\n        // Check and nudge points from start until we see some that are OK:\n        var nudged = true;\n        for (var offset = 0; offset < points.length && nudged; offset += 2) {\n            var x = Math.floor(points[offset]);\n            var 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 (var offset = points.length - 2; offset >= 0 && nudged; offset -= 2) {\n            var x = Math.floor(points[offset]);\n            var 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    return GridSampler;\n}());\nexport default GridSampler;\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 */\nvar PerspectiveTransform = /** @class */ (function () {\n    function PerspectiveTransform(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    PerspectiveTransform.quadrilateralToQuadrilateral = function (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        var qToS = PerspectiveTransform.quadrilateralToSquare(x0, y0, x1, y1, x2, y2, x3, y3);\n        var sToQ = PerspectiveTransform.squareToQuadrilateral(x0p, y0p, x1p, y1p, x2p, y2p, x3p, y3p);\n        return sToQ.times(qToS);\n    };\n    PerspectiveTransform.prototype.transformPoints = function (points) {\n        var max = points.length;\n        var a11 = this.a11;\n        var a12 = this.a12;\n        var a13 = this.a13;\n        var a21 = this.a21;\n        var a22 = this.a22;\n        var a23 = this.a23;\n        var a31 = this.a31;\n        var a32 = this.a32;\n        var a33 = this.a33;\n        for (var i = 0; i < max; i += 2) {\n            var x = points[i];\n            var y = points[i + 1];\n            var 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    PerspectiveTransform.prototype.transformPointsWithValues = function (xValues, yValues) {\n        var a11 = this.a11;\n        var a12 = this.a12;\n        var a13 = this.a13;\n        var a21 = this.a21;\n        var a22 = this.a22;\n        var a23 = this.a23;\n        var a31 = this.a31;\n        var a32 = this.a32;\n        var a33 = this.a33;\n        var n = xValues.length;\n        for (var i = 0; i < n; i++) {\n            var x = xValues[i];\n            var y = yValues[i];\n            var 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    PerspectiveTransform.squareToQuadrilateral = function (x0 /*float*/, y0 /*float*/, x1 /*float*/, y1 /*float*/, x2 /*float*/, y2 /*float*/, x3 /*float*/, y3 /*float*/) {\n        var dx3 = x0 - x1 + x2 - x3;\n        var 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            var dx1 = x1 - x2;\n            var dx2 = x3 - x2;\n            var dy1 = y1 - y2;\n            var dy2 = y3 - y2;\n            var denominator = dx1 * dy2 - dx2 * dy1;\n            var a13 = (dx3 * dy2 - dx2 * dy3) / denominator;\n            var 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    PerspectiveTransform.quadrilateralToSquare = function (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    PerspectiveTransform.prototype.buildAdjoint = function () {\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    PerspectiveTransform.prototype.times = function (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    return PerspectiveTransform;\n}());\nexport default PerspectiveTransform;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.common {*/\nimport GridSampler from './GridSampler';\nimport BitMatrix from './BitMatrix';\nimport PerspectiveTransform from './PerspectiveTransform';\nimport NotFoundException from '../NotFoundException';\n/**\n * @author Sean Owen\n */\nvar DefaultGridSampler = /** @class */ (function (_super) {\n    __extends(DefaultGridSampler, _super);\n    function DefaultGridSampler() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /*@Override*/\n    DefaultGridSampler.prototype.sampleGrid = function (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        var 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    DefaultGridSampler.prototype.sampleGridWithTransform = function (image, dimensionX /*int*/, dimensionY /*int*/, transform) {\n        if (dimensionX <= 0 || dimensionY <= 0) {\n            throw new NotFoundException();\n        }\n        var bits = new BitMatrix(dimensionX, dimensionY);\n        var points = new Float32Array(2 * dimensionX);\n        for (var y = 0; y < dimensionY; y++) {\n            var max = points.length;\n            var iValue = y + 0.5;\n            for (var 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 (var 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    return DefaultGridSampler;\n}(GridSampler));\nexport default DefaultGridSampler;\n", "import DefaultGridSampler from './DefaultGridSampler';\nvar GridSamplerInstance = /** @class */ (function () {\n    function GridSamplerInstance() {\n    }\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    GridSamplerInstance.setGridSampler = function (newGridSampler) {\n        GridSamplerInstance.gridSampler = newGridSampler;\n    };\n    /**\n     * @return the current implementation of GridSampler\n     */\n    GridSamplerInstance.getInstance = function () {\n        return GridSamplerInstance.gridSampler;\n    };\n    GridSamplerInstance.gridSampler = new DefaultGridSampler();\n    return GridSamplerInstance;\n}());\nexport default GridSamplerInstance;\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 */\nimport ResultPoint from '../../ResultPoint';\nimport AztecDetectorResult from '../AztecDetectorResult';\nimport MathUtils from '../../common/detector/MathUtils';\nimport WhiteRectangleDetector from '../../common/detector/WhiteRectangleDetector';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonDecoder from '../../common/reedsolomon/ReedSolomonDecoder';\nimport NotFoundException from '../../NotFoundException';\nimport GridSamplerInstance from '../../common/GridSamplerInstance';\nimport Integer from '../../util/Integer';\nvar Point = /** @class */ (function () {\n    function Point(x, y) {\n        this.x = x;\n        this.y = y;\n    }\n    Point.prototype.toResultPoint = function () {\n        return new ResultPoint(this.getX(), this.getY());\n    };\n    Point.prototype.getX = function () {\n        return this.x;\n    };\n    Point.prototype.getY = function () {\n        return this.y;\n    };\n    return Point;\n}());\nexport { Point };\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 */\nvar Detector = /** @class */ (function () {\n    function Detector(image) {\n        this.EXPECTED_CORNER_BITS = new Int32Array([\n            0xee0,\n            0x1dc,\n            0x83b,\n            0x707,\n        ]);\n        this.image = image;\n    }\n    Detector.prototype.detect = function () {\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    Detector.prototype.detectMirror = function (isMirror) {\n        // 1. Get the center of the aztec matrix\n        var 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        var bullsEyeCorners = this.getBullsEyeCorners(pCenter);\n        if (isMirror) {\n            var 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        var 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        var 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    Detector.prototype.extractParameters = function (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        var length = 2 * this.nbCenterLayers;\n        // Get the bits around the bull's eye\n        var 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        var parameterData = 0;\n        for (var i = 0; i < 4; i++) {\n            var 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        var 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    Detector.prototype.getRotation = function (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        var cornerBits = 0;\n        sides.forEach(function (side, idx, arr) {\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        // 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 (var 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    Detector.prototype.getCorrectedParameterData = function (parameterData, compact) {\n        var numCodewords;\n        var numDataCodewords;\n        if (compact) {\n            numCodewords = 7;\n            numDataCodewords = 2;\n        }\n        else {\n            numCodewords = 10;\n            numDataCodewords = 4;\n        }\n        var numECCodewords = numCodewords - numDataCodewords;\n        var parameterWords = new Int32Array(numCodewords);\n        for (var i = numCodewords - 1; i >= 0; --i) {\n            parameterWords[i] = parameterData & 0xF;\n            parameterData >>= 4;\n        }\n        try {\n            var 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        var result = 0;\n        for (var 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    Detector.prototype.getBullsEyeCorners = function (pCenter) {\n        var pina = pCenter;\n        var pinb = pCenter;\n        var pinc = pCenter;\n        var pind = pCenter;\n        var color = true;\n        for (this.nbCenterLayers = 1; this.nbCenterLayers < 9; this.nbCenterLayers++) {\n            var pouta = this.getFirstDifferent(pina, color, 1, -1);\n            var poutb = this.getFirstDifferent(pinb, color, 1, 1);\n            var poutc = this.getFirstDifferent(pinc, color, -1, 1);\n            var poutd = this.getFirstDifferent(pind, color, -1, -1);\n            // d      a\n            //\n            // c      b\n            if (this.nbCenterLayers > 2) {\n                var 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        var pinax = new ResultPoint(pina.getX() + 0.5, pina.getY() - 0.5);\n        var pinbx = new ResultPoint(pinb.getX() + 0.5, pinb.getY() + 0.5);\n        var pincx = new ResultPoint(pinc.getX() - 0.5, pinc.getY() + 0.5);\n        var 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    Detector.prototype.getMatrixCenter = function () {\n        var pointA;\n        var pointB;\n        var pointC;\n        var pointD;\n        // Get a white rectangle that can be the border of the matrix in center bull's eye or\n        try {\n            var 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            var cx_1 = this.image.getWidth() / 2;\n            var cy_1 = this.image.getHeight() / 2;\n            pointA = this.getFirstDifferent(new Point(cx_1 + 7, cy_1 - 7), false, 1, -1).toResultPoint();\n            pointB = this.getFirstDifferent(new Point(cx_1 + 7, cy_1 + 7), false, 1, 1).toResultPoint();\n            pointC = this.getFirstDifferent(new Point(cx_1 - 7, cy_1 + 7), false, -1, 1).toResultPoint();\n            pointD = this.getFirstDifferent(new Point(cx_1 - 7, cy_1 - 7), false, -1, -1).toResultPoint();\n        }\n        // Compute the center of the rectangle\n        var cx = MathUtils.round((pointA.getX() + pointD.getX() + pointB.getX() + pointC.getX()) / 4.0);\n        var 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            var 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    Detector.prototype.getMatrixCornerPoints = function (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    Detector.prototype.sampleGrid = function (image, topLeft, topRight, bottomRight, bottomLeft) {\n        var sampler = GridSamplerInstance.getInstance();\n        var dimension = this.getDimension();\n        var low = dimension / 2 - this.nbCenterLayers;\n        var 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    Detector.prototype.sampleLine = function (p1, p2, size) {\n        var result = 0;\n        var d = this.distanceResultPoint(p1, p2);\n        var moduleSize = d / size;\n        var px = p1.getX();\n        var py = p1.getY();\n        var dx = moduleSize * (p2.getX() - p1.getX()) / d;\n        var dy = moduleSize * (p2.getY() - p1.getY()) / d;\n        for (var 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    Detector.prototype.isWhiteOrBlackRectangle = function (p1, p2, p3, p4) {\n        var 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        var cInit = this.getColor(p4, p1);\n        if (cInit === 0) {\n            return false;\n        }\n        var 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    Detector.prototype.getColor = function (p1, p2) {\n        var d = this.distancePoint(p1, p2);\n        var dx = (p2.getX() - p1.getX()) / d;\n        var dy = (p2.getY() - p1.getY()) / d;\n        var error = 0;\n        var px = p1.getX();\n        var py = p1.getY();\n        var colorModel = this.image.get(p1.getX(), p1.getY());\n        var iMax = Math.ceil(d);\n        for (var 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        var 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    Detector.prototype.getFirstDifferent = function (init, color, dx, dy) {\n        var x = init.getX() + dx;\n        var 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    Detector.prototype.expandSquare = function (cornerPoints, oldSide, newSide) {\n        var ratio = newSide / (2.0 * oldSide);\n        var dx = cornerPoints[0].getX() - cornerPoints[2].getX();\n        var dy = cornerPoints[0].getY() - cornerPoints[2].getY();\n        var centerx = (cornerPoints[0].getX() + cornerPoints[2].getX()) / 2.0;\n        var centery = (cornerPoints[0].getY() + cornerPoints[2].getY()) / 2.0;\n        var result0 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);\n        var 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        var result1 = new ResultPoint(centerx + ratio * dx, centery + ratio * dy);\n        var result3 = new ResultPoint(centerx - ratio * dx, centery - ratio * dy);\n        var results = [result0, result1, result2, result3];\n        return results;\n    };\n    Detector.prototype.isValid = function (x, y) {\n        return x >= 0 && x < this.image.getWidth() && y > 0 && y < this.image.getHeight();\n    };\n    Detector.prototype.isValidPoint = function (point) {\n        var x = MathUtils.round(point.getX());\n        var y = MathUtils.round(point.getY());\n        return this.isValid(x, y);\n    };\n    Detector.prototype.distancePoint = function (a, b) {\n        return MathUtils.distance(a.getX(), a.getY(), b.getX(), b.getY());\n    };\n    Detector.prototype.distanceResultPoint = function (a, b) {\n        return MathUtils.distance(a.getX(), a.getY(), b.getX(), b.getY());\n    };\n    Detector.prototype.getDimension = function () {\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    return Detector;\n}());\nexport default Detector;\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 */\nimport Result from '../Result';\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport ResultMetadataType from '../ResultMetadataType';\nimport System from '../util/System';\nimport Decoder from './decoder/Decoder';\nimport Detector from './detector/Detector';\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 */\nvar AztecReader = /** @class */ (function () {\n    function AztecReader() {\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     */\n    AztecReader.prototype.decode = function (image, hints) {\n        if (hints === void 0) { hints = null; }\n        var exception = null;\n        var detector = new Detector(image.getBlackMatrix());\n        var points = null;\n        var decoderResult = null;\n        try {\n            var 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                var 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        var result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), decoderResult.getNumBits(), points, BarcodeFormat.AZTEC, System.currentTimeMillis());\n        var byteSegments = decoderResult.getByteSegments();\n        if (byteSegments != null) {\n            result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments);\n        }\n        var ecLevel = decoderResult.getECLevel();\n        if (ecLevel != null) {\n            result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);\n        }\n        return result;\n    };\n    AztecReader.prototype.reportFoundResultPoints = function (hints, points) {\n        if (hints != null) {\n            var rpcb_1 = hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n            if (rpcb_1 != null) {\n                points.forEach(function (point, idx, arr) {\n                    rpcb_1.foundPossibleResultPoint(point);\n                });\n            }\n        }\n    };\n    // @Override\n    AztecReader.prototype.reset = function () {\n        // do nothing\n    };\n    return AztecReader;\n}());\nexport default AztecReader;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport AztecReader from '../core/aztec/AztecReader';\n/**\n * Aztec Code reader to use from browser.\n *\n * @class BrowserAztecCodeReader\n * @extends {BrowserCodeReader}\n */\nvar BrowserAztecCodeReader = /** @class */ (function (_super) {\n    __extends(BrowserAztecCodeReader, _super);\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    function BrowserAztecCodeReader(timeBetweenScansMillis) {\n        if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n        return _super.call(this, new AztecReader(), timeBetweenScansMillis) || this;\n    }\n    return BrowserAztecCodeReader;\n}(BrowserCodeReader));\nexport { BrowserAztecCodeReader };\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 */\nimport BitArray from '../common/BitArray';\nimport DecodeHintType from '../DecodeHintType';\nimport ResultMetadataType from '../ResultMetadataType';\nimport ResultPoint from '../ResultPoint';\nimport NotFoundException from '../NotFoundException';\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 */\nvar OneDReader = /** @class */ (function () {\n    function OneDReader() {\n    }\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    OneDReader.prototype.decode = function (image, hints) {\n        try {\n            return this.doDecode(image, hints);\n        }\n        catch (nfe) {\n            var tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true);\n            if (tryHarder && image.isRotateSupported()) {\n                var rotatedImage = image.rotateCounterClockwise();\n                var result = this.doDecode(rotatedImage, hints);\n                // Record that we found it rotated 90 degrees CCW / 270 degrees CW\n                var metadata = result.getResultMetadata();\n                var orientation_1 = 270;\n                if (metadata !== null && (metadata.get(ResultMetadataType.ORIENTATION) === true)) {\n                    // But if we found it reversed in doDecode(), add in that result here:\n                    orientation_1 = (orientation_1 + metadata.get(ResultMetadataType.ORIENTATION) % 360);\n                }\n                result.putMetadata(ResultMetadataType.ORIENTATION, orientation_1);\n                // Update result points\n                var points = result.getResultPoints();\n                if (points !== null) {\n                    var height = rotatedImage.getHeight();\n                    for (var 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    OneDReader.prototype.reset = function () {\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    OneDReader.prototype.doDecode = function (image, hints) {\n        var width = image.getWidth();\n        var height = image.getHeight();\n        var row = new BitArray(width);\n        var tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true);\n        var rowStep = Math.max(1, height >> (tryHarder ? 8 : 5));\n        var 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        var middle = Math.trunc(height / 2);\n        for (var x = 0; x < maxLines; x++) {\n            // Scanning from the middle out. Determine which row we're looking at next:\n            var rowStepsAboveOrBelow = Math.trunc((x + 1) / 2);\n            var isAbove = (x & 0x01) === 0; // i.e. is x even?\n            var 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            var _loop_1 = function (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.NEED_RESULT_POINT_CALLBACK) === true)) {\n                        var newHints_1 = new Map();\n                        hints.forEach(function (hint, key) { return newHints_1.set(key, hint); });\n                        newHints_1.delete(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n                        hints = newHints_1;\n                    }\n                }\n                try {\n                    // Look for a barcode\n                    var result = this_1.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.ORIENTATION, 180);\n                        // And remember to flip the result points horizontally.\n                        var 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 { value: result };\n                }\n                catch (re) {\n                    // continue -- just couldn't decode this row\n                }\n            };\n            var this_1 = this;\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 (var attempt = 0; attempt < 2; attempt++) {\n                var state_1 = _loop_1(attempt);\n                if (typeof state_1 === \"object\")\n                    return state_1.value;\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    OneDReader.recordPattern = function (row, start, counters) {\n        var numCounters = counters.length;\n        for (var index = 0; index < numCounters; index++)\n            counters[index] = 0;\n        var end = row.getSize();\n        if (start >= end) {\n            throw new NotFoundException();\n        }\n        var isWhite = !row.get(start);\n        var counterPosition = 0;\n        var 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    OneDReader.recordPatternInReverse = function (row, start, counters) {\n        // This could be more efficient I guess\n        var numTransitionsLeft = counters.length;\n        var 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    OneDReader.patternMatchVariance = function (counters, pattern, maxIndividualVariance) {\n        var numCounters = counters.length;\n        var total = 0;\n        var patternLength = 0;\n        for (var 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        var unitBarWidth = total / patternLength;\n        maxIndividualVariance *= unitBarWidth;\n        var totalVariance = 0.0;\n        for (var x = 0; x < numCounters; x++) {\n            var counter = counters[x];\n            var scaledPattern = pattern[x] * unitBarWidth;\n            var 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    return OneDReader;\n}());\nexport default OneDReader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport ChecksumException from '../ChecksumException';\nimport DecodeHintType from '../DecodeHintType';\nimport FormatException from '../FormatException';\nimport NotFoundException from '../NotFoundException';\n// import Reader from '../Reader';\nimport Result from '../Result';\n// import ResultMetadataType from '../ResultMetadataType';\nimport ResultPoint from '../ResultPoint';\nimport OneDReader from './OneDReader';\n/**\n * <p>Decodes Code 128 barcodes.</p>\n *\n * @author Sean Owen\n */\nvar Code128Reader = /** @class */ (function (_super) {\n    __extends(Code128Reader, _super);\n    function Code128Reader() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Code128Reader.findStartPattern = function (row) {\n        var width = row.getSize();\n        var rowOffset = row.getNextSet(0);\n        var counterPosition = 0;\n        var counters = Int32Array.from([0, 0, 0, 0, 0, 0]);\n        var patternStart = rowOffset;\n        var isWhite = false;\n        var patternLength = 6;\n        for (var i = rowOffset; i < width; i++) {\n            if (row.get(i) !== isWhite) {\n                counters[counterPosition]++;\n            }\n            else {\n                if (counterPosition === (patternLength - 1)) {\n                    var bestVariance = Code128Reader.MAX_AVG_VARIANCE;\n                    var bestMatch = -1;\n                    for (var startCode = Code128Reader.CODE_START_A; startCode <= Code128Reader.CODE_START_C; startCode++) {\n                        var 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    Code128Reader.decodeCode = function (row, counters, rowOffset) {\n        OneDReader.recordPattern(row, rowOffset, counters);\n        var bestVariance = Code128Reader.MAX_AVG_VARIANCE; // worst variance we'll accept\n        var bestMatch = -1;\n        for (var d = 0; d < Code128Reader.CODE_PATTERNS.length; d++) {\n            var pattern = Code128Reader.CODE_PATTERNS[d];\n            var 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    Code128Reader.prototype.decodeRow = function (rowNumber, row, hints) {\n        var convertFNC1 = hints && (hints.get(DecodeHintType.ASSUME_GS1) === true);\n        var startPatternInfo = Code128Reader.findStartPattern(row);\n        var startCode = startPatternInfo[2];\n        var currentRawCodesIndex = 0;\n        var rawCodes = new Uint8Array(20);\n        rawCodes[currentRawCodesIndex++] = startCode;\n        var 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        var done = false;\n        var isNextShifted = false;\n        var result = '';\n        var lastStart = startPatternInfo[0];\n        var nextStart = startPatternInfo[1];\n        var counters = Int32Array.from([0, 0, 0, 0, 0, 0]);\n        var lastCode = 0;\n        var code = 0;\n        var checksumTotal = startCode;\n        var multiplier = 0;\n        var lastCharacterWasPrintable = true;\n        var upperMode = false;\n        var shiftUpperMode = false;\n        while (!done) {\n            var 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(function (previous, current) { return 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        var 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        var 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        var left = (startPatternInfo[1] + startPatternInfo[0]) / 2.0;\n        var right = lastStart + lastPatternSize / 2.0;\n        var rawCodesSize = rawCodes.length;\n        var rawBytes = new Uint8Array(rawCodesSize);\n        for (var i = 0; i < rawCodesSize; i++) {\n            rawBytes[i] = rawCodes[i];\n        }\n        var points = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)];\n        return new Result(result, rawBytes, 0, points, BarcodeFormat.CODE_128, new Date().getTime());\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    return Code128Reader;\n}(OneDReader));\nexport default Code128Reader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport ChecksumException from '../ChecksumException';\nimport FormatException from '../FormatException';\nimport NotFoundException from '../NotFoundException';\nimport OneDReader from './OneDReader';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\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 */\nvar Code39Reader = /** @class */ (function (_super) {\n    __extends(Code39Reader, _super);\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    function Code39Reader(usingCheckDigit, extendedMode) {\n        if (usingCheckDigit === void 0) { usingCheckDigit = false; }\n        if (extendedMode === void 0) { extendedMode = false; }\n        var _this = _super.call(this) || this;\n        _this.usingCheckDigit = usingCheckDigit;\n        _this.extendedMode = extendedMode;\n        _this.decodeRowResult = '';\n        _this.counters = new Int32Array(9);\n        return _this;\n    }\n    Code39Reader.prototype.decodeRow = function (rowNumber, row, hints) {\n        var e_1, _a, e_2, _b;\n        var theCounters = this.counters;\n        theCounters.fill(0);\n        this.decodeRowResult = '';\n        var start = Code39Reader.findAsteriskPattern(row, theCounters);\n        // Read off white space\n        var nextStart = row.getNextSet(start[1]);\n        var end = row.getSize();\n        var decodedChar;\n        var lastStart;\n        do {\n            Code39Reader.recordPattern(row, nextStart, theCounters);\n            var 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            try {\n                for (var theCounters_1 = (e_1 = void 0, __values(theCounters)), theCounters_1_1 = theCounters_1.next(); !theCounters_1_1.done; theCounters_1_1 = theCounters_1.next()) {\n                    var counter = theCounters_1_1.value;\n                    nextStart += counter;\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (theCounters_1_1 && !theCounters_1_1.done && (_a = theCounters_1.return)) _a.call(theCounters_1);\n                }\n                finally { if (e_1) throw e_1.error; }\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        var lastPatternSize = 0;\n        try {\n            for (var theCounters_2 = __values(theCounters), theCounters_2_1 = theCounters_2.next(); !theCounters_2_1.done; theCounters_2_1 = theCounters_2.next()) {\n                var counter = theCounters_2_1.value;\n                lastPatternSize += counter;\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (theCounters_2_1 && !theCounters_2_1.done && (_b = theCounters_2.return)) _b.call(theCounters_2);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        var 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            var max = this.decodeRowResult.length - 1;\n            var total = 0;\n            for (var 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        var resultString;\n        if (this.extendedMode) {\n            resultString = Code39Reader.decodeExtended(this.decodeRowResult);\n        }\n        else {\n            resultString = this.decodeRowResult;\n        }\n        var left = (start[1] + start[0]) / 2.0;\n        var right = lastStart + lastPatternSize / 2.0;\n        return new Result(resultString, null, 0, [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)], BarcodeFormat.CODE_39, new Date().getTime());\n    };\n    Code39Reader.findAsteriskPattern = function (row, counters) {\n        var width = row.getSize();\n        var rowOffset = row.getNextSet(0);\n        var counterPosition = 0;\n        var patternStart = rowOffset;\n        var isWhite = false;\n        var patternLength = counters.length;\n        for (var 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    Code39Reader.toNarrowWidePattern = function (counters) {\n        var e_3, _a;\n        var numCounters = counters.length;\n        var maxNarrowCounter = 0;\n        var wideCounters;\n        do {\n            var minCounter = 0x7fffffff;\n            try {\n                for (var counters_1 = (e_3 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n                    var counter = counters_1_1.value;\n                    if (counter < minCounter && counter > maxNarrowCounter) {\n                        minCounter = counter;\n                    }\n                }\n            }\n            catch (e_3_1) { e_3 = { error: e_3_1 }; }\n            finally {\n                try {\n                    if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n                }\n                finally { if (e_3) throw e_3.error; }\n            }\n            maxNarrowCounter = minCounter;\n            wideCounters = 0;\n            var totalWideCountersWidth = 0;\n            var pattern = 0;\n            for (var i = 0; i < numCounters; i++) {\n                var 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 (var i = 0; i < numCounters && wideCounters > 0; i++) {\n                    var 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    Code39Reader.patternToChar = function (pattern) {\n        for (var 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    Code39Reader.decodeExtended = function (encoded) {\n        var length = encoded.length;\n        var decoded = '';\n        for (var i = 0; i < length; i++) {\n            var c = encoded.charAt(i);\n            if (c === '+' || c === '$' || c === '%' || c === '/') {\n                var next = encoded.charAt(i + 1);\n                var 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    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    return Code39Reader;\n}(OneDReader));\nexport default Code39Reader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport ChecksumException from '../ChecksumException';\nimport FormatException from '../FormatException';\nimport NotFoundException from '../NotFoundException';\nimport OneDReader from './OneDReader';\nimport Result from '../Result';\n//import com.google.zxing.ResultMetadataType;\nimport ResultPoint from '../ResultPoint';\n/**\n * <p>Decodes Code 93 barcodes.</p>\n *\n * @author Sean Owen\n * @see Code39Reader\n */\nvar Code93Reader = /** @class */ (function (_super) {\n    __extends(Code93Reader, _super);\n    //public Code93Reader() {\n    //  decodeRowResult = new StringBuilder(20);\n    //  counters = new int[6];\n    //}\n    function Code93Reader() {\n        var _this = _super.call(this) || this;\n        _this.decodeRowResult = '';\n        _this.counters = new Int32Array(6);\n        return _this;\n    }\n    Code93Reader.prototype.decodeRow = function (rowNumber, row, hints) {\n        var e_1, _a, e_2, _b;\n        var start = this.findAsteriskPattern(row);\n        // Read off white space\n        var nextStart = row.getNextSet(start[1]);\n        var end = row.getSize();\n        var theCounters = this.counters;\n        theCounters.fill(0);\n        this.decodeRowResult = '';\n        var decodedChar;\n        var lastStart;\n        do {\n            Code93Reader.recordPattern(row, nextStart, theCounters);\n            var pattern = this.toPattern(theCounters);\n            if (pattern < 0) {\n                throw new NotFoundException();\n            }\n            decodedChar = this.patternToChar(pattern);\n            this.decodeRowResult += decodedChar;\n            lastStart = nextStart;\n            try {\n                for (var theCounters_1 = (e_1 = void 0, __values(theCounters)), theCounters_1_1 = theCounters_1.next(); !theCounters_1_1.done; theCounters_1_1 = theCounters_1.next()) {\n                    var counter = theCounters_1_1.value;\n                    nextStart += counter;\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (theCounters_1_1 && !theCounters_1_1.done && (_a = theCounters_1.return)) _a.call(theCounters_1);\n                }\n                finally { if (e_1) throw e_1.error; }\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        var lastPatternSize = 0;\n        try {\n            for (var theCounters_2 = __values(theCounters), theCounters_2_1 = theCounters_2.next(); !theCounters_2_1.done; theCounters_2_1 = theCounters_2.next()) {\n                var counter = theCounters_2_1.value;\n                lastPatternSize += counter;\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (theCounters_2_1 && !theCounters_2_1.done && (_b = theCounters_2.return)) _b.call(theCounters_2);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        // Should be at least one more black module\n        if (nextStart === end || !row.get(nextStart)) {\n            throw new NotFoundException();\n        }\n        if (this.decodeRowResult.length < 2) {\n            // false positive -- need at least 2 checksum digits\n            throw new NotFoundException();\n        }\n        this.checkChecksums(this.decodeRowResult);\n        // Remove checksum digits\n        this.decodeRowResult = this.decodeRowResult.substring(0, this.decodeRowResult.length - 2);\n        var resultString = this.decodeExtended(this.decodeRowResult);\n        var left = (start[1] + start[0]) / 2.0;\n        var right = lastStart + lastPatternSize / 2.0;\n        return new Result(resultString, null, 0, [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)], BarcodeFormat.CODE_93, new Date().getTime());\n    };\n    Code93Reader.prototype.findAsteriskPattern = function (row) {\n        var width = row.getSize();\n        var rowOffset = row.getNextSet(0);\n        this.counters.fill(0);\n        var theCounters = this.counters;\n        var patternStart = rowOffset;\n        var isWhite = false;\n        var patternLength = theCounters.length;\n        var counterPosition = 0;\n        for (var i = rowOffset; i < width; i++) {\n            if (row.get(i) !== isWhite) {\n                theCounters[counterPosition]++;\n            }\n            else {\n                if (counterPosition === patternLength - 1) {\n                    if (this.toPattern(theCounters) === Code93Reader.ASTERISK_ENCODING) {\n                        return new Int32Array([patternStart, i]);\n                    }\n                    patternStart += theCounters[0] + theCounters[1];\n                    theCounters.copyWithin(0, 2, 2 + counterPosition - 1);\n                    theCounters[counterPosition - 1] = 0;\n                    theCounters[counterPosition] = 0;\n                    counterPosition--;\n                }\n                else {\n                    counterPosition++;\n                }\n                theCounters[counterPosition] = 1;\n                isWhite = !isWhite;\n            }\n        }\n        throw new NotFoundException;\n    };\n    Code93Reader.prototype.toPattern = function (counters) {\n        var e_3, _a;\n        var sum = 0;\n        try {\n            for (var counters_1 = __values(counters), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n                var counter = counters_1_1.value;\n                sum += counter;\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        var pattern = 0;\n        var max = counters.length;\n        for (var i = 0; i < max; i++) {\n            var scaled = Math.round(counters[i] * 9.0 / sum);\n            if (scaled < 1 || scaled > 4) {\n                return -1;\n            }\n            if ((i & 0x01) === 0) {\n                for (var j = 0; j < scaled; j++) {\n                    pattern = (pattern << 1) | 0x01;\n                }\n            }\n            else {\n                pattern <<= scaled;\n            }\n        }\n        return pattern;\n    };\n    Code93Reader.prototype.patternToChar = function (pattern) {\n        for (var i = 0; i < Code93Reader.CHARACTER_ENCODINGS.length; i++) {\n            if (Code93Reader.CHARACTER_ENCODINGS[i] === pattern) {\n                return Code93Reader.ALPHABET_STRING.charAt(i);\n            }\n        }\n        throw new NotFoundException();\n    };\n    Code93Reader.prototype.decodeExtended = function (encoded) {\n        var length = encoded.length;\n        var decoded = '';\n        for (var i = 0; i < length; i++) {\n            var c = encoded.charAt(i);\n            if (c >= 'a' && c <= 'd') {\n                if (i >= length - 1) {\n                    throw new FormatException();\n                }\n                var next = encoded.charAt(i + 1);\n                var decodedChar = '\\0';\n                switch (c) {\n                    case 'd':\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 'a':\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 'b':\n                        if (next >= 'A' && next <= 'E') {\n                            // %A to %E map to control codes ESC to USep\n                            decodedChar = String.fromCharCode(next.charCodeAt(0) - 38);\n                        }\n                        else if (next >= 'F' && next <= 'J') {\n                            // %F to %J map to ; < = > ?\n                            decodedChar = String.fromCharCode(next.charCodeAt(0) - 11);\n                        }\n                        else if (next >= 'K' && next <= 'O') {\n                            // %K to %O map to [ \\ ] ^ _\n                            decodedChar = String.fromCharCode(next.charCodeAt(0) + 16);\n                        }\n                        else if (next >= 'P' && next <= 'T') {\n                            // %P to %T map to { | } ~ DEL\n                            decodedChar = String.fromCharCode(next.charCodeAt(0) + 43);\n                        }\n                        else if (next === 'U') {\n                            // %U map to NUL\n                            decodedChar = '\\0';\n                        }\n                        else if (next === 'V') {\n                            // %V map to @\n                            decodedChar = '@';\n                        }\n                        else if (next === 'W') {\n                            // %W map to `\n                            decodedChar = '`';\n                        }\n                        else if (next >= 'X' && next <= 'Z') {\n                            // %X to %Z all map to DEL (127)\n                            decodedChar = String.fromCharCode(127);\n                        }\n                        else {\n                            throw new FormatException();\n                        }\n                        break;\n                    case 'c':\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    Code93Reader.prototype.checkChecksums = function (result) {\n        var length = result.length;\n        this.checkOneChecksum(result, length - 2, 20);\n        this.checkOneChecksum(result, length - 1, 15);\n    };\n    Code93Reader.prototype.checkOneChecksum = function (result, checkPosition, weightMax) {\n        var weight = 1;\n        var total = 0;\n        for (var i = checkPosition - 1; i >= 0; i--) {\n            total += weight * Code93Reader.ALPHABET_STRING.indexOf(result.charAt(i));\n            if (++weight > weightMax) {\n                weight = 1;\n            }\n        }\n        if (result.charAt(checkPosition) !== Code93Reader.ALPHABET_STRING[total % 47]) {\n            throw new ChecksumException;\n        }\n    };\n    // Note that 'abcd' are dummy characters in place of control characters.\n    Code93Reader.ALPHABET_STRING = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%abcd*\";\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     */\n    Code93Reader.CHARACTER_ENCODINGS = [\n        0x114, 0x148, 0x144, 0x142, 0x128, 0x124, 0x122, 0x150, 0x112, 0x10A,\n        0x1A8, 0x1A4, 0x1A2, 0x194, 0x192, 0x18A, 0x168, 0x164, 0x162, 0x134,\n        0x11A, 0x158, 0x14C, 0x146, 0x12C, 0x116, 0x1B4, 0x1B2, 0x1AC, 0x1A6,\n        0x196, 0x19A, 0x16C, 0x166, 0x136, 0x13A,\n        0x12E, 0x1D4, 0x1D2, 0x1CA, 0x16E, 0x176, 0x1AE,\n        0x126, 0x1DA, 0x1D6, 0x132, 0x15E,\n    ];\n    Code93Reader.ASTERISK_ENCODING = Code93Reader.CHARACTER_ENCODINGS[47];\n    return Code93Reader;\n}(OneDReader));\nexport default Code93Reader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport FormatException from '../FormatException';\nimport NotFoundException from '../NotFoundException';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\nimport StringBuilder from '../util/StringBuilder';\nimport System from '../util/System';\nimport OneDReader from './OneDReader';\n/**\n * <p>Decodes ITF barcodes.</p>\n *\n * @author Tjieco\n */\nvar ITFReader = /** @class */ (function (_super) {\n    __extends(ITFReader, _super);\n    function ITFReader() {\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        var _this = _super !== null && _super.apply(this, arguments) || this;\n        // Stores the actual narrow line width of the image being decoded.\n        _this.narrowLineWidth = -1;\n        return _this;\n    }\n    // See ITFWriter.PATTERNS\n    /*\n  \n    /!**\n     * Patterns of Wide / Narrow lines to indicate each digit\n     *!/\n    */\n    ITFReader.prototype.decodeRow = function (rowNumber, row, hints) {\n        var e_1, _a;\n        // Find out where the Middle section (payload) starts & ends\n        var startRange = this.decodeStart(row);\n        var endRange = this.decodeEnd(row);\n        var result = new StringBuilder();\n        ITFReader.decodeMiddle(row, startRange[1], endRange[0], result);\n        var resultString = result.toString();\n        var allowedLengths = null;\n        if (hints != null) {\n            allowedLengths = hints.get(DecodeHintType.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        var length = resultString.length;\n        var lengthOK = false;\n        var maxAllowedLength = 0;\n        try {\n            for (var allowedLengths_1 = __values(allowedLengths), allowedLengths_1_1 = allowedLengths_1.next(); !allowedLengths_1_1.done; allowedLengths_1_1 = allowedLengths_1.next()) {\n                var value = allowedLengths_1_1.value;\n                if (length === value) {\n                    lengthOK = true;\n                    break;\n                }\n                if (value > maxAllowedLength) {\n                    maxAllowedLength = value;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (allowedLengths_1_1 && !allowedLengths_1_1.done && (_a = allowedLengths_1.return)) _a.call(allowedLengths_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        if (!lengthOK && length > maxAllowedLength) {\n            lengthOK = true;\n        }\n        if (!lengthOK) {\n            throw new FormatException();\n        }\n        var points = [new ResultPoint(startRange[1], rowNumber), new ResultPoint(endRange[0], rowNumber)];\n        var resultReturn = new Result(resultString, null, // no natural byte representation for these barcodes\n        0, points, BarcodeFormat.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    ITFReader.decodeMiddle = function (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        var counterDigitPair = new Int32Array(10); // 10\n        var counterBlack = new Int32Array(5); // 5\n        var 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 (var k = 0; k < 5; k++) {\n                var twoK = 2 * k;\n                counterBlack[k] = counterDigitPair[twoK];\n                counterWhite[k] = counterDigitPair[twoK + 1];\n            }\n            var 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    ITFReader.prototype.decodeStart = function (row) {\n        var endStart = ITFReader.skipWhiteSpace(row);\n        var 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    ITFReader.prototype.validateQuietZone = function (row, startPattern) {\n        var 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 (var 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    ITFReader.skipWhiteSpace = function (row) {\n        var width = row.getSize();\n        var 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    ITFReader.prototype.decodeEnd = function (row) {\n        // For convenience, reverse the row and then\n        // search from 'the start' for the end block\n        row.reverse();\n        try {\n            var endStart = ITFReader.skipWhiteSpace(row);\n            var endPattern = void 0;\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            var 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    ITFReader.findGuardPattern = function (row, rowOffset, pattern) {\n        var patternLength = pattern.length;\n        var counters = new Int32Array(patternLength);\n        var width = row.getSize();\n        var isWhite = false;\n        var counterPosition = 0;\n        var patternStart = rowOffset;\n        counters.fill(0);\n        for (var 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    ITFReader.decodeDigit = function (counters) {\n        var bestVariance = ITFReader.MAX_AVG_VARIANCE; // worst variance we'll accept\n        var bestMatch = -1;\n        var max = ITFReader.PATTERNS.length;\n        for (var i = 0; i < max; i++) {\n            var pattern = ITFReader.PATTERNS[i];\n            var 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    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    return ITFReader;\n}(OneDReader));\nexport default ITFReader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport OneDReader from './OneDReader';\nimport NotFoundException from '../NotFoundException';\nimport FormatException from '../FormatException';\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 */\nvar AbstractUPCEANReader = /** @class */ (function (_super) {\n    __extends(AbstractUPCEANReader, _super);\n    function AbstractUPCEANReader() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.decodeRowStringBuffer = '';\n        return _this;\n    }\n    // private final UPCEANExtensionSupport extensionReader;\n    // private final EANManufacturerOrgSupport eanManSupport;\n    /*\n    protected UPCEANReader() {\n        decodeRowStringBuffer = new StringBuilder(20);\n        extensionReader = new UPCEANExtensionSupport();\n        eanManSupport = new EANManufacturerOrgSupport();\n    }\n    */\n    AbstractUPCEANReader.findStartGuardPattern = function (row) {\n        var foundStart = false;\n        var startRange;\n        var nextStart = 0;\n        var 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            var start = startRange[0];\n            nextStart = startRange[1];\n            var quietStart = start - (nextStart - start);\n            if (quietStart >= 0) {\n                foundStart = row.isRange(quietStart, start, false);\n            }\n        }\n        return startRange;\n    };\n    AbstractUPCEANReader.checkChecksum = function (s) {\n        return AbstractUPCEANReader.checkStandardUPCEANChecksum(s);\n    };\n    AbstractUPCEANReader.checkStandardUPCEANChecksum = function (s) {\n        var length = s.length;\n        if (length === 0)\n            return false;\n        var check = parseInt(s.charAt(length - 1), 10);\n        return AbstractUPCEANReader.getStandardUPCEANChecksum(s.substring(0, length - 1)) === check;\n    };\n    AbstractUPCEANReader.getStandardUPCEANChecksum = function (s) {\n        var length = s.length;\n        var sum = 0;\n        for (var i = length - 1; i >= 0; i -= 2) {\n            var 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 (var i = length - 2; i >= 0; i -= 2) {\n            var 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    AbstractUPCEANReader.decodeEnd = function (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    AbstractUPCEANReader.findGuardPatternWithoutCounters = function (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    AbstractUPCEANReader.findGuardPattern = function (row, rowOffset, whiteFirst, pattern, counters) {\n        var width = row.getSize();\n        rowOffset = whiteFirst ? row.getNextUnset(rowOffset) : row.getNextSet(rowOffset);\n        var counterPosition = 0;\n        var patternStart = rowOffset;\n        var patternLength = pattern.length;\n        var isWhite = whiteFirst;\n        for (var 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                    var slice = counters.slice(2, counters.length);\n                    for (var 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    AbstractUPCEANReader.decodeDigit = function (row, counters, rowOffset, patterns) {\n        this.recordPattern(row, rowOffset, counters);\n        var bestVariance = this.MAX_AVG_VARIANCE;\n        var bestMatch = -1;\n        var max = patterns.length;\n        for (var i = 0; i < max; i++) {\n            var pattern = patterns[i];\n            var 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    // 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    return AbstractUPCEANReader;\n}(OneDReader));\nexport default AbstractUPCEANReader;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\n// import UPCEANReader from './UPCEANReader';\nimport AbstractUPCEANReader from './AbstractUPCEANReader';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\nimport ResultMetadataType from '../ResultMetadataType';\nimport NotFoundException from '../NotFoundException';\n/**\n * @see UPCEANExtension2Support\n */\nvar UPCEANExtension5Support = /** @class */ (function () {\n    function UPCEANExtension5Support() {\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    UPCEANExtension5Support.prototype.decodeRow = function (rowNumber, row, extensionStartRange) {\n        var result = this.decodeRowStringBuffer;\n        var end = this.decodeMiddle(row, extensionStartRange, result);\n        var resultString = result.toString();\n        var extensionData = UPCEANExtension5Support.parseExtensionString(resultString);\n        var resultPoints = [\n            new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0, rowNumber),\n            new ResultPoint(end, rowNumber)\n        ];\n        var extensionResult = new Result(resultString, null, 0, resultPoints, BarcodeFormat.UPC_EAN_EXTENSION, new Date().getTime());\n        if (extensionData != null) {\n            extensionResult.putAllMetadata(extensionData);\n        }\n        return extensionResult;\n    };\n    UPCEANExtension5Support.prototype.decodeMiddle = function (row, startRange, resultString) {\n        var e_1, _a;\n        var counters = this.decodeMiddleCounters;\n        counters[0] = 0;\n        counters[1] = 0;\n        counters[2] = 0;\n        counters[3] = 0;\n        var end = row.getSize();\n        var rowOffset = startRange[1];\n        var lgPatternFound = 0;\n        for (var x = 0; x < 5 && rowOffset < end; x++) {\n            var bestMatch = AbstractUPCEANReader.decodeDigit(row, counters, rowOffset, AbstractUPCEANReader.L_AND_G_PATTERNS);\n            resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n            try {\n                for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n                    var counter = counters_1_1.value;\n                    rowOffset += counter;\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n                }\n                finally { if (e_1) throw e_1.error; }\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        var checkDigit = this.determineCheckDigit(lgPatternFound);\n        if (UPCEANExtension5Support.extensionChecksum(resultString.toString()) !== checkDigit) {\n            throw new NotFoundException();\n        }\n        return rowOffset;\n    };\n    UPCEANExtension5Support.extensionChecksum = function (s) {\n        var length = s.length;\n        var sum = 0;\n        for (var i = length - 2; i >= 0; i -= 2) {\n            sum += s.charAt(i).charCodeAt(0) - '0'.charCodeAt(0);\n        }\n        sum *= 3;\n        for (var 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    UPCEANExtension5Support.prototype.determineCheckDigit = function (lgPatternFound) {\n        for (var d = 0; d < 10; d++) {\n            if (lgPatternFound === this.CHECK_DIGIT_ENCODINGS[d]) {\n                return d;\n            }\n        }\n        throw new NotFoundException();\n    };\n    UPCEANExtension5Support.parseExtensionString = function (raw) {\n        if (raw.length !== 5) {\n            return null;\n        }\n        var value = UPCEANExtension5Support.parseExtension5String(raw);\n        if (value == null) {\n            return null;\n        }\n        return new Map([[ResultMetadataType.SUGGESTED_PRICE, value]]);\n    };\n    UPCEANExtension5Support.parseExtension5String = function (raw) {\n        var 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        var rawAmount = parseInt(raw.substring(1));\n        var unitsString = (rawAmount / 100).toString();\n        var hundredths = rawAmount % 100;\n        var hundredthsString = hundredths < 10 ? '0' + hundredths : hundredths.toString(); // fixme\n        return currency + unitsString + '.' + hundredthsString;\n    };\n    return UPCEANExtension5Support;\n}());\nexport default UPCEANExtension5Support;\n", "/*\n * Copyright (C) 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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\nimport AbstractUPCEANReader from './AbstractUPCEANReader';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\nimport ResultMetadataType from '../ResultMetadataType';\nimport NotFoundException from '../NotFoundException';\n/**\n * @see UPCEANExtension5Support\n */\nvar UPCEANExtension2Support = /** @class */ (function () {\n    function UPCEANExtension2Support() {\n        this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n        this.decodeRowStringBuffer = '';\n    }\n    UPCEANExtension2Support.prototype.decodeRow = function (rowNumber, row, extensionStartRange) {\n        var result = this.decodeRowStringBuffer;\n        var end = this.decodeMiddle(row, extensionStartRange, result);\n        var resultString = result.toString();\n        var extensionData = UPCEANExtension2Support.parseExtensionString(resultString);\n        var resultPoints = [\n            new ResultPoint((extensionStartRange[0] + extensionStartRange[1]) / 2.0, rowNumber),\n            new ResultPoint(end, rowNumber)\n        ];\n        var extensionResult = new Result(resultString, null, 0, resultPoints, BarcodeFormat.UPC_EAN_EXTENSION, new Date().getTime());\n        if (extensionData != null) {\n            extensionResult.putAllMetadata(extensionData);\n        }\n        return extensionResult;\n    };\n    UPCEANExtension2Support.prototype.decodeMiddle = function (row, startRange, resultString) {\n        var e_1, _a;\n        var counters = this.decodeMiddleCounters;\n        counters[0] = 0;\n        counters[1] = 0;\n        counters[2] = 0;\n        counters[3] = 0;\n        var end = row.getSize();\n        var rowOffset = startRange[1];\n        var checkParity = 0;\n        for (var x = 0; x < 2 && rowOffset < end; x++) {\n            var bestMatch = AbstractUPCEANReader.decodeDigit(row, counters, rowOffset, AbstractUPCEANReader.L_AND_G_PATTERNS);\n            resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n            try {\n                for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n                    var counter = counters_1_1.value;\n                    rowOffset += counter;\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n                }\n                finally { if (e_1) throw e_1.error; }\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    UPCEANExtension2Support.parseExtensionString = function (raw) {\n        if (raw.length !== 2) {\n            return null;\n        }\n        return new Map([[ResultMetadataType.ISSUE_NUMBER, parseInt(raw)]]);\n    };\n    return UPCEANExtension2Support;\n}());\nexport default UPCEANExtension2Support;\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 */\nimport AbstractUPCEANReader from './AbstractUPCEANReader';\nimport UPCEANExtension5Support from './UPCEANExtension5Support';\nimport UPCEANExtension2Support from './UPCEANExtension2Support';\nvar UPCEANExtensionSupport = /** @class */ (function () {\n    function UPCEANExtensionSupport() {\n    }\n    UPCEANExtensionSupport.decodeRow = function (rowNumber, row, rowOffset) {\n        var extensionStartRange = AbstractUPCEANReader.findGuardPattern(row, rowOffset, false, this.EXTENSION_START_PATTERN, new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));\n        try {\n            // return null;\n            var fiveSupport = new UPCEANExtension5Support();\n            return fiveSupport.decodeRow(rowNumber, row, extensionStartRange);\n        }\n        catch (err) {\n            // return null;\n            var twoSupport = new UPCEANExtension2Support();\n            return twoSupport.decodeRow(rowNumber, row, extensionStartRange);\n        }\n    };\n    UPCEANExtensionSupport.EXTENSION_START_PATTERN = Int32Array.from([1, 1, 2]);\n    return UPCEANExtensionSupport;\n}());\nexport default UPCEANExtensionSupport;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport Result from '../Result';\nimport ResultMetadataType from '../ResultMetadataType';\nimport ResultPoint from '../ResultPoint';\nimport UPCEANExtensionSupport from './UPCEANExtensionSupport';\nimport AbstractUPCEANReader from './AbstractUPCEANReader';\nimport NotFoundException from '../NotFoundException';\nimport FormatException from '../FormatException';\nimport ChecksumException from '../ChecksumException';\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 */\nvar UPCEANReader = /** @class */ (function (_super) {\n    __extends(UPCEANReader, _super);\n    function UPCEANReader() {\n        var _this = _super.call(this) || this;\n        _this.decodeRowStringBuffer = '';\n        UPCEANReader.L_AND_G_PATTERNS = UPCEANReader.L_PATTERNS.map(function (arr) { return Int32Array.from(arr); });\n        for (var i = 10; i < 20; i++) {\n            var widths = UPCEANReader.L_PATTERNS[i - 10];\n            var reversedWidths = new Int32Array(widths.length);\n            for (var 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        return _this;\n    }\n    UPCEANReader.prototype.decodeRow = function (rowNumber, row, hints) {\n        var startGuardRange = UPCEANReader.findStartGuardPattern(row);\n        var resultPointCallback = hints == null ? null : hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n        if (resultPointCallback != null) {\n            var resultPoint_1 = new ResultPoint((startGuardRange[0] + startGuardRange[1]) / 2.0, rowNumber);\n            resultPointCallback.foundPossibleResultPoint(resultPoint_1);\n        }\n        var budello = this.decodeMiddle(row, startGuardRange, this.decodeRowStringBuffer);\n        var endStart = budello.rowOffset;\n        var result = budello.resultString;\n        if (resultPointCallback != null) {\n            var resultPoint_2 = new ResultPoint(endStart, rowNumber);\n            resultPointCallback.foundPossibleResultPoint(resultPoint_2);\n        }\n        var endRange = UPCEANReader.decodeEnd(row, endStart);\n        if (resultPointCallback != null) {\n            var resultPoint_3 = new ResultPoint((endRange[0] + endRange[1]) / 2.0, rowNumber);\n            resultPointCallback.foundPossibleResultPoint(resultPoint_3);\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        var end = endRange[1];\n        var quietEnd = end + (end - endRange[0]);\n        if (quietEnd >= row.getSize() || !row.isRange(end, quietEnd, false)) {\n            throw new NotFoundException();\n        }\n        var 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        var left = (startGuardRange[1] + startGuardRange[0]) / 2.0;\n        var right = (endRange[1] + endRange[0]) / 2.0;\n        var format = this.getBarcodeFormat();\n        var resultPoint = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)];\n        var decodeResult = new Result(resultString, null, 0, resultPoint, format, new Date().getTime());\n        var extensionLength = 0;\n        try {\n            var extensionResult = UPCEANExtensionSupport.decodeRow(rowNumber, row, endRange[1]);\n            decodeResult.putMetadata(ResultMetadataType.UPC_EAN_EXTENSION, extensionResult.getText());\n            decodeResult.putAllMetadata(extensionResult.getResultMetadata());\n            decodeResult.addResultPoints(extensionResult.getResultPoints());\n            extensionLength = extensionResult.getText().length;\n        }\n        catch (err) {\n        }\n        var allowedExtensions = hints == null ? null : hints.get(DecodeHintType.ALLOWED_EAN_EXTENSIONS);\n        if (allowedExtensions != null) {\n            var valid = false;\n            for (var length_1 in allowedExtensions) {\n                if (extensionLength.toString() === length_1) { // check me\n                    valid = true;\n                    break;\n                }\n            }\n            if (!valid) {\n                throw new NotFoundException();\n            }\n        }\n        if (format === BarcodeFormat.EAN_13 || format === BarcodeFormat.UPC_A) {\n            // let countryID = eanManSupport.lookupContryIdentifier(resultString); todo\n            // if (countryID != null) {\n            //     decodeResult.putMetadata(ResultMetadataType.POSSIBLE_COUNTRY, countryID);\n            // }\n        }\n        return decodeResult;\n    };\n    UPCEANReader.checkChecksum = function (s) {\n        return UPCEANReader.checkStandardUPCEANChecksum(s);\n    };\n    UPCEANReader.checkStandardUPCEANChecksum = function (s) {\n        var length = s.length;\n        if (length === 0)\n            return false;\n        var check = parseInt(s.charAt(length - 1), 10);\n        return UPCEANReader.getStandardUPCEANChecksum(s.substring(0, length - 1)) === check;\n    };\n    UPCEANReader.getStandardUPCEANChecksum = function (s) {\n        var length = s.length;\n        var sum = 0;\n        for (var i = length - 1; i >= 0; i -= 2) {\n            var 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 (var i = length - 2; i >= 0; i -= 2) {\n            var 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    UPCEANReader.decodeEnd = function (row, endStart) {\n        return UPCEANReader.findGuardPattern(row, endStart, false, UPCEANReader.START_END_PATTERN, new Int32Array(UPCEANReader.START_END_PATTERN.length).fill(0));\n    };\n    return UPCEANReader;\n}(AbstractUPCEANReader));\nexport default UPCEANReader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\nimport UPCEANReader from './UPCEANReader';\nimport NotFoundException from '../NotFoundException';\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 */\nvar EAN13Reader = /** @class */ (function (_super) {\n    __extends(EAN13Reader, _super);\n    function EAN13Reader() {\n        var _this = _super.call(this) || this;\n        _this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n        return _this;\n    }\n    EAN13Reader.prototype.decodeMiddle = function (row, startRange, resultString) {\n        var e_1, _a, e_2, _b;\n        var counters = this.decodeMiddleCounters;\n        counters[0] = 0;\n        counters[1] = 0;\n        counters[2] = 0;\n        counters[3] = 0;\n        var end = row.getSize();\n        var rowOffset = startRange[1];\n        var lgPatternFound = 0;\n        for (var x = 0; x < 6 && rowOffset < end; x++) {\n            var bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_AND_G_PATTERNS);\n            resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n            try {\n                for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n                    var counter = counters_1_1.value;\n                    rowOffset += counter;\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            if (bestMatch >= 10) {\n                lgPatternFound |= 1 << (5 - x);\n            }\n        }\n        resultString = EAN13Reader.determineFirstDigit(resultString, lgPatternFound);\n        var middleRange = UPCEANReader.findGuardPattern(row, rowOffset, true, UPCEANReader.MIDDLE_PATTERN, new Int32Array(UPCEANReader.MIDDLE_PATTERN.length).fill(0));\n        rowOffset = middleRange[1];\n        for (var x = 0; x < 6 && rowOffset < end; x++) {\n            var bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n            resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n            try {\n                for (var counters_2 = (e_2 = void 0, __values(counters)), counters_2_1 = counters_2.next(); !counters_2_1.done; counters_2_1 = counters_2.next()) {\n                    var counter = counters_2_1.value;\n                    rowOffset += counter;\n                }\n            }\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n            finally {\n                try {\n                    if (counters_2_1 && !counters_2_1.done && (_b = counters_2.return)) _b.call(counters_2);\n                }\n                finally { if (e_2) throw e_2.error; }\n            }\n        }\n        return { rowOffset: rowOffset, resultString: resultString };\n    };\n    EAN13Reader.prototype.getBarcodeFormat = function () {\n        return BarcodeFormat.EAN_13;\n    };\n    EAN13Reader.determineFirstDigit = function (resultString, lgPatternFound) {\n        for (var 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    EAN13Reader.FIRST_DIGIT_ENCODINGS = [0x00, 0x0B, 0x0D, 0xE, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A];\n    return EAN13Reader;\n}(UPCEANReader));\nexport default EAN13Reader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\nimport UPCEANReader from './UPCEANReader';\n/**\n * <p>Implements decoding of the EAN-8 format.</p>\n *\n * @author Sean Owen\n */\nvar EAN8Reader = /** @class */ (function (_super) {\n    __extends(EAN8Reader, _super);\n    function EAN8Reader() {\n        var _this = _super.call(this) || this;\n        _this.decodeMiddleCounters = Int32Array.from([0, 0, 0, 0]);\n        return _this;\n    }\n    EAN8Reader.prototype.decodeMiddle = function (row, startRange, resultString) {\n        var e_1, _a, e_2, _b;\n        var counters = this.decodeMiddleCounters;\n        counters[0] = 0;\n        counters[1] = 0;\n        counters[2] = 0;\n        counters[3] = 0;\n        var end = row.getSize();\n        var rowOffset = startRange[1];\n        for (var x = 0; x < 4 && rowOffset < end; x++) {\n            var bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n            resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n            try {\n                for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n                    var counter = counters_1_1.value;\n                    rowOffset += counter;\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }\n        var middleRange = UPCEANReader.findGuardPattern(row, rowOffset, true, UPCEANReader.MIDDLE_PATTERN, new Int32Array(UPCEANReader.MIDDLE_PATTERN.length).fill(0));\n        rowOffset = middleRange[1];\n        for (var x = 0; x < 4 && rowOffset < end; x++) {\n            var bestMatch = UPCEANReader.decodeDigit(row, counters, rowOffset, UPCEANReader.L_PATTERNS);\n            resultString += String.fromCharCode(('0'.charCodeAt(0) + bestMatch));\n            try {\n                for (var counters_2 = (e_2 = void 0, __values(counters)), counters_2_1 = counters_2.next(); !counters_2_1.done; counters_2_1 = counters_2.next()) {\n                    var counter = counters_2_1.value;\n                    rowOffset += counter;\n                }\n            }\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n            finally {\n                try {\n                    if (counters_2_1 && !counters_2_1.done && (_b = counters_2.return)) _b.call(counters_2);\n                }\n                finally { if (e_2) throw e_2.error; }\n            }\n        }\n        return { rowOffset: rowOffset, resultString: resultString };\n    };\n    EAN8Reader.prototype.getBarcodeFormat = function () {\n        return BarcodeFormat.EAN_8;\n    };\n    return EAN8Reader;\n}(UPCEANReader));\nexport default EAN8Reader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport Result from '../Result';\nimport NotFoundException from '../NotFoundException';\nimport EAN13Reader from './EAN13Reader';\nimport UPCEANReader from './UPCEANReader';\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 */\nvar UPCAReader = /** @class */ (function (_super) {\n    __extends(UPCAReader, _super);\n    function UPCAReader() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.ean13Reader = new EAN13Reader();\n        return _this;\n    }\n    // @Override\n    UPCAReader.prototype.getBarcodeFormat = function () {\n        return BarcodeFormat.UPC_A;\n    };\n    // Note that we don't try rotation without the try harder flag, even if rotation was supported.\n    // @Override\n    UPCAReader.prototype.decode = function (image, hints) {\n        return this.maybeReturnResult(this.ean13Reader.decode(image));\n    };\n    // @Override\n    UPCAReader.prototype.decodeRow = function (rowNumber, row, hints) {\n        return this.maybeReturnResult(this.ean13Reader.decodeRow(rowNumber, row, hints));\n    };\n    // @Override\n    UPCAReader.prototype.decodeMiddle = function (row, startRange, resultString) {\n        return this.ean13Reader.decodeMiddle(row, startRange, resultString);\n    };\n    UPCAReader.prototype.maybeReturnResult = function (result) {\n        var text = result.getText();\n        if (text.charAt(0) === '0') {\n            var upcaResult = new Result(text.substring(1), null, null, result.getResultPoints(), BarcodeFormat.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    UPCAReader.prototype.reset = function () {\n        this.ean13Reader.reset();\n    };\n    return UPCAReader;\n}(UPCEANReader));\nexport default UPCAReader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport UPCEANReader from './UPCEANReader';\nimport StringBuilder from '../util/StringBuilder';\nimport NotFoundException from '../NotFoundException';\nimport BarcodeFormat from '../BarcodeFormat';\n// package com.google.zxing.oned;\n// import com.google.zxing.BarcodeFormat;\n// import com.google.zxing.FormatException;\n// import com.google.zxing.NotFoundException;\n// import com.google.zxing.common.BitArray;\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 */\nvar UPCEReader = /** @class */ (function (_super) {\n    __extends(UPCEReader, _super);\n    function UPCEReader() {\n        var _this = _super.call(this) || this;\n        _this.decodeMiddleCounters = new Int32Array(4);\n        return _this;\n    }\n    /**\n     * @throws NotFoundException\n     */\n    // @Override\n    UPCEReader.prototype.decodeMiddle = function (row, startRange, result) {\n        var e_1, _a;\n        var counters = this.decodeMiddleCounters.map(function (x) { return x; });\n        counters[0] = 0;\n        counters[1] = 0;\n        counters[2] = 0;\n        counters[3] = 0;\n        var end = row.getSize();\n        var rowOffset = startRange[1];\n        var lgPatternFound = 0;\n        for (var x = 0; x < 6 && rowOffset < end; x++) {\n            var bestMatch = UPCEReader.decodeDigit(row, counters, rowOffset, UPCEReader.L_AND_G_PATTERNS);\n            result += String.fromCharCode(('0'.charCodeAt(0) + bestMatch % 10));\n            try {\n                for (var counters_1 = (e_1 = void 0, __values(counters)), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n                    var counter = counters_1_1.value;\n                    rowOffset += counter;\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            if (bestMatch >= 10) {\n                lgPatternFound |= 1 << (5 - x);\n            }\n        }\n        UPCEReader.determineNumSysAndCheckDigit(new StringBuilder(result), lgPatternFound);\n        return rowOffset;\n    };\n    /**\n     * @throws NotFoundException\n     */\n    // @Override\n    UPCEReader.prototype.decodeEnd = function (row, endStart) {\n        return UPCEReader.findGuardPatternWithoutCounters(row, endStart, true, UPCEReader.MIDDLE_END_PATTERN);\n    };\n    /**\n     * @throws FormatException\n     */\n    // @Override\n    UPCEReader.prototype.checkChecksum = function (s) {\n        return UPCEANReader.checkChecksum(UPCEReader.convertUPCEtoUPCA(s));\n    };\n    /**\n     * @throws NotFoundException\n     */\n    UPCEReader.determineNumSysAndCheckDigit = function (resultString, lgPatternFound) {\n        for (var numSys = 0; numSys <= 1; numSys++) {\n            for (var d = 0; d < 10; d++) {\n                if (lgPatternFound === this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[numSys][d]) {\n                    resultString.insert(0, /*(char)*/ ('0' + numSys));\n                    resultString.append(/*(char)*/ ('0' + d));\n                    return;\n                }\n            }\n        }\n        throw NotFoundException.getNotFoundInstance();\n    };\n    // @Override\n    UPCEReader.prototype.getBarcodeFormat = function () {\n        return BarcodeFormat.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    UPCEReader.convertUPCEtoUPCA = function (upce) {\n        // the following line is equivalent to upce.getChars(1, 7, upceChars, 0);\n        var upceChars = upce.slice(1, 7).split('').map(function (x) { return x.charCodeAt(0); });\n        var result = new StringBuilder( /*12*/);\n        result.append(upce.charAt(0));\n        var 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     * 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, 0x1]),\n    ];\n    return UPCEReader;\n}(UPCEANReader));\nexport default UPCEReader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport Result from '../Result';\nimport OneDReader from './OneDReader';\nimport EAN13Reader from './EAN13Reader';\nimport EAN8Reader from './EAN8Reader';\nimport UPCAReader from './UPCAReader';\nimport NotFoundException from '../NotFoundException';\nimport UPCEReader from './UPCEReader';\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 */\nvar MultiFormatUPCEANReader = /** @class */ (function (_super) {\n    __extends(MultiFormatUPCEANReader, _super);\n    function MultiFormatUPCEANReader(hints) {\n        var _this = _super.call(this) || this;\n        var possibleFormats = hints == null ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS);\n        var readers = [];\n        if (possibleFormats != null) {\n            if (possibleFormats.indexOf(BarcodeFormat.EAN_13) > -1) {\n                readers.push(new EAN13Reader());\n            }\n            if (possibleFormats.indexOf(BarcodeFormat.UPC_A) > -1) {\n                readers.push(new UPCAReader());\n            }\n            if (possibleFormats.indexOf(BarcodeFormat.EAN_8) > -1) {\n                readers.push(new EAN8Reader());\n            }\n            if (possibleFormats.indexOf(BarcodeFormat.UPC_E) > -1) {\n                readers.push(new UPCEReader());\n            }\n        }\n        if (readers.length === 0) {\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        return _this;\n    }\n    MultiFormatUPCEANReader.prototype.decodeRow = function (rowNumber, row, hints) {\n        var e_1, _a;\n        try {\n            for (var _b = __values(this.readers), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var reader = _c.value;\n                try {\n                    // const result: Result = reader.decodeRow(rowNumber, row, startGuardPattern, hints);\n                    var 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                    var ean13MayBeUPCA = result.getBarcodeFormat() === BarcodeFormat.EAN_13 &&\n                        result.getText().charAt(0) === '0';\n                    // @SuppressWarnings(\"unchecked\")\n                    var possibleFormats = hints == null ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS);\n                    var canReturnUPCA = possibleFormats == null || possibleFormats.includes(BarcodeFormat.UPC_A);\n                    if (ean13MayBeUPCA && canReturnUPCA) {\n                        var rawBytes = result.getRawBytes();\n                        // Transfer the metadata across\n                        var resultUPCA = new Result(result.getText().substring(1), rawBytes, (rawBytes ? rawBytes.length : null), result.getResultPoints(), BarcodeFormat.UPC_A);\n                        resultUPCA.putAllMetadata(result.getResultMetadata());\n                        return resultUPCA;\n                    }\n                    return result;\n                }\n                catch (err) {\n                    // continue;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        throw new NotFoundException();\n    };\n    MultiFormatUPCEANReader.prototype.reset = function () {\n        var e_2, _a;\n        try {\n            for (var _b = __values(this.readers), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var reader = _c.value;\n                reader.reset();\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n    };\n    return MultiFormatUPCEANReader;\n}(OneDReader));\nexport default MultiFormatUPCEANReader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport NotFoundException from '../NotFoundException';\nimport OneDReader from './OneDReader';\nimport Result from '../Result';\nimport ResultPoint from '../ResultPoint';\n/**\n * <p>Decodes CodaBar barcodes. </p>\n *\n * @author Evan @dodobelieve\n * @see CodaBarReader\n */\nvar CodaBarReader = /** @class */ (function (_super) {\n    __extends(CodaBarReader, _super);\n    function CodaBarReader() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.CODA_BAR_CHAR_SET = {\n            nnnnnww: '0',\n            nnnnwwn: '1',\n            nnnwnnw: '2',\n            wwnnnnn: '3',\n            nnwnnwn: '4',\n            wnnnnwn: '5',\n            nwnnnnw: '6',\n            nwnnwnn: '7',\n            nwwnnnn: '8',\n            wnnwnnn: '9',\n            nnnwwnn: '-',\n            nnwwnnn: '$',\n            wnnnwnw: ':',\n            wnwnnnw: '/',\n            wnwnwnn: '.',\n            nnwwwww: '+',\n            nnwwnwn: 'A',\n            nwnwnnw: 'B',\n            nnnwnww: 'C',\n            nnnwwwn: 'D'\n        };\n        return _this;\n    }\n    CodaBarReader.prototype.decodeRow = function (rowNumber, row, hints) {\n        var validRowData = this.getValidRowData(row);\n        if (!validRowData)\n            throw new NotFoundException();\n        var retStr = this.codaBarDecodeRow(validRowData.row);\n        if (!retStr)\n            throw new NotFoundException();\n        return new Result(retStr, null, 0, [new ResultPoint(validRowData.left, rowNumber), new ResultPoint(validRowData.right, rowNumber)], BarcodeFormat.CODABAR, new Date().getTime());\n    };\n    /**\n     * converts bit array to valid data array(lengths of black bits and white bits)\n     * @param row bit array to convert\n     */\n    CodaBarReader.prototype.getValidRowData = function (row) {\n        var booleanArr = row.toArray();\n        var startIndex = booleanArr.indexOf(true);\n        if (startIndex === -1)\n            return null;\n        var lastIndex = booleanArr.lastIndexOf(true);\n        if (lastIndex <= startIndex)\n            return null;\n        booleanArr = booleanArr.slice(startIndex, lastIndex + 1);\n        var result = [];\n        var lastBit = booleanArr[0];\n        var bitLength = 1;\n        for (var i = 1; i < booleanArr.length; i++) {\n            if (booleanArr[i] === lastBit) {\n                bitLength++;\n            }\n            else {\n                lastBit = booleanArr[i];\n                result.push(bitLength);\n                bitLength = 1;\n            }\n        }\n        result.push(bitLength);\n        // CodaBar code data valid\n        if (result.length < 23 && (result.length + 1) % 8 !== 0)\n            return null;\n        return { row: result, left: startIndex, right: lastIndex };\n    };\n    /**\n     * decode codabar code\n     * @param row row to cecode\n     */\n    CodaBarReader.prototype.codaBarDecodeRow = function (row) {\n        var code = [];\n        var barThreshold = Math.ceil(row.reduce(function (pre, item) { return (pre + item) / 2; }, 0));\n        // Read one encoded character at a time.\n        while (row.length > 0) {\n            var seg = row.splice(0, 8).splice(0, 7);\n            var key = seg.map(function (len) { return (len < barThreshold ? 'n' : 'w'); }).join('');\n            if (this.CODA_BAR_CHAR_SET[key] === undefined)\n                return null;\n            code.push(this.CODA_BAR_CHAR_SET[key]);\n        }\n        var strCode = code.join('');\n        if (this.validCodaBarString(strCode))\n            return strCode;\n        return null;\n    };\n    /**\n     * check if the string is a CodaBar string\n     * @param src string to determine\n     */\n    CodaBarReader.prototype.validCodaBarString = function (src) {\n        var reg = /^[A-D].{1,}[A-D]$/;\n        return reg.test(src);\n    };\n    return CodaBarReader;\n}(OneDReader));\nexport default CodaBarReader;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport MathUtils from '../../common/detector/MathUtils';\nimport NotFoundException from '../../NotFoundException';\nimport OneDReader from '../OneDReader';\n// import Integer from '../../util/Integer';\n// import Float from '../../util/Float';\nvar AbstractRSSReader = /** @class */ (function (_super) {\n    __extends(AbstractRSSReader, _super);\n    function AbstractRSSReader() {\n        var _this = _super.call(this) || this;\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        return _this;\n    }\n    AbstractRSSReader.prototype.getDecodeFinderCounters = function () {\n        return this.decodeFinderCounters;\n    };\n    AbstractRSSReader.prototype.getDataCharacterCounters = function () {\n        return this.dataCharacterCounters;\n    };\n    AbstractRSSReader.prototype.getOddRoundingErrors = function () {\n        return this.oddRoundingErrors;\n    };\n    AbstractRSSReader.prototype.getEvenRoundingErrors = function () {\n        return this.evenRoundingErrors;\n    };\n    AbstractRSSReader.prototype.getOddCounts = function () {\n        return this.oddCounts;\n    };\n    AbstractRSSReader.prototype.getEvenCounts = function () {\n        return this.evenCounts;\n    };\n    AbstractRSSReader.prototype.parseFinderValue = function (counters, finderPatterns) {\n        for (var 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    AbstractRSSReader.count = function (array) {\n        return MathUtils.sum(new Int32Array(array));\n    };\n    AbstractRSSReader.increment = function (array, errors) {\n        var index = 0;\n        var biggestError = errors[0];\n        for (var 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    AbstractRSSReader.decrement = function (array, errors) {\n        var index = 0;\n        var biggestError = errors[0];\n        for (var 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    AbstractRSSReader.isFinderPattern = function (counters) {\n        var e_1, _a;\n        var firstTwoSum = counters[0] + counters[1];\n        var sum = firstTwoSum + counters[2] + counters[3];\n        var 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            var minCounter = Number.MAX_SAFE_INTEGER;\n            var maxCounter = Number.MIN_SAFE_INTEGER;\n            try {\n                for (var counters_1 = __values(counters), counters_1_1 = counters_1.next(); !counters_1_1.done; counters_1_1 = counters_1.next()) {\n                    var counter = counters_1_1.value;\n                    if (counter > maxCounter) {\n                        maxCounter = counter;\n                    }\n                    if (counter < minCounter) {\n                        minCounter = counter;\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (counters_1_1 && !counters_1_1.done && (_a = counters_1.return)) _a.call(counters_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            return maxCounter < 10 * minCounter;\n        }\n        return false;\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    return AbstractRSSReader;\n}(OneDReader));\nexport default AbstractRSSReader;\n", "var DataCharacter = /** @class */ (function () {\n    function DataCharacter(value, checksumPortion) {\n        this.value = value;\n        this.checksumPortion = checksumPortion;\n    }\n    DataCharacter.prototype.getValue = function () {\n        return this.value;\n    };\n    DataCharacter.prototype.getChecksumPortion = function () {\n        return this.checksumPortion;\n    };\n    DataCharacter.prototype.toString = function () {\n        return this.value + '(' + this.checksumPortion + ')';\n    };\n    DataCharacter.prototype.equals = function (o) {\n        if (!(o instanceof DataCharacter)) {\n            return false;\n        }\n        var that = o;\n        return this.value === that.value && this.checksumPortion === that.checksumPortion;\n    };\n    DataCharacter.prototype.hashCode = function () {\n        return this.value ^ this.checksumPortion;\n    };\n    return DataCharacter;\n}());\nexport default DataCharacter;\n", "import ResultPoint from '../../ResultPoint';\nvar FinderPattern = /** @class */ (function () {\n    function FinderPattern(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    FinderPattern.prototype.getValue = function () {\n        return this.value;\n    };\n    FinderPattern.prototype.getStartEnd = function () {\n        return this.startEnd;\n    };\n    FinderPattern.prototype.getResultPoints = function () {\n        return this.resultPoints;\n    };\n    FinderPattern.prototype.equals = function (o) {\n        if (!(o instanceof FinderPattern)) {\n            return false;\n        }\n        var that = o;\n        return this.value === that.value;\n    };\n    FinderPattern.prototype.hashCode = function () {\n        return this.value;\n    };\n    return FinderPattern;\n}());\nexport default FinderPattern;\n", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/**\n * RSS util functions.\n */\nvar RSSUtils = /** @class */ (function () {\n    function RSSUtils() {\n    }\n    RSSUtils.getRSSvalue = function (widths, maxWidth, noNarrow) {\n        var e_1, _a;\n        var n = 0;\n        try {\n            for (var widths_1 = __values(widths), widths_1_1 = widths_1.next(); !widths_1_1.done; widths_1_1 = widths_1.next()) {\n                var width = widths_1_1.value;\n                n += width;\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (widths_1_1 && !widths_1_1.done && (_a = widths_1.return)) _a.call(widths_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        var val = 0;\n        var narrowMask = 0;\n        var elements = widths.length;\n        for (var bar = 0; bar < elements - 1; bar++) {\n            var elmWidth = void 0;\n            for (elmWidth = 1, narrowMask |= 1 << bar; elmWidth < widths[bar]; elmWidth++, narrowMask &= ~(1 << bar)) {\n                var 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                    var lessVal = 0;\n                    for (var 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    RSSUtils.combins = function (n, r) {\n        var maxDenom;\n        var 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        var val = 1;\n        var j = 1;\n        for (var 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    return RSSUtils;\n}());\nexport default RSSUtils;\n", "import BitArray from '../../../common/BitArray';\nvar BitArrayBuilder = /** @class */ (function () {\n    function BitArrayBuilder() {\n    }\n    BitArrayBuilder.buildBitArray = function (pairs) {\n        var charNumber = pairs.length * 2 - 1;\n        if (pairs[pairs.length - 1].getRightChar() == null) {\n            charNumber -= 1;\n        }\n        var size = 12 * charNumber;\n        var binary = new BitArray(size);\n        var accPos = 0;\n        var firstPair = pairs[0];\n        var firstValue = firstPair.getRightChar().getValue();\n        for (var i = 11; i >= 0; --i) {\n            if ((firstValue & (1 << i)) !== 0) {\n                binary.set(accPos);\n            }\n            accPos++;\n        }\n        for (var i = 1; i < pairs.length; ++i) {\n            var currentPair = pairs[i];\n            var leftValue = currentPair.getLeftChar().getValue();\n            for (var 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                var rightValue = currentPair.getRightChar().getValue();\n                for (var 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    return BitArrayBuilder;\n}());\nexport default BitArrayBuilder;\n", "var BlockParsedResult = /** @class */ (function () {\n    function BlockParsedResult(finished, decodedInformation) {\n        if (decodedInformation) {\n            this.decodedInformation = null;\n        }\n        else {\n            this.finished = finished;\n            this.decodedInformation = decodedInformation;\n        }\n    }\n    BlockParsedResult.prototype.getDecodedInformation = function () {\n        return this.decodedInformation;\n    };\n    BlockParsedResult.prototype.isFinished = function () {\n        return this.finished;\n    };\n    return BlockParsedResult;\n}());\nexport default BlockParsedResult;\n", "var DecodedObject = /** @class */ (function () {\n    function DecodedObject(newPosition) {\n        this.newPosition = newPosition;\n    }\n    DecodedObject.prototype.getNewPosition = function () {\n        return this.newPosition;\n    };\n    return DecodedObject;\n}());\nexport default DecodedObject;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport DecodedObject from './DecodedObject';\nvar DecodedChar = /** @class */ (function (_super) {\n    __extends(DecodedChar, _super);\n    function DecodedChar(newPosition, value) {\n        var _this = _super.call(this, newPosition) || this;\n        _this.value = value;\n        return _this;\n    }\n    DecodedChar.prototype.getValue = function () {\n        return this.value;\n    };\n    DecodedChar.prototype.isFNC1 = function () {\n        return this.value === DecodedChar.FNC1;\n    };\n    DecodedChar.FNC1 = '$';\n    return DecodedChar;\n}(DecodedObject));\nexport default DecodedChar;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport DecodedObject from './DecodedObject';\nvar DecodedInformation = /** @class */ (function (_super) {\n    __extends(DecodedInformation, _super);\n    function DecodedInformation(newPosition, newString, remainingValue) {\n        var _this = _super.call(this, newPosition) || this;\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        return _this;\n    }\n    DecodedInformation.prototype.getNewString = function () {\n        return this.newString;\n    };\n    DecodedInformation.prototype.isRemaining = function () {\n        return this.remaining;\n    };\n    DecodedInformation.prototype.getRemainingValue = function () {\n        return this.remainingValue;\n    };\n    return DecodedInformation;\n}(DecodedObject));\nexport default DecodedInformation;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport FormatException from '../../../../FormatException';\nimport DecodedObject from './DecodedObject';\nvar DecodedNumeric = /** @class */ (function (_super) {\n    __extends(DecodedNumeric, _super);\n    function DecodedNumeric(newPosition, firstDigit, secondDigit) {\n        var _this = _super.call(this, newPosition) || this;\n        if (firstDigit < 0 || firstDigit > 10 || secondDigit < 0 || secondDigit > 10) {\n            throw new FormatException();\n        }\n        _this.firstDigit = firstDigit;\n        _this.secondDigit = secondDigit;\n        return _this;\n    }\n    DecodedNumeric.prototype.getFirstDigit = function () {\n        return this.firstDigit;\n    };\n    DecodedNumeric.prototype.getSecondDigit = function () {\n        return this.secondDigit;\n    };\n    DecodedNumeric.prototype.getValue = function () {\n        return this.firstDigit * 10 + this.secondDigit;\n    };\n    DecodedNumeric.prototype.isFirstDigitFNC1 = function () {\n        return this.firstDigit === DecodedNumeric.FNC1;\n    };\n    DecodedNumeric.prototype.isSecondDigitFNC1 = function () {\n        return this.secondDigit === DecodedNumeric.FNC1;\n    };\n    DecodedNumeric.prototype.isAnyFNC1 = function () {\n        return this.firstDigit === DecodedNumeric.FNC1 || this.secondDigit === DecodedNumeric.FNC1;\n    };\n    DecodedNumeric.FNC1 = 10;\n    return DecodedNumeric;\n}(DecodedObject));\nexport default DecodedNumeric;\n", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport NotFoundException from '../../../../NotFoundException';\nvar FieldParser = /** @class */ (function () {\n    function FieldParser() {\n    }\n    FieldParser.parseFieldsInGeneralPurpose = function (rawInformation) {\n        var e_1, _a, e_2, _b, e_3, _c, e_4, _d;\n        if (!rawInformation) {\n            return null;\n        }\n        // Processing 2-digit AIs\n        if (rawInformation.length < 2) {\n            throw new NotFoundException();\n        }\n        var firstTwoDigits = rawInformation.substring(0, 2);\n        try {\n            for (var _e = __values(FieldParser.TWO_DIGIT_DATA_LENGTH), _f = _e.next(); !_f.done; _f = _e.next()) {\n                var dataLength = _f.value;\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        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_f && !_f.done && (_a = _e.return)) _a.call(_e);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        if (rawInformation.length < 3) {\n            throw new NotFoundException();\n        }\n        var firstThreeDigits = rawInformation.substring(0, 3);\n        try {\n            for (var _g = __values(FieldParser.THREE_DIGIT_DATA_LENGTH), _h = _g.next(); !_h.done; _h = _g.next()) {\n                var dataLength = _h.value;\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        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        try {\n            for (var _j = __values(FieldParser.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH), _k = _j.next(); !_k.done; _k = _j.next()) {\n                var dataLength = _k.value;\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        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (_k && !_k.done && (_c = _j.return)) _c.call(_j);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        if (rawInformation.length < 4) {\n            throw new NotFoundException();\n        }\n        var firstFourDigits = rawInformation.substring(0, 4);\n        try {\n            for (var _l = __values(FieldParser.FOUR_DIGIT_DATA_LENGTH), _m = _l.next(); !_m.done; _m = _l.next()) {\n                var dataLength = _m.value;\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        }\n        catch (e_4_1) { e_4 = { error: e_4_1 }; }\n        finally {\n            try {\n                if (_m && !_m.done && (_d = _l.return)) _d.call(_l);\n            }\n            finally { if (e_4) throw e_4.error; }\n        }\n        throw new NotFoundException();\n    };\n    FieldParser.processFixedAI = function (aiSize, fieldSize, rawInformation) {\n        if (rawInformation.length < aiSize) {\n            throw new NotFoundException();\n        }\n        var ai = rawInformation.substring(0, aiSize);\n        if (rawInformation.length < aiSize + fieldSize) {\n            throw new NotFoundException();\n        }\n        var field = rawInformation.substring(aiSize, aiSize + fieldSize);\n        var remaining = rawInformation.substring(aiSize + fieldSize);\n        var result = '(' + ai + ')' + field;\n        var parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);\n        return parsedAI == null ? result : result + parsedAI;\n    };\n    FieldParser.processVariableAI = function (aiSize, variableFieldSize, rawInformation) {\n        var ai = rawInformation.substring(0, aiSize);\n        var maxSize;\n        if (rawInformation.length < aiSize + variableFieldSize) {\n            maxSize = rawInformation.length;\n        }\n        else {\n            maxSize = aiSize + variableFieldSize;\n        }\n        var field = rawInformation.substring(aiSize, maxSize);\n        var remaining = rawInformation.substring(maxSize);\n        var result = '(' + ai + ')' + field;\n        var parsedAI = FieldParser.parseFieldsInGeneralPurpose(remaining);\n        return parsedAI == null ? result : result + parsedAI;\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    return FieldParser;\n}());\nexport default FieldParser;\n", "import FormatException from '../../../../FormatException';\nimport IllegalStateException from '../../../../IllegalStateException';\nimport StringBuilder from '../../../../util/StringBuilder';\nimport BlockParsedResult from './BlockParsedResult';\nimport DecodedChar from './DecodedChar';\nimport DecodedInformation from './DecodedInformation';\nimport DecodedNumeric from './DecodedNumeric';\nimport FieldParser from './FieldParser';\nvar GeneralAppIdDecoder = /** @class */ (function () {\n    function GeneralAppIdDecoder(information) {\n        this.buffer = new StringBuilder();\n        this.information = information;\n    }\n    GeneralAppIdDecoder.prototype.decodeAllCodes = function (buff, initialPosition) {\n        var currentPosition = initialPosition;\n        var remaining = null;\n        do {\n            var info = this.decodeGeneralPurposeField(currentPosition, remaining);\n            var 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    GeneralAppIdDecoder.prototype.isStillNumeric = function (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 (var 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    GeneralAppIdDecoder.prototype.decodeNumeric = function (pos) {\n        if (pos + 7 > this.information.getSize()) {\n            var numeric_1 = this.extractNumericValueFromBitArray(pos, 4);\n            if (numeric_1 === 0) {\n                return new DecodedNumeric(this.information.getSize(), DecodedNumeric.FNC1, DecodedNumeric.FNC1);\n            }\n            return new DecodedNumeric(this.information.getSize(), numeric_1 - 1, DecodedNumeric.FNC1);\n        }\n        var numeric = this.extractNumericValueFromBitArray(pos, 7);\n        var digit1 = (numeric - 8) / 11;\n        var digit2 = (numeric - 8) % 11;\n        return new DecodedNumeric(pos + 7, digit1, digit2);\n    };\n    GeneralAppIdDecoder.prototype.extractNumericValueFromBitArray = function (pos, bits) {\n        return GeneralAppIdDecoder.extractNumericValueFromBitArray(this.information, pos, bits);\n    };\n    GeneralAppIdDecoder.extractNumericValueFromBitArray = function (information, pos, bits) {\n        var value = 0;\n        for (var i = 0; i < bits; ++i) {\n            if (information.get(pos + i)) {\n                value |= 1 << (bits - i - 1);\n            }\n        }\n        return value;\n    };\n    GeneralAppIdDecoder.prototype.decodeGeneralPurposeField = function (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        var 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    GeneralAppIdDecoder.prototype.parseBlocks = function () {\n        var isFinished;\n        var result;\n        do {\n            var 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            var positionChanged = initialPosition !== this.current.getPosition();\n            if (!positionChanged && !isFinished) {\n                break;\n            }\n        } while (!isFinished);\n        return result.getDecodedInformation();\n    };\n    GeneralAppIdDecoder.prototype.parseNumericBlock = function () {\n        while (this.isStillNumeric(this.current.getPosition())) {\n            var numeric = this.decodeNumeric(this.current.getPosition());\n            this.current.setPosition(numeric.getNewPosition());\n            if (numeric.isFirstDigitFNC1()) {\n                var information = void 0;\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                var 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    GeneralAppIdDecoder.prototype.parseIsoIec646Block = function () {\n        while (this.isStillIsoIec646(this.current.getPosition())) {\n            var iso = this.decodeIsoIec646(this.current.getPosition());\n            this.current.setPosition(iso.getNewPosition());\n            if (iso.isFNC1()) {\n                var 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    GeneralAppIdDecoder.prototype.parseAlphaBlock = function () {\n        while (this.isStillAlpha(this.current.getPosition())) {\n            var alpha = this.decodeAlphanumeric(this.current.getPosition());\n            this.current.setPosition(alpha.getNewPosition());\n            if (alpha.isFNC1()) {\n                var 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    GeneralAppIdDecoder.prototype.isStillIsoIec646 = function (pos) {\n        if (pos + 5 > this.information.getSize()) {\n            return false;\n        }\n        var 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        var 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        var eightBitValue = this.extractNumericValueFromBitArray(pos, 8);\n        return eightBitValue >= 232 && eightBitValue < 253;\n    };\n    GeneralAppIdDecoder.prototype.decodeIsoIec646 = function (pos) {\n        var 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        var 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        var eightBitValue = this.extractNumericValueFromBitArray(pos, 8);\n        var 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    GeneralAppIdDecoder.prototype.isStillAlpha = function (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        var 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        var sixBitValue = this.extractNumericValueFromBitArray(pos, 6);\n        return sixBitValue >= 16 && sixBitValue < 63; // 63 not included\n    };\n    GeneralAppIdDecoder.prototype.decodeAlphanumeric = function (pos) {\n        var 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        var sixBitValue = this.extractNumericValueFromBitArray(pos, 6);\n        if (sixBitValue >= 32 && sixBitValue < 58) {\n            return new DecodedChar(pos + 6, ('' + (sixBitValue + 33)));\n        }\n        var 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    GeneralAppIdDecoder.prototype.isAlphaTo646ToAlphaLatch = function (pos) {\n        if (pos + 1 > this.information.getSize()) {\n            return false;\n        }\n        for (var 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    GeneralAppIdDecoder.prototype.isAlphaOr646ToNumericLatch = function (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 (var i = pos; i < pos + 3; ++i) {\n            if (this.information.get(i)) {\n                return false;\n            }\n        }\n        return true;\n    };\n    GeneralAppIdDecoder.prototype.isNumericToAlphaNumericLatch = function (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 (var 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    return GeneralAppIdDecoder;\n}());\nexport default GeneralAppIdDecoder;\n", "import GeneralAppIdDecoder from './GeneralAppIdDecoder';\nvar AbstractExpandedDecoder = /** @class */ (function () {\n    function AbstractExpandedDecoder(information) {\n        this.information = information;\n        this.generalDecoder = new GeneralAppIdDecoder(information);\n    }\n    AbstractExpandedDecoder.prototype.getInformation = function () {\n        return this.information;\n    };\n    AbstractExpandedDecoder.prototype.getGeneralDecoder = function () {\n        return this.generalDecoder;\n    };\n    return AbstractExpandedDecoder;\n}());\nexport default AbstractExpandedDecoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AbstractExpandedDecoder from './AbstractExpandedDecoder';\nvar AI01decoder = /** @class */ (function (_super) {\n    __extends(AI01decoder, _super);\n    function AI01decoder(information) {\n        return _super.call(this, information) || this;\n    }\n    AI01decoder.prototype.encodeCompressedGtin = function (buf, currentPos) {\n        buf.append('(01)');\n        var initialPosition = buf.length();\n        buf.append('9');\n        this.encodeCompressedGtinWithoutAI(buf, currentPos, initialPosition);\n    };\n    AI01decoder.prototype.encodeCompressedGtinWithoutAI = function (buf, currentPos, initialBufferPosition) {\n        for (var i = 0; i < 4; ++i) {\n            var 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    AI01decoder.appendCheckDigit = function (buf, currentPos) {\n        var checkDigit = 0;\n        for (var i = 0; i < 13; i++) {\n            // let digit = buf.charAt(i + currentPos) - '0';\n            // To be checked\n            var 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    AI01decoder.GTIN_SIZE = 40;\n    return AI01decoder;\n}(AbstractExpandedDecoder));\nexport default AI01decoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AI01decoder from './AI01decoder';\nimport StringBuilder from '../../../../util/StringBuilder';\nvar AI01AndOtherAIs = /** @class */ (function (_super) {\n    __extends(AI01AndOtherAIs, _super);\n    // the second one is the encodation method, and the other two are for the variable length\n    function AI01AndOtherAIs(information) {\n        return _super.call(this, information) || this;\n    }\n    AI01AndOtherAIs.prototype.parseInformation = function () {\n        var buff = new StringBuilder();\n        buff.append('(01)');\n        var initialGtinPosition = buff.length();\n        var 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    AI01AndOtherAIs.HEADER_SIZE = 1 + 1 + 2; // first bit encodes the linkage flag,\n    return AI01AndOtherAIs;\n}(AI01decoder));\nexport default AI01AndOtherAIs;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport StringBuilder from '../../../../util/StringBuilder';\nimport AbstractExpandedDecoder from './AbstractExpandedDecoder';\nvar AnyAIDecoder = /** @class */ (function (_super) {\n    __extends(AnyAIDecoder, _super);\n    function AnyAIDecoder(information) {\n        return _super.call(this, information) || this;\n    }\n    AnyAIDecoder.prototype.parseInformation = function () {\n        var buf = new StringBuilder();\n        return this.getGeneralDecoder().decodeAllCodes(buf, AnyAIDecoder.HEADER_SIZE);\n    };\n    AnyAIDecoder.HEADER_SIZE = 2 + 1 + 2;\n    return AnyAIDecoder;\n}(AbstractExpandedDecoder));\nexport default AnyAIDecoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AI01decoder from './AI01decoder';\nvar AI01weightDecoder = /** @class */ (function (_super) {\n    __extends(AI01weightDecoder, _super);\n    function AI01weightDecoder(information) {\n        return _super.call(this, information) || this;\n    }\n    AI01weightDecoder.prototype.encodeCompressedWeight = function (buf, currentPos, weightSize) {\n        var originalWeightNumeric = this.getGeneralDecoder().extractNumericValueFromBitArray(currentPos, weightSize);\n        this.addWeightCode(buf, originalWeightNumeric);\n        var weightNumeric = this.checkWeight(originalWeightNumeric);\n        var currentDivisor = 100000;\n        for (var 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    return AI01weightDecoder;\n}(AI01decoder));\nexport default AI01weightDecoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AI01weightDecoder from './AI01weightDecoder';\nimport StringBuilder from '../../../../util/StringBuilder';\nimport NotFoundException from '../../../../NotFoundException';\nvar AI013x0xDecoder = /** @class */ (function (_super) {\n    __extends(AI013x0xDecoder, _super);\n    function AI013x0xDecoder(information) {\n        return _super.call(this, information) || this;\n    }\n    AI013x0xDecoder.prototype.parseInformation = function () {\n        if (this.getInformation().getSize() !==\n            AI013x0xDecoder.HEADER_SIZE +\n                AI01weightDecoder.GTIN_SIZE +\n                AI013x0xDecoder.WEIGHT_SIZE) {\n            throw new NotFoundException();\n        }\n        var 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    AI013x0xDecoder.HEADER_SIZE = 4 + 1;\n    AI013x0xDecoder.WEIGHT_SIZE = 15;\n    return AI013x0xDecoder;\n}(AI01weightDecoder));\nexport default AI013x0xDecoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AI013x0xDecoder from './AI013x0xDecoder';\nvar AI013103decoder = /** @class */ (function (_super) {\n    __extends(AI013103decoder, _super);\n    function AI013103decoder(information) {\n        return _super.call(this, information) || this;\n    }\n    AI013103decoder.prototype.addWeightCode = function (buf, weight) {\n        buf.append('(3103)');\n    };\n    AI013103decoder.prototype.checkWeight = function (weight) {\n        return weight;\n    };\n    return AI013103decoder;\n}(AI013x0xDecoder));\nexport default AI013103decoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AI013x0xDecoder from './AI013x0xDecoder';\nvar AI01320xDecoder = /** @class */ (function (_super) {\n    __extends(AI01320xDecoder, _super);\n    function AI01320xDecoder(information) {\n        return _super.call(this, information) || this;\n    }\n    AI01320xDecoder.prototype.addWeightCode = function (buf, weight) {\n        if (weight < 10000) {\n            buf.append('(3202)');\n        }\n        else {\n            buf.append('(3203)');\n        }\n    };\n    AI01320xDecoder.prototype.checkWeight = function (weight) {\n        if (weight < 10000) {\n            return weight;\n        }\n        return weight - 10000;\n    };\n    return AI01320xDecoder;\n}(AI013x0xDecoder));\nexport default AI01320xDecoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AI01decoder from './AI01decoder';\nimport NotFoundException from '../../../../NotFoundException';\nimport StringBuilder from '../../../../util/StringBuilder';\nvar AI01392xDecoder = /** @class */ (function (_super) {\n    __extends(AI01392xDecoder, _super);\n    function AI01392xDecoder(information) {\n        return _super.call(this, information) || this;\n    }\n    AI01392xDecoder.prototype.parseInformation = function () {\n        if (this.getInformation().getSize() < AI01392xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE) {\n            throw new NotFoundException();\n        }\n        var buf = new StringBuilder();\n        this.encodeCompressedGtin(buf, AI01392xDecoder.HEADER_SIZE);\n        var 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        var 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    AI01392xDecoder.HEADER_SIZE = 5 + 1 + 2;\n    AI01392xDecoder.LAST_DIGIT_SIZE = 2;\n    return AI01392xDecoder;\n}(AI01decoder));\nexport default AI01392xDecoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AI01decoder from './AI01decoder';\nimport NotFoundException from '../../../../NotFoundException';\nimport StringBuilder from '../../../../util/StringBuilder';\nvar AI01393xDecoder = /** @class */ (function (_super) {\n    __extends(AI01393xDecoder, _super);\n    function AI01393xDecoder(information) {\n        return _super.call(this, information) || this;\n    }\n    AI01393xDecoder.prototype.parseInformation = function () {\n        if (this.getInformation().getSize() <\n            AI01393xDecoder.HEADER_SIZE + AI01decoder.GTIN_SIZE) {\n            throw new NotFoundException();\n        }\n        var buf = new StringBuilder();\n        this.encodeCompressedGtin(buf, AI01393xDecoder.HEADER_SIZE);\n        var 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        var firstThreeDigits = this.getGeneralDecoder().extractNumericValueFromBitArray(AI01393xDecoder.HEADER_SIZE +\n            AI01decoder.GTIN_SIZE +\n            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        var generalInformation = this.getGeneralDecoder().decodeGeneralPurposeField(AI01393xDecoder.HEADER_SIZE +\n            AI01decoder.GTIN_SIZE +\n            AI01393xDecoder.LAST_DIGIT_SIZE +\n            AI01393xDecoder.FIRST_THREE_DIGITS_SIZE, null);\n        buf.append(generalInformation.getNewString());\n        return buf.toString();\n    };\n    AI01393xDecoder.HEADER_SIZE = 5 + 1 + 2;\n    AI01393xDecoder.LAST_DIGIT_SIZE = 2;\n    AI01393xDecoder.FIRST_THREE_DIGITS_SIZE = 10;\n    return AI01393xDecoder;\n}(AI01decoder));\nexport default AI01393xDecoder;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport AI01weightDecoder from './AI01weightDecoder';\nimport NotFoundException from '../../../../NotFoundException';\nimport StringBuilder from '../../../../util/StringBuilder';\nvar AI013x0x1xDecoder = /** @class */ (function (_super) {\n    __extends(AI013x0x1xDecoder, _super);\n    function AI013x0x1xDecoder(information, firstAIdigits, dateCode) {\n        var _this = _super.call(this, information) || this;\n        _this.dateCode = dateCode;\n        _this.firstAIdigits = firstAIdigits;\n        return _this;\n    }\n    AI013x0x1xDecoder.prototype.parseInformation = function () {\n        if (this.getInformation().getSize() !==\n            AI013x0x1xDecoder.HEADER_SIZE +\n                AI013x0x1xDecoder.GTIN_SIZE +\n                AI013x0x1xDecoder.WEIGHT_SIZE +\n                AI013x0x1xDecoder.DATE_SIZE) {\n            throw new NotFoundException();\n        }\n        var 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 +\n            AI013x0x1xDecoder.GTIN_SIZE +\n            AI013x0x1xDecoder.WEIGHT_SIZE);\n        return buf.toString();\n    };\n    AI013x0x1xDecoder.prototype.encodeCompressedDate = function (buf, currentPos) {\n        var 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        var day = numericDate % 32;\n        numericDate /= 32;\n        var month = (numericDate % 12) + 1;\n        numericDate /= 12;\n        var 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    AI013x0x1xDecoder.prototype.addWeightCode = function (buf, weight) {\n        buf.append('(');\n        buf.append(this.firstAIdigits);\n        buf.append(weight / 100000);\n        buf.append(')');\n    };\n    AI013x0x1xDecoder.prototype.checkWeight = function (weight) {\n        return weight % 100000;\n    };\n    AI013x0x1xDecoder.HEADER_SIZE = 7 + 1;\n    AI013x0x1xDecoder.WEIGHT_SIZE = 20;\n    AI013x0x1xDecoder.DATE_SIZE = 16;\n    return AI013x0x1xDecoder;\n}(AI01weightDecoder));\nexport default AI013x0x1xDecoder;\n", "import IllegalStateException from '../../../../IllegalStateException';\nimport GeneralAppIdDecoder from './GeneralAppIdDecoder';\nimport AI01AndOtherAIs from './AI01AndOtherAIs';\nimport AnyAIDecoder from './AnyAIDecoder';\nimport AI013103decoder from './AI013103decoder';\nimport AI01320xDecoder from './AI01320xDecoder';\nimport AI01392xDecoder from './AI01392xDecoder';\nimport AI01393xDecoder from './AI01393xDecoder';\nimport AI013x0x1xDecoder from './AI013x0x1xDecoder';\nexport 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        var 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        var 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        var 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", "var ExpandedPair = /** @class */ (function () {\n    function ExpandedPair(leftChar, rightChar, finderPatter, mayBeLast) {\n        this.leftchar = leftChar;\n        this.rightchar = rightChar;\n        this.finderpattern = finderPatter;\n        this.maybeLast = mayBeLast;\n    }\n    ExpandedPair.prototype.mayBeLast = function () {\n        return this.maybeLast;\n    };\n    ExpandedPair.prototype.getLeftChar = function () {\n        return this.leftchar;\n    };\n    ExpandedPair.prototype.getRightChar = function () {\n        return this.rightchar;\n    };\n    ExpandedPair.prototype.getFinderPattern = function () {\n        return this.finderpattern;\n    };\n    ExpandedPair.prototype.mustBeLast = function () {\n        return this.rightchar == null;\n    };\n    ExpandedPair.prototype.toString = function () {\n        return '[ ' + this.leftchar + ', ' + this.rightchar + ' : ' + (this.finderpattern == null ? 'null' : this.finderpattern.getValue()) + ' ]';\n    };\n    ExpandedPair.equals = function (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    ExpandedPair.equalsOrNull = function (o1, o2) {\n        return o1 === null ? o2 === null : ExpandedPair.equals(o1, o2);\n    };\n    ExpandedPair.prototype.hashCode = function () {\n        // return ExpandedPair.hashNotNull(leftChar) ^ hashNotNull(rightChar) ^ hashNotNull(finderPattern);\n        var value = this.leftchar.getValue() ^ this.rightchar.getValue() ^ this.finderpattern.getValue();\n        return value;\n    };\n    return ExpandedPair;\n}());\nexport default ExpandedPair;\n", "var ExpandedRow = /** @class */ (function () {\n    function ExpandedRow(pairs, rowNumber, wasReversed) {\n        this.pairs = pairs;\n        this.rowNumber = rowNumber;\n        this.wasReversed = wasReversed;\n    }\n    ExpandedRow.prototype.getPairs = function () {\n        return this.pairs;\n    };\n    ExpandedRow.prototype.getRowNumber = function () {\n        return this.rowNumber;\n    };\n    ExpandedRow.prototype.isReversed = function () {\n        return this.wasReversed;\n    };\n    // check implementation\n    ExpandedRow.prototype.isEquivalent = function (otherPairs) {\n        return this.checkEqualitity(this, otherPairs);\n    };\n    // @Override\n    ExpandedRow.prototype.toString = function () {\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    ExpandedRow.prototype.equals = function (o1, o2) {\n        if (!(o1 instanceof ExpandedRow)) {\n            return false;\n        }\n        return this.checkEqualitity(o1, o2) && o1.wasReversed === o2.wasReversed;\n    };\n    ExpandedRow.prototype.checkEqualitity = function (pair1, pair2) {\n        if (!pair1 || !pair2)\n            return;\n        var result;\n        pair1.forEach(function (e1, i) {\n            pair2.forEach(function (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    return ExpandedRow;\n}());\nexport default ExpandedRow;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BarcodeFormat from '../../../BarcodeFormat';\nimport MathUtils from '../../../common/detector/MathUtils';\n// import FormatException from '../../../FormatException';\nimport NotFoundException from '../../../NotFoundException';\nimport Result from '../../../Result';\nimport System from '../../../util/System';\nimport AbstractRSSReader from '../../rss/AbstractRSSReader';\nimport DataCharacter from '../../rss/DataCharacter';\nimport FinderPattern from '../../rss/FinderPattern';\nimport RSSUtils from '../../rss/RSSUtils';\nimport BitArrayBuilder from './BitArrayBuilder';\nimport { createDecoder } from './decoders/AbstractExpandedDecoderComplement';\nimport ExpandedPair from './ExpandedPair';\nimport ExpandedRow from './ExpandedRow';\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/** @experimental */\nvar RSSExpandedReader = /** @class */ (function (_super) {\n    __extends(RSSExpandedReader, _super);\n    function RSSExpandedReader() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.pairs = new Array(RSSExpandedReader.MAX_PAIRS);\n        _this.rows = new Array();\n        _this.startEnd = [2];\n        return _this;\n    }\n    RSSExpandedReader.prototype.decodeRow = function (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            // console.log(e);\n        }\n        this.pairs.length = 0;\n        this.startFromEven = true;\n        return RSSExpandedReader.constructResult(this.decodeRow2pairs(rowNumber, row));\n    };\n    RSSExpandedReader.prototype.reset = function () {\n        this.pairs.length = 0;\n        this.rows.length = 0;\n    };\n    // Not private for testing\n    RSSExpandedReader.prototype.decodeRow2pairs = function (rowNumber, row) {\n        var 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        var 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            var 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    RSSExpandedReader.prototype.checkRowsBoolean = function (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        var ps = null;\n        try {\n            ps = this.checkRows(new Array(), 0);\n        }\n        catch (e) {\n            // OK\n            console.log(e);\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    RSSExpandedReader.prototype.checkRows = function (collectedRows, currentRow) {\n        var e_1, _a;\n        for (var i = currentRow; i < this.rows.length; i++) {\n            var row = this.rows[i];\n            this.pairs.length = 0;\n            try {\n                for (var collectedRows_1 = (e_1 = void 0, __values(collectedRows)), collectedRows_1_1 = collectedRows_1.next(); !collectedRows_1_1.done; collectedRows_1_1 = collectedRows_1.next()) {\n                    var collectedRow = collectedRows_1_1.value;\n                    this.pairs.push(collectedRow.getPairs());\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (collectedRows_1_1 && !collectedRows_1_1.done && (_a = collectedRows_1.return)) _a.call(collectedRows_1);\n                }\n                finally { if (e_1) throw e_1.error; }\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            var 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                console.log(e);\n            }\n        }\n        throw new NotFoundException();\n    };\n    // Whether the pairs form a valid find pattern sequence,\n    // either complete or a prefix\n    RSSExpandedReader.isValidSequence = function (pairs) {\n        var e_2, _a;\n        try {\n            for (var _b = __values(RSSExpandedReader.FINDER_PATTERN_SEQUENCES), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var sequence = _c.value;\n                if (pairs.length > sequence.length) {\n                    continue;\n                }\n                var stop_1 = true;\n                for (var j = 0; j < pairs.length; j++) {\n                    if (pairs[j].getFinderPattern().getValue() !== sequence[j]) {\n                        stop_1 = false;\n                        break;\n                    }\n                }\n                if (stop_1) {\n                    return true;\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        return false;\n    };\n    RSSExpandedReader.prototype.storeRow = function (rowNumber, wasReversed) {\n        // Discard if duplicate above or below; otherwise insert in order by row number.\n        var insertPos = 0;\n        var prevIsSame = false;\n        var nextIsSame = false;\n        while (insertPos < this.rows.length) {\n            var 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    RSSExpandedReader.prototype.removePartialRows = function (pairs, rows) {\n        var e_3, _a, e_4, _b, e_5, _c;\n        try {\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 (var rows_1 = __values(rows), rows_1_1 = rows_1.next(); !rows_1_1.done; rows_1_1 = rows_1.next()) {\n                var row = rows_1_1.value;\n                if (row.getPairs().length === pairs.length) {\n                    continue;\n                }\n                var allFound = true;\n                try {\n                    for (var _d = (e_4 = void 0, __values(row.getPairs())), _e = _d.next(); !_e.done; _e = _d.next()) {\n                        var p = _e.value;\n                        var found = false;\n                        try {\n                            for (var pairs_1 = (e_5 = void 0, __values(pairs)), pairs_1_1 = pairs_1.next(); !pairs_1_1.done; pairs_1_1 = pairs_1.next()) {\n                                var pp = pairs_1_1.value;\n                                if (ExpandedPair.equals(p, pp)) {\n                                    found = true;\n                                    break;\n                                }\n                            }\n                        }\n                        catch (e_5_1) { e_5 = { error: e_5_1 }; }\n                        finally {\n                            try {\n                                if (pairs_1_1 && !pairs_1_1.done && (_c = pairs_1.return)) _c.call(pairs_1);\n                            }\n                            finally { if (e_5) throw e_5.error; }\n                        }\n                        if (!found) {\n                            allFound = false;\n                        }\n                    }\n                }\n                catch (e_4_1) { e_4 = { error: e_4_1 }; }\n                finally {\n                    try {\n                        if (_e && !_e.done && (_b = _d.return)) _b.call(_d);\n                    }\n                    finally { if (e_4) throw e_4.error; }\n                }\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (rows_1_1 && !rows_1_1.done && (_a = rows_1.return)) _a.call(rows_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n    };\n    // Returns true when one of the rows already contains all the pairs\n    RSSExpandedReader.isPartialRow = function (pairs, rows) {\n        var e_6, _a, e_7, _b, e_8, _c;\n        try {\n            for (var rows_2 = __values(rows), rows_2_1 = rows_2.next(); !rows_2_1.done; rows_2_1 = rows_2.next()) {\n                var r = rows_2_1.value;\n                var allFound = true;\n                try {\n                    for (var pairs_2 = (e_7 = void 0, __values(pairs)), pairs_2_1 = pairs_2.next(); !pairs_2_1.done; pairs_2_1 = pairs_2.next()) {\n                        var p = pairs_2_1.value;\n                        var found = false;\n                        try {\n                            for (var _d = (e_8 = void 0, __values(r.getPairs())), _e = _d.next(); !_e.done; _e = _d.next()) {\n                                var pp = _e.value;\n                                if (p.equals(pp)) {\n                                    found = true;\n                                    break;\n                                }\n                            }\n                        }\n                        catch (e_8_1) { e_8 = { error: e_8_1 }; }\n                        finally {\n                            try {\n                                if (_e && !_e.done && (_c = _d.return)) _c.call(_d);\n                            }\n                            finally { if (e_8) throw e_8.error; }\n                        }\n                        if (!found) {\n                            allFound = false;\n                            break;\n                        }\n                    }\n                }\n                catch (e_7_1) { e_7 = { error: e_7_1 }; }\n                finally {\n                    try {\n                        if (pairs_2_1 && !pairs_2_1.done && (_b = pairs_2.return)) _b.call(pairs_2);\n                    }\n                    finally { if (e_7) throw e_7.error; }\n                }\n                if (allFound) {\n                    // the row 'r' contain all the pairs from 'pairs'\n                    return true;\n                }\n            }\n        }\n        catch (e_6_1) { e_6 = { error: e_6_1 }; }\n        finally {\n            try {\n                if (rows_2_1 && !rows_2_1.done && (_a = rows_2.return)) _a.call(rows_2);\n            }\n            finally { if (e_6) throw e_6.error; }\n        }\n        return false;\n    };\n    // Only used for unit testing\n    RSSExpandedReader.prototype.getRows = function () {\n        return this.rows;\n    };\n    // Not private for unit testing\n    RSSExpandedReader.constructResult = function (pairs) {\n        var binary = BitArrayBuilder.buildBitArray(pairs);\n        var decoder = createDecoder(binary);\n        var resultingString = decoder.parseInformation();\n        var firstPoints = pairs[0].getFinderPattern().getResultPoints();\n        var lastPoints = pairs[pairs.length - 1]\n            .getFinderPattern()\n            .getResultPoints();\n        var points = [firstPoints[0], firstPoints[1], lastPoints[0], lastPoints[1]];\n        return new Result(resultingString, null, null, points, BarcodeFormat.RSS_EXPANDED, null);\n    };\n    RSSExpandedReader.prototype.checkChecksum = function () {\n        var firstPair = this.pairs.get(0);\n        var checkCharacter = firstPair.getLeftChar();\n        var firstCharacter = firstPair.getRightChar();\n        if (firstCharacter === null) {\n            return false;\n        }\n        var checksum = firstCharacter.getChecksumPortion();\n        var s = 2;\n        for (var i = 1; i < this.pairs.size(); ++i) {\n            var currentPair = this.pairs.get(i);\n            checksum += currentPair.getLeftChar().getChecksumPortion();\n            s++;\n            var currentRightChar = currentPair.getRightChar();\n            if (currentRightChar != null) {\n                checksum += currentRightChar.getChecksumPortion();\n                s++;\n            }\n        }\n        checksum %= 211;\n        var checkCharacterValue = 211 * (s - 4) + checksum;\n        return checkCharacterValue === checkCharacter.getValue();\n    };\n    RSSExpandedReader.getNextSecondBar = function (row, initialPos) {\n        var 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    RSSExpandedReader.prototype.retrieveNextPair = function (row, previousPairs, rowNumber) {\n        var isOddPattern = previousPairs.length % 2 === 0;\n        if (this.startFromEven) {\n            isOddPattern = !isOddPattern;\n        }\n        var pattern;\n        var keepFinding = true;\n        var 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        var leftChar = this.decodeDataCharacter(row, pattern, isOddPattern, true);\n        if (!this.isEmptyPair(previousPairs) &&\n            previousPairs[previousPairs.length - 1].mustBeLast()) {\n            throw new NotFoundException();\n        }\n        var rightChar;\n        try {\n            rightChar = this.decodeDataCharacter(row, pattern, isOddPattern, false);\n        }\n        catch (e) {\n            rightChar = null;\n            console.log(e);\n        }\n        return new ExpandedPair(leftChar, rightChar, pattern, true);\n    };\n    RSSExpandedReader.prototype.isEmptyPair = function (pairs) {\n        if (pairs.length === 0) {\n            return true;\n        }\n        return false;\n    };\n    RSSExpandedReader.prototype.findNextPair = function (row, previousPairs, forcedOffset) {\n        var counters = this.getDecodeFinderCounters();\n        counters[0] = 0;\n        counters[1] = 0;\n        counters[2] = 0;\n        counters[3] = 0;\n        var width = row.getSize();\n        var rowOffset;\n        if (forcedOffset >= 0) {\n            rowOffset = forcedOffset;\n        }\n        else if (this.isEmptyPair(previousPairs)) {\n            rowOffset = 0;\n        }\n        else {\n            var lastPair = previousPairs[previousPairs.length - 1];\n            rowOffset = lastPair.getFinderPattern().getStartEnd()[1];\n        }\n        var searchingEvenPair = previousPairs.length % 2 !== 0;\n        if (this.startFromEven) {\n            searchingEvenPair = !searchingEvenPair;\n        }\n        var isWhite = false;\n        while (rowOffset < width) {\n            isWhite = !row.get(rowOffset);\n            if (!isWhite) {\n                break;\n            }\n            rowOffset++;\n        }\n        var counterPosition = 0;\n        var patternStart = rowOffset;\n        for (var 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    RSSExpandedReader.reverseCounters = function (counters) {\n        var length = counters.length;\n        for (var i = 0; i < length / 2; ++i) {\n            var tmp = counters[i];\n            counters[i] = counters[length - i - 1];\n            counters[length - i - 1] = tmp;\n        }\n    };\n    RSSExpandedReader.prototype.parseFoundFinderPattern = function (row, rowNumber, oddPattern) {\n        // Actually we found elements 2-5.\n        var firstCounter;\n        var start;\n        var end;\n        if (oddPattern) {\n            // If pattern number is odd, we need to locate element 1 *before* the current block.\n            var 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        var counters = this.getDecodeFinderCounters();\n        System.arraycopy(counters, 0, counters, 1, counters.length - 1);\n        counters[0] = firstCounter;\n        var 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    RSSExpandedReader.prototype.decodeDataCharacter = function (row, pattern, isOddPattern, leftChar) {\n        var counters = this.getDataCharacterCounters();\n        for (var 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 (var i = 0, j = counters.length - 1; i < j; i++, j--) {\n                var temp = counters[i];\n                counters[i] = counters[j];\n                counters[j] = temp;\n            }\n        } // counters[] has the pixels of the module\n        var numModules = 17; // left and right data characters have all the same length\n        var elementWidth = MathUtils.sum(new Int32Array(counters)) / numModules;\n        // Sanity check: element width for pattern and the character should match\n        var expectedElementWidth = (pattern.getStartEnd()[1] - pattern.getStartEnd()[0]) / 15.0;\n        if (Math.abs(elementWidth - expectedElementWidth) / expectedElementWidth >\n            0.3) {\n            throw new NotFoundException();\n        }\n        var oddCounts = this.getOddCounts();\n        var evenCounts = this.getEvenCounts();\n        var oddRoundingErrors = this.getOddRoundingErrors();\n        var evenRoundingErrors = this.getEvenRoundingErrors();\n        for (var i = 0; i < counters.length; i++) {\n            var value_1 = (1.0 * counters[i]) / elementWidth;\n            var count = value_1 + 0.5; // Round\n            if (count < 1) {\n                if (value_1 < 0.3) {\n                    throw new NotFoundException();\n                }\n                count = 1;\n            }\n            else if (count > 8) {\n                if (value_1 > 8.7) {\n                    throw new NotFoundException();\n                }\n                count = 8;\n            }\n            var offset = i / 2;\n            if ((i & 0x01) === 0) {\n                oddCounts[offset] = count;\n                oddRoundingErrors[offset] = value_1 - count;\n            }\n            else {\n                evenCounts[offset] = count;\n                evenRoundingErrors[offset] = value_1 - count;\n            }\n        }\n        this.adjustOddEvenCounts(numModules);\n        var weightRowNumber = 4 * pattern.getValue() + (isOddPattern ? 0 : 2) + (leftChar ? 0 : 1) - 1;\n        var oddSum = 0;\n        var oddChecksumPortion = 0;\n        for (var i = oddCounts.length - 1; i >= 0; i--) {\n            if (RSSExpandedReader.isNotA1left(pattern, isOddPattern, leftChar)) {\n                var weight = RSSExpandedReader.WEIGHTS[weightRowNumber][2 * i];\n                oddChecksumPortion += oddCounts[i] * weight;\n            }\n            oddSum += oddCounts[i];\n        }\n        var evenChecksumPortion = 0;\n        // int evenSum = 0;\n        for (var i = evenCounts.length - 1; i >= 0; i--) {\n            if (RSSExpandedReader.isNotA1left(pattern, isOddPattern, leftChar)) {\n                var weight = RSSExpandedReader.WEIGHTS[weightRowNumber][2 * i + 1];\n                evenChecksumPortion += evenCounts[i] * weight;\n            }\n            // evenSum += evenCounts[i];\n        }\n        var checksumPortion = oddChecksumPortion + evenChecksumPortion;\n        if ((oddSum & 0x01) !== 0 || oddSum > 13 || oddSum < 4) {\n            throw new NotFoundException();\n        }\n        var group = (13 - oddSum) / 2;\n        var oddWidest = RSSExpandedReader.SYMBOL_WIDEST[group];\n        var evenWidest = 9 - oddWidest;\n        var vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);\n        var vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);\n        var tEven = RSSExpandedReader.EVEN_TOTAL_SUBSET[group];\n        var gSum = RSSExpandedReader.GSUM[group];\n        var value = vOdd * tEven + vEven + gSum;\n        return new DataCharacter(value, checksumPortion);\n    };\n    RSSExpandedReader.isNotA1left = function (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    RSSExpandedReader.prototype.adjustOddEvenCounts = function (numModules) {\n        var oddSum = MathUtils.sum(new Int32Array(this.getOddCounts()));\n        var evenSum = MathUtils.sum(new Int32Array(this.getEvenCounts()));\n        var incrementOdd = false;\n        var decrementOdd = false;\n        if (oddSum > 13) {\n            decrementOdd = true;\n        }\n        else if (oddSum < 4) {\n            incrementOdd = true;\n        }\n        var incrementEven = false;\n        var decrementEven = false;\n        if (evenSum > 13) {\n            decrementEven = true;\n        }\n        else if (evenSum < 4) {\n            incrementEven = true;\n        }\n        var mismatch = oddSum + evenSum - numModules;\n        var oddParityBad = (oddSum & 0x01) === 1;\n        var 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    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]),\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        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_B,\n        ],\n        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_C,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_D,\n        ],\n        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_E,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_C,\n        ],\n        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_E,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_F,\n        ],\n        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_E,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_E,\n            RSSExpandedReader.FINDER_PAT_F,\n            RSSExpandedReader.FINDER_PAT_F,\n        ],\n        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_C,\n            RSSExpandedReader.FINDER_PAT_C,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_D,\n        ],\n        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_C,\n            RSSExpandedReader.FINDER_PAT_C,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_E,\n            RSSExpandedReader.FINDER_PAT_E,\n        ],\n        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_C,\n            RSSExpandedReader.FINDER_PAT_C,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_E,\n            RSSExpandedReader.FINDER_PAT_F,\n            RSSExpandedReader.FINDER_PAT_F,\n        ],\n        [\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_A,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_B,\n            RSSExpandedReader.FINDER_PAT_C,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_D,\n            RSSExpandedReader.FINDER_PAT_E,\n            RSSExpandedReader.FINDER_PAT_E,\n            RSSExpandedReader.FINDER_PAT_F,\n            RSSExpandedReader.FINDER_PAT_F,\n        ],\n    ];\n    RSSExpandedReader.MAX_PAIRS = 11;\n    return RSSExpandedReader;\n}(AbstractRSSReader));\nexport default RSSExpandedReader;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport DataCharacter from './DataCharacter';\nvar Pair = /** @class */ (function (_super) {\n    __extends(Pair, _super);\n    function Pair(value, checksumPortion, finderPattern) {\n        var _this = _super.call(this, value, checksumPortion) || this;\n        _this.count = 0;\n        _this.finderPattern = finderPattern;\n        return _this;\n    }\n    Pair.prototype.getFinderPattern = function () {\n        return this.finderPattern;\n    };\n    Pair.prototype.getCount = function () {\n        return this.count;\n    };\n    Pair.prototype.incrementCount = function () {\n        this.count++;\n    };\n    return Pair;\n}(DataCharacter));\nexport default Pair;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport AbstractRSSReader from './AbstractRSSReader';\nimport Pair from './Pair';\nimport Result from '../../Result';\nimport DecodeHintType from '../../DecodeHintType';\nimport NotFoundException from '../../NotFoundException';\nimport StringBuilder from '../../util/StringBuilder';\nimport BarcodeFormat from '../../BarcodeFormat';\nimport ResultPoint from '../../ResultPoint';\nimport FinderPattern from './FinderPattern';\nimport DataCharacter from './DataCharacter';\nimport MathUtils from '../../common/detector/MathUtils';\nimport RSSUtils from './RSSUtils';\nimport System from '../../util/System';\nimport OneDReader from '../OneDReader';\nvar RSS14Reader = /** @class */ (function (_super) {\n    __extends(RSS14Reader, _super);\n    function RSS14Reader() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.possibleLeftPairs = [];\n        _this.possibleRightPairs = [];\n        return _this;\n    }\n    RSS14Reader.prototype.decodeRow = function (rowNumber, row, hints) {\n        var e_1, _a, e_2, _b;\n        var leftPair = this.decodePair(row, false, rowNumber, hints);\n        RSS14Reader.addOrTally(this.possibleLeftPairs, leftPair);\n        row.reverse();\n        var rightPair = this.decodePair(row, true, rowNumber, hints);\n        RSS14Reader.addOrTally(this.possibleRightPairs, rightPair);\n        row.reverse();\n        try {\n            for (var _c = __values(this.possibleLeftPairs), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var left = _d.value;\n                if (left.getCount() > 1) {\n                    try {\n                        for (var _e = (e_2 = void 0, __values(this.possibleRightPairs)), _f = _e.next(); !_f.done; _f = _e.next()) {\n                            var right = _f.value;\n                            if (right.getCount() > 1 && RSS14Reader.checkChecksum(left, right)) {\n                                return RSS14Reader.constructResult(left, right);\n                            }\n                        }\n                    }\n                    catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                    finally {\n                        try {\n                            if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n                        }\n                        finally { if (e_2) throw e_2.error; }\n                    }\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        throw new NotFoundException();\n    };\n    RSS14Reader.addOrTally = function (possiblePairs, pair) {\n        var e_3, _a;\n        if (pair == null) {\n            return;\n        }\n        var found = false;\n        try {\n            for (var possiblePairs_1 = __values(possiblePairs), possiblePairs_1_1 = possiblePairs_1.next(); !possiblePairs_1_1.done; possiblePairs_1_1 = possiblePairs_1.next()) {\n                var other = possiblePairs_1_1.value;\n                if (other.getValue() === pair.getValue()) {\n                    other.incrementCount();\n                    found = true;\n                    break;\n                }\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (possiblePairs_1_1 && !possiblePairs_1_1.done && (_a = possiblePairs_1.return)) _a.call(possiblePairs_1);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        if (!found) {\n            possiblePairs.push(pair);\n        }\n    };\n    RSS14Reader.prototype.reset = function () {\n        this.possibleLeftPairs.length = 0;\n        this.possibleRightPairs.length = 0;\n    };\n    RSS14Reader.constructResult = function (leftPair, rightPair) {\n        var symbolValue = 4537077 * leftPair.getValue() + rightPair.getValue();\n        var text = new String(symbolValue).toString();\n        var buffer = new StringBuilder();\n        for (var i = 13 - text.length; i > 0; i--) {\n            buffer.append('0');\n        }\n        buffer.append(text);\n        var checkDigit = 0;\n        for (var i = 0; i < 13; i++) {\n            var 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        var leftPoints = leftPair.getFinderPattern().getResultPoints();\n        var rightPoints = rightPair.getFinderPattern().getResultPoints();\n        return new Result(buffer.toString(), null, 0, [leftPoints[0], leftPoints[1], rightPoints[0], rightPoints[1]], BarcodeFormat.RSS_14, new Date().getTime());\n    };\n    RSS14Reader.checkChecksum = function (leftPair, rightPair) {\n        var checkValue = (leftPair.getChecksumPortion() + 16 * rightPair.getChecksumPortion()) % 79;\n        var 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    RSS14Reader.prototype.decodePair = function (row, right, rowNumber, hints) {\n        try {\n            var startEnd = this.findFinderPattern(row, right);\n            var pattern = this.parseFoundFinderPattern(row, rowNumber, right, startEnd);\n            var resultPointCallback = hints == null ? null : hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n            if (resultPointCallback != null) {\n                var 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            var outside = this.decodeDataCharacter(row, pattern, true);\n            var 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    RSS14Reader.prototype.decodeDataCharacter = function (row, pattern, outsideChar) {\n        var counters = this.getDataCharacterCounters();\n        for (var 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 (var i = 0, j = counters.length - 1; i < j; i++, j--) {\n                var temp = counters[i];\n                counters[i] = counters[j];\n                counters[j] = temp;\n            }\n        }\n        var numModules = outsideChar ? 16 : 15;\n        var elementWidth = MathUtils.sum(new Int32Array(counters)) / numModules;\n        var oddCounts = this.getOddCounts();\n        var evenCounts = this.getEvenCounts();\n        var oddRoundingErrors = this.getOddRoundingErrors();\n        var evenRoundingErrors = this.getEvenRoundingErrors();\n        for (var i = 0; i < counters.length; i++) {\n            var value = counters[i] / elementWidth;\n            var count = Math.floor(value + 0.5);\n            if (count < 1) {\n                count = 1;\n            }\n            else if (count > 8) {\n                count = 8;\n            }\n            var 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        var oddSum = 0;\n        var oddChecksumPortion = 0;\n        for (var i = oddCounts.length - 1; i >= 0; i--) {\n            oddChecksumPortion *= 9;\n            oddChecksumPortion += oddCounts[i];\n            oddSum += oddCounts[i];\n        }\n        var evenChecksumPortion = 0;\n        var evenSum = 0;\n        for (var i = evenCounts.length - 1; i >= 0; i--) {\n            evenChecksumPortion *= 9;\n            evenChecksumPortion += evenCounts[i];\n            evenSum += evenCounts[i];\n        }\n        var checksumPortion = oddChecksumPortion + 3 * evenChecksumPortion;\n        if (outsideChar) {\n            if ((oddSum & 0x01) !== 0 || oddSum > 12 || oddSum < 4) {\n                throw new NotFoundException();\n            }\n            var group = (12 - oddSum) / 2;\n            var oddWidest = RSS14Reader.OUTSIDE_ODD_WIDEST[group];\n            var evenWidest = 9 - oddWidest;\n            var vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, false);\n            var vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, true);\n            var tEven = RSS14Reader.OUTSIDE_EVEN_TOTAL_SUBSET[group];\n            var 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            var group = (10 - evenSum) / 2;\n            var oddWidest = RSS14Reader.INSIDE_ODD_WIDEST[group];\n            var evenWidest = 9 - oddWidest;\n            var vOdd = RSSUtils.getRSSvalue(oddCounts, oddWidest, true);\n            var vEven = RSSUtils.getRSSvalue(evenCounts, evenWidest, false);\n            var tOdd = RSS14Reader.INSIDE_ODD_TOTAL_SUBSET[group];\n            var gSum = RSS14Reader.INSIDE_GSUM[group];\n            return new DataCharacter(vEven * tOdd + vOdd + gSum, checksumPortion);\n        }\n    };\n    RSS14Reader.prototype.findFinderPattern = function (row, rightFinderPattern) {\n        var counters = this.getDecodeFinderCounters();\n        counters[0] = 0;\n        counters[1] = 0;\n        counters[2] = 0;\n        counters[3] = 0;\n        var width = row.getSize();\n        var isWhite = false;\n        var 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        var counterPosition = 0;\n        var patternStart = rowOffset;\n        for (var 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    RSS14Reader.prototype.parseFoundFinderPattern = function (row, rowNumber, right, startEnd) {\n        // Actually we found elements 2-5\n        var firstIsBlack = row.get(startEnd[0]);\n        var firstElementStart = startEnd[0] - 1;\n        // Locate element 1\n        while (firstElementStart >= 0 && firstIsBlack !== row.get(firstElementStart)) {\n            firstElementStart--;\n        }\n        firstElementStart++;\n        var firstCounter = startEnd[0] - firstElementStart;\n        // Make 'counters' hold 1-4\n        var counters = this.getDecodeFinderCounters();\n        var copy = new Int32Array(counters.length);\n        System.arraycopy(counters, 0, copy, 1, counters.length - 1);\n        copy[0] = firstCounter;\n        var value = this.parseFinderValue(copy, RSS14Reader.FINDER_PATTERNS);\n        var start = firstElementStart;\n        var 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    RSS14Reader.prototype.adjustOddEvenCounts = function (outsideChar, numModules) {\n        var oddSum = MathUtils.sum(new Int32Array(this.getOddCounts()));\n        var evenSum = MathUtils.sum(new Int32Array(this.getEvenCounts()));\n        var incrementOdd = false;\n        var decrementOdd = false;\n        var incrementEven = false;\n        var 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        var mismatch = oddSum + evenSum - numModules;\n        var oddParityBad = (oddSum & 0x01) === (outsideChar ? 1 : 0);\n        var 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    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    return RSS14Reader;\n}(AbstractRSSReader));\nexport default RSS14Reader;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.oned {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport DecodeHintType from '../DecodeHintType';\nimport NotFoundException from '../NotFoundException';\nimport Code128Reader from './Code128Reader';\nimport Code39Reader from './Code39Reader';\nimport Code93Reader from './Code93Reader';\nimport ITFReader from './ITFReader';\nimport MultiFormatUPCEANReader from './MultiFormatUPCEANReader';\nimport OneDReader from './OneDReader';\nimport CodaBarReader from './CodaBarReader';\nimport RSSExpandedReader from './rss/expanded/RSSExpandedReader';\nimport RSS14Reader from './rss/RSS14Reader';\n/**\n * @author Daniel Switkin <dswitkin@google.com>\n * @author Sean Owen\n */\nvar MultiFormatOneDReader = /** @class */ (function (_super) {\n    __extends(MultiFormatOneDReader, _super);\n    function MultiFormatOneDReader(hints) {\n        var _this = _super.call(this) || this;\n        _this.readers = [];\n        var possibleFormats = !hints ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS);\n        var useCode39CheckDigit = hints && hints.get(DecodeHintType.ASSUME_CODE_39_CHECK_DIGIT) !== undefined;\n        if (possibleFormats) {\n            if (possibleFormats.includes(BarcodeFormat.EAN_13) ||\n                possibleFormats.includes(BarcodeFormat.UPC_A) ||\n                possibleFormats.includes(BarcodeFormat.EAN_8) ||\n                possibleFormats.includes(BarcodeFormat.UPC_E)) {\n                _this.readers.push(new MultiFormatUPCEANReader(hints));\n            }\n            if (possibleFormats.includes(BarcodeFormat.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.CODE_128)) {\n                _this.readers.push(new Code128Reader());\n            }\n            if (possibleFormats.includes(BarcodeFormat.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.RSS_14)) {\n                _this.readers.push(new RSS14Reader());\n            }\n            if (possibleFormats.includes(BarcodeFormat.RSS_EXPANDED)) {\n                console.warn('RSS Expanded reader IS NOT ready for production yet! use at your own risk.');\n                _this.readers.push(new RSSExpandedReader());\n            }\n        }\n        if (_this.readers.length === 0) {\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());\n        }\n        return _this;\n    }\n    // @Override\n    MultiFormatOneDReader.prototype.decodeRow = function (rowNumber, row, hints) {\n        for (var 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    MultiFormatOneDReader.prototype.reset = function () {\n        this.readers.forEach(function (reader) { return reader.reset(); });\n    };\n    return MultiFormatOneDReader;\n}(OneDReader));\nexport default MultiFormatOneDReader;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport MultiFormatOneDReader from '../core/oned/MultiFormatOneDReader';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * Barcode reader reader to use from browser.\n */\nvar BrowserBarcodeReader = /** @class */ (function (_super) {\n    __extends(BrowserBarcodeReader, _super);\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    function BrowserBarcodeReader(timeBetweenScansMillis, hints) {\n        if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n        return _super.call(this, new MultiFormatOneDReader(hints), timeBetweenScansMillis, hints) || this;\n    }\n    return BrowserBarcodeReader;\n}(BrowserCodeReader));\nexport { BrowserBarcodeReader };\n", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport FormatException from '../../FormatException';\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 */\nvar ECBlocks = /** @class */ (function () {\n    function ECBlocks(ecCodewords, ecBlocks1, ecBlocks2) {\n        this.ecCodewords = ecCodewords;\n        this.ecBlocks = [ecBlocks1];\n        ecBlocks2 && this.ecBlocks.push(ecBlocks2);\n    }\n    ECBlocks.prototype.getECCodewords = function () {\n        return this.ecCodewords;\n    };\n    ECBlocks.prototype.getECBlocks = function () {\n        return this.ecBlocks;\n    };\n    return ECBlocks;\n}());\nexport { ECBlocks };\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 */\nvar ECB = /** @class */ (function () {\n    function ECB(count, dataCodewords) {\n        this.count = count;\n        this.dataCodewords = dataCodewords;\n    }\n    ECB.prototype.getCount = function () {\n        return this.count;\n    };\n    ECB.prototype.getDataCodewords = function () {\n        return this.dataCodewords;\n    };\n    return ECB;\n}());\nexport { ECB };\n/**\n * The Version object encapsulates attributes about a particular\n * size Data Matrix Code.\n *\n * @author bbrown@google.com (Brian Brown)\n */\nvar Version = /** @class */ (function () {\n    function Version(versionNumber, symbolSizeRows, symbolSizeColumns, dataRegionSizeRows, dataRegionSizeColumns, ecBlocks) {\n        var e_1, _a;\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        var total = 0;\n        var ecCodewords = ecBlocks.getECCodewords();\n        var ecbArray = ecBlocks.getECBlocks();\n        try {\n            for (var ecbArray_1 = __values(ecbArray), ecbArray_1_1 = ecbArray_1.next(); !ecbArray_1_1.done; ecbArray_1_1 = ecbArray_1.next()) {\n                var ecBlock = ecbArray_1_1.value;\n                total += ecBlock.getCount() * (ecBlock.getDataCodewords() + ecCodewords);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (ecbArray_1_1 && !ecbArray_1_1.done && (_a = ecbArray_1.return)) _a.call(ecbArray_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        this.totalCodewords = total;\n    }\n    Version.prototype.getVersionNumber = function () {\n        return this.versionNumber;\n    };\n    Version.prototype.getSymbolSizeRows = function () {\n        return this.symbolSizeRows;\n    };\n    Version.prototype.getSymbolSizeColumns = function () {\n        return this.symbolSizeColumns;\n    };\n    Version.prototype.getDataRegionSizeRows = function () {\n        return this.dataRegionSizeRows;\n    };\n    Version.prototype.getDataRegionSizeColumns = function () {\n        return this.dataRegionSizeColumns;\n    };\n    Version.prototype.getTotalCodewords = function () {\n        return this.totalCodewords;\n    };\n    Version.prototype.getECBlocks = function () {\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    Version.getVersionForDimensions = function (numRows, numColumns) {\n        var e_2, _a;\n        if ((numRows & 0x01) !== 0 || (numColumns & 0x01) !== 0) {\n            throw new FormatException();\n        }\n        try {\n            for (var _b = __values(Version.VERSIONS), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var version = _c.value;\n                if (version.symbolSizeRows === numRows && version.symbolSizeColumns === numColumns) {\n                    return version;\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        throw new FormatException();\n    };\n    //  @Override\n    Version.prototype.toString = function () {\n        return '' + this.versionNumber;\n    };\n    /**\n     * See ISO 16022:2006 5.5.1 Table 7\n     */\n    Version.buildVersions = function () {\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    Version.VERSIONS = Version.buildVersions();\n    return Version;\n}());\nexport default Version;\n", "import BitMatrix from '../../common/BitMatrix';\nimport Version from './Version';\nimport FormatException from '../../FormatException';\nimport IllegalArgumentException from '../../IllegalArgumentException';\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 */\nvar BitMatrixParser = /** @class */ (function () {\n    /**\n     * @param bitMatrix {@link BitMatrix} to parse\n     * @throws FormatException if dimension is < 8 or > 144 or not 0 mod 2\n     */\n    function BitMatrixParser(bitMatrix) {\n        var 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    BitMatrixParser.prototype.getVersion = function () {\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    BitMatrixParser.readVersion = function (bitMatrix) {\n        var numRows = bitMatrix.getHeight();\n        var 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    BitMatrixParser.prototype.readCodewords = function () {\n        var result = new Int8Array(this.version.getTotalCodewords());\n        var resultOffset = 0;\n        var row = 4;\n        var column = 0;\n        var numRows = this.mappingBitMatrix.getHeight();\n        var numColumns = this.mappingBitMatrix.getWidth();\n        var corner1Read = false;\n        var corner2Read = false;\n        var corner3Read = false;\n        var 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    BitMatrixParser.prototype.readModule = function (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    BitMatrixParser.prototype.readUtah = function (row, column, numRows, numColumns) {\n        var 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    BitMatrixParser.prototype.readCorner1 = function (numRows, numColumns) {\n        var 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    BitMatrixParser.prototype.readCorner2 = function (numRows, numColumns) {\n        var 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    BitMatrixParser.prototype.readCorner3 = function (numRows, numColumns) {\n        var 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    BitMatrixParser.prototype.readCorner4 = function (numRows, numColumns) {\n        var 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    BitMatrixParser.prototype.extractDataRegion = function (bitMatrix) {\n        var symbolSizeRows = this.version.getSymbolSizeRows();\n        var symbolSizeColumns = this.version.getSymbolSizeColumns();\n        if (bitMatrix.getHeight() !== symbolSizeRows) {\n            throw new IllegalArgumentException('Dimension of bitMatrix must match the version size');\n        }\n        var dataRegionSizeRows = this.version.getDataRegionSizeRows();\n        var dataRegionSizeColumns = this.version.getDataRegionSizeColumns();\n        var numDataRegionsRow = symbolSizeRows / dataRegionSizeRows | 0;\n        var numDataRegionsColumn = symbolSizeColumns / dataRegionSizeColumns | 0;\n        var sizeDataRegionRow = numDataRegionsRow * dataRegionSizeRows;\n        var sizeDataRegionColumn = numDataRegionsColumn * dataRegionSizeColumns;\n        var bitMatrixWithoutAlignment = new BitMatrix(sizeDataRegionColumn, sizeDataRegionRow);\n        for (var dataRegionRow = 0; dataRegionRow < numDataRegionsRow; ++dataRegionRow) {\n            var dataRegionRowOffset = dataRegionRow * dataRegionSizeRows;\n            for (var dataRegionColumn = 0; dataRegionColumn < numDataRegionsColumn; ++dataRegionColumn) {\n                var dataRegionColumnOffset = dataRegionColumn * dataRegionSizeColumns;\n                for (var i = 0; i < dataRegionSizeRows; ++i) {\n                    var readRowOffset = dataRegionRow * (dataRegionSizeRows + 2) + 1 + i;\n                    var writeRowOffset = dataRegionRowOffset + i;\n                    for (var j = 0; j < dataRegionSizeColumns; ++j) {\n                        var readColumnOffset = dataRegionColumn * (dataRegionSizeColumns + 2) + 1 + j;\n                        if (bitMatrix.get(readColumnOffset, readRowOffset)) {\n                            var writeColumnOffset = dataRegionColumnOffset + j;\n                            bitMatrixWithoutAlignment.set(writeColumnOffset, writeRowOffset);\n                        }\n                    }\n                }\n            }\n        }\n        return bitMatrixWithoutAlignment;\n    };\n    return BitMatrixParser;\n}());\nexport default BitMatrixParser;\n", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport IllegalArgumentException from '../../IllegalArgumentException';\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/**\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 */\nvar DataBlock = /** @class */ (function () {\n    function DataBlock(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    DataBlock.getDataBlocks = function (rawCodewords, version) {\n        var e_1, _a, e_2, _b;\n        // Figure out the number and size of data blocks used by this version\n        var ecBlocks = version.getECBlocks();\n        // First count the total number of data blocks\n        var totalBlocks = 0;\n        var ecBlockArray = ecBlocks.getECBlocks();\n        try {\n            for (var ecBlockArray_1 = __values(ecBlockArray), ecBlockArray_1_1 = ecBlockArray_1.next(); !ecBlockArray_1_1.done; ecBlockArray_1_1 = ecBlockArray_1.next()) {\n                var ecBlock = ecBlockArray_1_1.value;\n                totalBlocks += ecBlock.getCount();\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (ecBlockArray_1_1 && !ecBlockArray_1_1.done && (_a = ecBlockArray_1.return)) _a.call(ecBlockArray_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        // Now establish DataBlocks of the appropriate size and number of data codewords\n        var result = new Array(totalBlocks);\n        var numResultBlocks = 0;\n        try {\n            for (var ecBlockArray_2 = __values(ecBlockArray), ecBlockArray_2_1 = ecBlockArray_2.next(); !ecBlockArray_2_1.done; ecBlockArray_2_1 = ecBlockArray_2.next()) {\n                var ecBlock = ecBlockArray_2_1.value;\n                for (var i = 0; i < ecBlock.getCount(); i++) {\n                    var numDataCodewords = ecBlock.getDataCodewords();\n                    var numBlockCodewords = ecBlocks.getECCodewords() + numDataCodewords;\n                    result[numResultBlocks++] = new DataBlock(numDataCodewords, new Uint8Array(numBlockCodewords));\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (ecBlockArray_2_1 && !ecBlockArray_2_1.done && (_b = ecBlockArray_2.return)) _b.call(ecBlockArray_2);\n            }\n            finally { if (e_2) throw e_2.error; }\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        var longerBlocksTotalCodewords = result[0].codewords.length;\n        // int shorterBlocksTotalCodewords = longerBlocksTotalCodewords - 1;\n        var longerBlocksNumDataCodewords = longerBlocksTotalCodewords - ecBlocks.getECCodewords();\n        var 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        var rawCodewordsOffset = 0;\n        for (var i = 0; i < shorterBlocksNumDataCodewords; i++) {\n            for (var 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        var specialVersion = version.getVersionNumber() === 24;\n        var numLongerBlocks = specialVersion ? 8 : numResultBlocks;\n        for (var j = 0; j < numLongerBlocks; j++) {\n            result[j].codewords[longerBlocksNumDataCodewords - 1] = rawCodewords[rawCodewordsOffset++];\n        }\n        // Now add in error correction blocks\n        var max = result[0].codewords.length;\n        for (var i = longerBlocksNumDataCodewords; i < max; i++) {\n            for (var j = 0; j < numResultBlocks; j++) {\n                var jOffset = specialVersion ? (j + 8) % numResultBlocks : j;\n                var 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    DataBlock.prototype.getNumDataCodewords = function () {\n        return this.numDataCodewords;\n    };\n    DataBlock.prototype.getCodewords = function () {\n        return this.codewords;\n    };\n    return DataBlock;\n}());\nexport default DataBlock;\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 {*/\nimport IllegalArgumentException from '../IllegalArgumentException';\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 */\nvar BitSource = /** @class */ (function () {\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    function BitSource(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    BitSource.prototype.getBitOffset = function () {\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    BitSource.prototype.getByteOffset = function () {\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    BitSource.prototype.readBits = function (numBits /*int*/) {\n        if (numBits < 1 || numBits > 32 || numBits > this.available()) {\n            throw new IllegalArgumentException('' + numBits);\n        }\n        var result = 0;\n        var bitOffset = this.bitOffset;\n        var byteOffset = this.byteOffset;\n        var bytes = this.bytes;\n        // First, read remainder from current byte\n        if (bitOffset > 0) {\n            var bitsLeft = 8 - bitOffset;\n            var toRead = numBits < bitsLeft ? numBits : bitsLeft;\n            var bitsToNotRead = bitsLeft - toRead;\n            var 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                var bitsToNotRead = 8 - numBits;\n                var 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    BitSource.prototype.available = function () {\n        return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset;\n    };\n    return BitSource;\n}());\nexport default BitSource;\n", "import DecoderResult from '../../common/DecoderResult';\nimport BitSource from '../../common/BitSource';\nimport StringBuilder from '../../util/StringBuilder';\nimport StringEncoding from '../../util/StringEncoding';\nimport StringUtils from '../../common/StringUtils';\nimport FormatException from '../../FormatException';\nimport IllegalStateException from '../../IllegalStateException';\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 */\nvar 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 */\nvar DecodedBitStreamParser = /** @class */ (function () {\n    function DecodedBitStreamParser() {\n    }\n    DecodedBitStreamParser.decode = function (bytes) {\n        var bits = new BitSource(bytes);\n        var result = new StringBuilder();\n        var resultTrailer = new StringBuilder();\n        var byteSegments = new Array();\n        var 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    DecodedBitStreamParser.decodeAsciiSegment = function (bits, result, resultTrailer) {\n        var upperShift = false;\n        do {\n            var 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                var 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    DecodedBitStreamParser.decodeC40Segment = function (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        var upperShift = false;\n        var cValues = [];\n        var 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            var firstByte = bits.readBits(8);\n            if (firstByte === 254) { // Unlatch codeword\n                return;\n            }\n            this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n            for (var i = 0; i < 3; i++) {\n                var 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                            var 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                            var 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    DecodedBitStreamParser.decodeTextSegment = function (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        var upperShift = false;\n        var cValues = [];\n        var 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            var firstByte = bits.readBits(8);\n            if (firstByte === 254) { // Unlatch codeword\n                return;\n            }\n            this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n            for (var i = 0; i < 3; i++) {\n                var 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                            var 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                            var 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                            var 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    DecodedBitStreamParser.decodeAnsiX12Segment = function (bits, result) {\n        // Three ANSI X12 values are encoded in a 16-bit value as\n        // (1600 * C1) + (40 * C2) + C3 + 1\n        var 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            var firstByte = bits.readBits(8);\n            if (firstByte === 254) { // Unlatch codeword\n                return;\n            }\n            this.parseTwoBytes(firstByte, bits.readBits(8), cValues);\n            for (var i = 0; i < 3; i++) {\n                var 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    DecodedBitStreamParser.parseTwoBytes = function (firstByte, secondByte, result) {\n        var fullBitValue = (firstByte << 8) + secondByte - 1;\n        var 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    DecodedBitStreamParser.decodeEdifactSegment = function (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 (var i = 0; i < 4; i++) {\n                var 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                    var 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    DecodedBitStreamParser.decodeBase256Segment = function (bits, result, byteSegments) {\n        // Figure out how long the Base 256 Segment is.\n        var codewordPosition = 1 + bits.getByteOffset(); // position is 1-indexed\n        var d1 = this.unrandomize255State(bits.readBits(8), codewordPosition++);\n        var 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        var bytes = new Uint8Array(count);\n        for (var 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    DecodedBitStreamParser.unrandomize255State = function (randomizedBase256Codeword, base256CodewordPosition) {\n        var pseudoRandomNumber = ((149 * base256CodewordPosition) % 255) + 1;\n        var tempVariable = randomizedBase256Codeword - pseudoRandomNumber;\n        return tempVariable >= 0 ? tempVariable : tempVariable + 256;\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    return DecodedBitStreamParser;\n}());\nexport default DecodedBitStreamParser;\n", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport ChecksumException from '../../ChecksumException';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonDecoder from '../../common/reedsolomon/ReedSolomonDecoder';\nimport BitMatrixParser from './BitMatrixParser';\nimport DataBlock from './DataBlock';\nimport DecodedBitStreamParser from './DecodedBitStreamParser';\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 */\nvar Decoder = /** @class */ (function () {\n    function Decoder() {\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    Decoder.prototype.decode = function (bits) {\n        var e_1, _a;\n        // Construct a parser and read version, error-correction level\n        var parser = new BitMatrixParser(bits);\n        var version = parser.getVersion();\n        // Read codewords\n        var codewords = parser.readCodewords();\n        // Separate into data blocks\n        var dataBlocks = DataBlock.getDataBlocks(codewords, version);\n        // Count total number of data bytes\n        var totalBytes = 0;\n        try {\n            for (var dataBlocks_1 = __values(dataBlocks), dataBlocks_1_1 = dataBlocks_1.next(); !dataBlocks_1_1.done; dataBlocks_1_1 = dataBlocks_1.next()) {\n                var db = dataBlocks_1_1.value;\n                totalBytes += db.getNumDataCodewords();\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (dataBlocks_1_1 && !dataBlocks_1_1.done && (_a = dataBlocks_1.return)) _a.call(dataBlocks_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        var resultBytes = new Uint8Array(totalBytes);\n        var dataBlocksCount = dataBlocks.length;\n        // Error-correct and copy data blocks together into a stream of bytes\n        for (var j = 0; j < dataBlocksCount; j++) {\n            var dataBlock = dataBlocks[j];\n            var codewordBytes = dataBlock.getCodewords();\n            var numDataCodewords = dataBlock.getNumDataCodewords();\n            this.correctErrors(codewordBytes, numDataCodewords);\n            for (var 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    Decoder.prototype.correctErrors = function (codewordBytes, numDataCodewords) {\n        // const numCodewords = codewordBytes.length;\n        // First read into an array of ints\n        var 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 (var i = 0; i < numDataCodewords; i++) {\n            codewordBytes[i] = codewordsInts[i];\n        }\n    };\n    return Decoder;\n}());\nexport default Decoder;\n", "import WhiteRectangleDetector from '../../common/detector/WhiteRectangleDetector';\nimport DetectorResult from '../../common/DetectorResult';\nimport GridSamplerInstance from '../../common/GridSamplerInstance';\nimport NotFoundException from '../../NotFoundException';\nimport ResultPoint from '../../ResultPoint';\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/**\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 */\nvar Detector = /** @class */ (function () {\n    function Detector(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    Detector.prototype.detect = function () {\n        var cornerPoints = this.rectangleDetector.detect();\n        var 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        var topLeft = points[0];\n        var bottomLeft = points[1];\n        var bottomRight = points[2];\n        var topRight = points[3];\n        var dimensionTop = this.transitionsBetween(topLeft, topRight) + 1;\n        var 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        var bits = Detector.sampleGrid(this.image, topLeft, bottomLeft, bottomRight, topRight, dimensionTop, dimensionRight);\n        return new DetectorResult(bits, [topLeft, bottomLeft, bottomRight, topRight]);\n    };\n    Detector.shiftPoint = function (point, to, div) {\n        var x = (to.getX() - point.getX()) / (div + 1);\n        var y = (to.getY() - point.getY()) / (div + 1);\n        return new ResultPoint(point.getX() + x, point.getY() + y);\n    };\n    Detector.moveAway = function (point, fromX, fromY) {\n        var x = point.getX();\n        var 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    Detector.prototype.detectSolid1 = function (cornerPoints) {\n        // 0  2\n        // 1  3\n        var pointA = cornerPoints[0];\n        var pointB = cornerPoints[1];\n        var pointC = cornerPoints[3];\n        var pointD = cornerPoints[2];\n        var trAB = this.transitionsBetween(pointA, pointB);\n        var trBC = this.transitionsBetween(pointB, pointC);\n        var trCD = this.transitionsBetween(pointC, pointD);\n        var trDA = this.transitionsBetween(pointD, pointA);\n        // 0..3\n        // :  :\n        // 1--2\n        var min = trAB;\n        var 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    Detector.prototype.detectSolid2 = function (points) {\n        // A..D\n        // :  :\n        // B--C\n        var pointA = points[0];\n        var pointB = points[1];\n        var pointC = points[2];\n        var pointD = points[3];\n        // Transition detection on the edge is not stable.\n        // To safely detect, shift the points to the module center.\n        var tr = this.transitionsBetween(pointA, pointD);\n        var pointBs = Detector.shiftPoint(pointB, pointC, (tr + 1) * 4);\n        var pointCs = Detector.shiftPoint(pointC, pointB, (tr + 1) * 4);\n        var trBA = this.transitionsBetween(pointBs, pointA);\n        var 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    Detector.prototype.correctTopRight = function (points) {\n        // A..D\n        // |  :\n        // B--C\n        var pointA = points[0];\n        var pointB = points[1];\n        var pointC = points[2];\n        var pointD = points[3];\n        // shift points for safe transition detection.\n        var trTop = this.transitionsBetween(pointA, pointD);\n        var trRight = this.transitionsBetween(pointB, pointD);\n        var pointAs = Detector.shiftPoint(pointA, pointB, (trRight + 1) * 4);\n        var pointCs = Detector.shiftPoint(pointC, pointB, (trTop + 1) * 4);\n        trTop = this.transitionsBetween(pointAs, pointD);\n        trRight = this.transitionsBetween(pointCs, pointD);\n        var candidate1 = new ResultPoint(pointD.getX() + (pointC.getX() - pointB.getX()) / (trTop + 1), pointD.getY() + (pointC.getY() - pointB.getY()) / (trTop + 1));\n        var 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        var sumc1 = this.transitionsBetween(pointAs, candidate1) + this.transitionsBetween(pointCs, candidate1);\n        var 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    Detector.prototype.shiftToModuleCenter = function (points) {\n        // A..D\n        // |  :\n        // B--C\n        var pointA = points[0];\n        var pointB = points[1];\n        var pointC = points[2];\n        var pointD = points[3];\n        // calculate pseudo dimensions\n        var dimH = this.transitionsBetween(pointA, pointD) + 1;\n        var dimV = this.transitionsBetween(pointC, pointD) + 1;\n        // shift points for safe dimension detection\n        var pointAs = Detector.shiftPoint(pointA, pointB, dimV * 4);\n        var pointCs = Detector.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        var centerX = (pointA.getX() + pointB.getX() + pointC.getX() + pointD.getX()) / 4;\n        var centerY = (pointA.getY() + pointB.getY() + pointC.getY() + pointD.getY()) / 4;\n        pointA = Detector.moveAway(pointA, centerX, centerY);\n        pointB = Detector.moveAway(pointB, centerX, centerY);\n        pointC = Detector.moveAway(pointC, centerX, centerY);\n        pointD = Detector.moveAway(pointD, centerX, centerY);\n        var pointBs;\n        var pointDs;\n        // shift points to the center of each modules\n        pointAs = Detector.shiftPoint(pointA, pointB, dimV * 4);\n        pointAs = Detector.shiftPoint(pointAs, pointD, dimH * 4);\n        pointBs = Detector.shiftPoint(pointB, pointA, dimV * 4);\n        pointBs = Detector.shiftPoint(pointBs, pointC, dimH * 4);\n        pointCs = Detector.shiftPoint(pointC, pointD, dimV * 4);\n        pointCs = Detector.shiftPoint(pointCs, pointB, dimH * 4);\n        pointDs = Detector.shiftPoint(pointD, pointC, dimV * 4);\n        pointDs = Detector.shiftPoint(pointDs, pointA, dimH * 4);\n        return [pointAs, pointBs, pointCs, pointDs];\n    };\n    Detector.prototype.isValid = function (p) {\n        return p.getX() >= 0 && p.getX() < this.image.getWidth() && p.getY() > 0 && p.getY() < this.image.getHeight();\n    };\n    Detector.sampleGrid = function (image, topLeft, bottomLeft, bottomRight, topRight, dimensionX, dimensionY) {\n        var 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    Detector.prototype.transitionsBetween = function (from, to) {\n        // See QR Code Detector, sizeOfBlackWhiteBlackRun()\n        var fromX = Math.trunc(from.getX());\n        var fromY = Math.trunc(from.getY());\n        var toX = Math.trunc(to.getX());\n        var toY = Math.trunc(to.getY());\n        var steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);\n        if (steep) {\n            var temp = fromX;\n            fromX = fromY;\n            fromY = temp;\n            temp = toX;\n            toX = toY;\n            toY = temp;\n        }\n        var dx = Math.abs(toX - fromX);\n        var dy = Math.abs(toY - fromY);\n        var error = -dx / 2;\n        var ystep = fromY < toY ? 1 : -1;\n        var xstep = fromX < toX ? 1 : -1;\n        var transitions = 0;\n        var inBlack = this.image.get(steep ? fromY : fromX, steep ? fromX : fromY);\n        for (var x = fromX, y = fromY; x !== toX; x += xstep) {\n            var 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    return Detector;\n}());\nexport default Detector;\n", "import BarcodeFormat from '../BarcodeFormat';\nimport BitMatrix from '../common/BitMatrix';\nimport DecodeHintType from '../DecodeHintType';\nimport NotFoundException from '../NotFoundException';\nimport Result from '../Result';\nimport ResultMetadataType from '../ResultMetadataType';\nimport System from '../util/System';\nimport Decoder from './decoder/Decoder';\nimport Detector from './detector/Detector';\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 */\nvar DataMatrixReader = /** @class */ (function () {\n    function DataMatrixReader() {\n        this.decoder = new Decoder();\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    DataMatrixReader.prototype.decode = function (image, hints) {\n        if (hints === void 0) { hints = null; }\n        var decoderResult;\n        var points;\n        if (hints != null && hints.has(DecodeHintType.PURE_BARCODE)) {\n            var bits = DataMatrixReader.extractPureBits(image.getBlackMatrix());\n            decoderResult = this.decoder.decode(bits);\n            points = DataMatrixReader.NO_POINTS;\n        }\n        else {\n            var detectorResult = new Detector(image.getBlackMatrix()).detect();\n            decoderResult = this.decoder.decode(detectorResult.getBits());\n            points = detectorResult.getPoints();\n        }\n        var rawBytes = decoderResult.getRawBytes();\n        var result = new Result(decoderResult.getText(), rawBytes, 8 * rawBytes.length, points, BarcodeFormat.DATA_MATRIX, System.currentTimeMillis());\n        var byteSegments = decoderResult.getByteSegments();\n        if (byteSegments != null) {\n            result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments);\n        }\n        var ecLevel = decoderResult.getECLevel();\n        if (ecLevel != null) {\n            result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);\n        }\n        return result;\n    };\n    // @Override\n    DataMatrixReader.prototype.reset = function () {\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    DataMatrixReader.extractPureBits = function (image) {\n        var leftTopBlack = image.getTopLeftOnBit();\n        var rightBottomBlack = image.getBottomRightOnBit();\n        if (leftTopBlack == null || rightBottomBlack == null) {\n            throw new NotFoundException();\n        }\n        var moduleSize = this.moduleSize(leftTopBlack, image);\n        var top = leftTopBlack[1];\n        var bottom = rightBottomBlack[1];\n        var left = leftTopBlack[0];\n        var right = rightBottomBlack[0];\n        var matrixWidth = (right - left + 1) / moduleSize;\n        var 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        var nudge = moduleSize / 2;\n        top += nudge;\n        left += nudge;\n        // Now just read off the bits\n        var bits = new BitMatrix(matrixWidth, matrixHeight);\n        for (var y = 0; y < matrixHeight; y++) {\n            var iOffset = top + y * moduleSize;\n            for (var 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    DataMatrixReader.moduleSize = function (leftTopBlack, image) {\n        var width = image.getWidth();\n        var x = leftTopBlack[0];\n        var y = leftTopBlack[1];\n        while (x < width && image.get(x, y)) {\n            x++;\n        }\n        if (x === width) {\n            throw new NotFoundException();\n        }\n        var moduleSize = x - leftTopBlack[0];\n        if (moduleSize === 0) {\n            throw new NotFoundException();\n        }\n        return moduleSize;\n    };\n    DataMatrixReader.NO_POINTS = [];\n    return DataMatrixReader;\n}());\nexport default DataMatrixReader;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport DataMatrixReader from '../core/datamatrix/DataMatrixReader';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * QR Code reader to use from browser.\n */\nvar BrowserDatamatrixCodeReader = /** @class */ (function (_super) {\n    __extends(BrowserDatamatrixCodeReader, _super);\n    /**\n     * Creates an instance of BrowserQRCodeReader.\n     * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n     */\n    function BrowserDatamatrixCodeReader(timeBetweenScansMillis) {\n        if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n        return _super.call(this, new DataMatrixReader(), timeBetweenScansMillis) || this;\n    }\n    return BrowserDatamatrixCodeReader;\n}(BrowserCodeReader));\nexport { BrowserDatamatrixCodeReader };\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.qrcode.decoder {*/\nimport ArgumentException from '../../ArgumentException';\nimport IllegalArgumentException from '../../IllegalArgumentException';\nexport 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 */\nvar ErrorCorrectionLevel = /** @class */ (function () {\n    function ErrorCorrectionLevel(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    ErrorCorrectionLevel.prototype.getValue = function () {\n        return this.value;\n    };\n    ErrorCorrectionLevel.prototype.getBits = function () {\n        return this.bits;\n    };\n    ErrorCorrectionLevel.fromString = function (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    ErrorCorrectionLevel.prototype.toString = function () {\n        return this.stringValue;\n    };\n    ErrorCorrectionLevel.prototype.equals = function (o) {\n        if (!(o instanceof ErrorCorrectionLevel)) {\n            return false;\n        }\n        var 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    ErrorCorrectionLevel.forBits = function (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    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    return ErrorCorrectionLevel;\n}());\nexport default ErrorCorrectionLevel;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.decoder {*/\nimport ErrorCorrectionLevel from './ErrorCorrectionLevel';\nimport Integer from '../../util/Integer';\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 */\nvar FormatInformation = /** @class */ (function () {\n    function FormatInformation(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    FormatInformation.numBitsDiffering = function (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    FormatInformation.decodeFormatInformation = function (maskedFormatInfo1 /*int*/, maskedFormatInfo2 /*int*/) {\n        var 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    FormatInformation.doDecodeFormatInformation = function (maskedFormatInfo1 /*int*/, maskedFormatInfo2 /*int*/) {\n        var e_1, _a;\n        // Find the int in FORMAT_INFO_DECODE_LOOKUP with fewest bits differing\n        var bestDifference = Number.MAX_SAFE_INTEGER;\n        var bestFormatInfo = 0;\n        try {\n            for (var _b = __values(FormatInformation.FORMAT_INFO_DECODE_LOOKUP), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var decodeInfo = _c.value;\n                var targetInfo = decodeInfo[0];\n                if (targetInfo === maskedFormatInfo1 || targetInfo === maskedFormatInfo2) {\n                    // Found an exact match\n                    return new FormatInformation(decodeInfo[1]);\n                }\n                var 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        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\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    FormatInformation.prototype.getErrorCorrectionLevel = function () {\n        return this.errorCorrectionLevel;\n    };\n    FormatInformation.prototype.getDataMask = function () {\n        return this.dataMask;\n    };\n    /*@Override*/\n    FormatInformation.prototype.hashCode = function () {\n        return (this.errorCorrectionLevel.getBits() << 3) | this.dataMask;\n    };\n    /*@Override*/\n    FormatInformation.prototype.equals = function (o) {\n        if (!(o instanceof FormatInformation)) {\n            return false;\n        }\n        var other = o;\n        return this.errorCorrectionLevel === other.errorCorrectionLevel &&\n            this.dataMask === other.dataMask;\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    return FormatInformation;\n}());\nexport default FormatInformation;\n", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\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 */\nvar ECBlocks = /** @class */ (function () {\n    function ECBlocks(ecCodewordsPerBlock /*int*/) {\n        var ecBlocks = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            ecBlocks[_i - 1] = arguments[_i];\n        }\n        this.ecCodewordsPerBlock = ecCodewordsPerBlock;\n        this.ecBlocks = ecBlocks;\n    }\n    ECBlocks.prototype.getECCodewordsPerBlock = function () {\n        return this.ecCodewordsPerBlock;\n    };\n    ECBlocks.prototype.getNumBlocks = function () {\n        var e_1, _a;\n        var total = 0;\n        var ecBlocks = this.ecBlocks;\n        try {\n            for (var ecBlocks_1 = __values(ecBlocks), ecBlocks_1_1 = ecBlocks_1.next(); !ecBlocks_1_1.done; ecBlocks_1_1 = ecBlocks_1.next()) {\n                var ecBlock = ecBlocks_1_1.value;\n                total += ecBlock.getCount();\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (ecBlocks_1_1 && !ecBlocks_1_1.done && (_a = ecBlocks_1.return)) _a.call(ecBlocks_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return total;\n    };\n    ECBlocks.prototype.getTotalECCodewords = function () {\n        return this.ecCodewordsPerBlock * this.getNumBlocks();\n    };\n    ECBlocks.prototype.getECBlocks = function () {\n        return this.ecBlocks;\n    };\n    return ECBlocks;\n}());\nexport default ECBlocks;\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 */\nvar ECB = /** @class */ (function () {\n    function ECB(count /*int*/, dataCodewords /*int*/) {\n        this.count = count;\n        this.dataCodewords = dataCodewords;\n    }\n    ECB.prototype.getCount = function () {\n        return this.count;\n    };\n    ECB.prototype.getDataCodewords = function () {\n        return this.dataCodewords;\n    };\n    return ECB;\n}());\nexport default ECB;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.decoder {*/\nimport BitMatrix from '../../common/BitMatrix';\nimport FormatInformation from './FormatInformation';\nimport ECBlocks from './ECBlocks';\nimport ECB from './ECB';\nimport FormatException from '../../FormatException';\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n * See ISO 18004:2006 Annex D\n *\n * @author Sean Owen\n */\nvar Version = /** @class */ (function () {\n    function Version(versionNumber /*int*/, alignmentPatternCenters) {\n        var e_1, _a;\n        var ecBlocks = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            ecBlocks[_i - 2] = arguments[_i];\n        }\n        this.versionNumber = versionNumber;\n        this.alignmentPatternCenters = alignmentPatternCenters;\n        this.ecBlocks = ecBlocks;\n        var total = 0;\n        var ecCodewords = ecBlocks[0].getECCodewordsPerBlock();\n        var ecbArray = ecBlocks[0].getECBlocks();\n        try {\n            for (var ecbArray_1 = __values(ecbArray), ecbArray_1_1 = ecbArray_1.next(); !ecbArray_1_1.done; ecbArray_1_1 = ecbArray_1.next()) {\n                var ecBlock = ecbArray_1_1.value;\n                total += ecBlock.getCount() * (ecBlock.getDataCodewords() + ecCodewords);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (ecbArray_1_1 && !ecbArray_1_1.done && (_a = ecbArray_1.return)) _a.call(ecbArray_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        this.totalCodewords = total;\n    }\n    Version.prototype.getVersionNumber = function () {\n        return this.versionNumber;\n    };\n    Version.prototype.getAlignmentPatternCenters = function () {\n        return this.alignmentPatternCenters;\n    };\n    Version.prototype.getTotalCodewords = function () {\n        return this.totalCodewords;\n    };\n    Version.prototype.getDimensionForVersion = function () {\n        return 17 + 4 * this.versionNumber;\n    };\n    Version.prototype.getECBlocksForLevel = function (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    Version.getProvisionalVersionForDimension = function (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    Version.getVersionForNumber = function (versionNumber /*int*/) {\n        if (versionNumber < 1 || versionNumber > 40) {\n            throw new IllegalArgumentException();\n        }\n        return Version.VERSIONS[versionNumber - 1];\n    };\n    Version.decodeVersionInformation = function (versionBits /*int*/) {\n        var bestDifference = Number.MAX_SAFE_INTEGER;\n        var bestVersion = 0;\n        for (var i = 0; i < Version.VERSION_DECODE_INFO.length; i++) {\n            var targetVersion = Version.VERSION_DECODE_INFO[i];\n            // Do the version info bits match exactly? done.\n            if (targetVersion === versionBits) {\n                return Version.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            var 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.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    Version.prototype.buildFunctionPattern = function () {\n        var dimension = this.getDimensionForVersion();\n        var 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        var max = this.alignmentPatternCenters.length;\n        for (var x = 0; x < max; x++) {\n            var i = this.alignmentPatternCenters[x] - 2;\n            for (var 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    Version.prototype.toString = function () {\n        return '' + this.versionNumber;\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.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.VERSIONS = [\n        new Version(1, new Int32Array(0), new ECBlocks(7, new ECB(1, 19)), new ECBlocks(10, new ECB(1, 16)), new ECBlocks(13, new ECB(1, 13)), new ECBlocks(17, new ECB(1, 9))),\n        new Version(2, Int32Array.from([6, 18]), new ECBlocks(10, new ECB(1, 34)), new ECBlocks(16, new ECB(1, 28)), new ECBlocks(22, new ECB(1, 22)), new ECBlocks(28, new ECB(1, 16))),\n        new Version(3, Int32Array.from([6, 22]), new ECBlocks(15, new ECB(1, 55)), new ECBlocks(26, new ECB(1, 44)), new ECBlocks(18, new ECB(2, 17)), new ECBlocks(22, new ECB(2, 13))),\n        new Version(4, Int32Array.from([6, 26]), new ECBlocks(20, new ECB(1, 80)), new ECBlocks(18, new ECB(2, 32)), new ECBlocks(26, new ECB(2, 24)), new ECBlocks(16, new ECB(4, 9))),\n        new Version(5, Int32Array.from([6, 30]), new ECBlocks(26, new ECB(1, 108)), new ECBlocks(24, new ECB(2, 43)), new ECBlocks(18, new ECB(2, 15), new ECB(2, 16)), new ECBlocks(22, new ECB(2, 11), new ECB(2, 12))),\n        new Version(6, Int32Array.from([6, 34]), new ECBlocks(18, new ECB(2, 68)), new ECBlocks(16, new ECB(4, 27)), new ECBlocks(24, new ECB(4, 19)), new ECBlocks(28, new ECB(4, 15))),\n        new Version(7, Int32Array.from([6, 22, 38]), new ECBlocks(20, new ECB(2, 78)), new ECBlocks(18, new ECB(4, 31)), new ECBlocks(18, new ECB(2, 14), new ECB(4, 15)), new ECBlocks(26, new ECB(4, 13), new ECB(1, 14))),\n        new Version(8, Int32Array.from([6, 24, 42]), new ECBlocks(24, new ECB(2, 97)), new ECBlocks(22, new ECB(2, 38), new ECB(2, 39)), new ECBlocks(22, new ECB(4, 18), new ECB(2, 19)), new ECBlocks(26, new ECB(4, 14), new ECB(2, 15))),\n        new Version(9, Int32Array.from([6, 26, 46]), new ECBlocks(30, new ECB(2, 116)), new ECBlocks(22, new ECB(3, 36), new ECB(2, 37)), new ECBlocks(20, new ECB(4, 16), new ECB(4, 17)), new ECBlocks(24, new ECB(4, 12), new ECB(4, 13))),\n        new Version(10, Int32Array.from([6, 28, 50]), new ECBlocks(18, new ECB(2, 68), new ECB(2, 69)), new ECBlocks(26, new ECB(4, 43), new ECB(1, 44)), new ECBlocks(24, new ECB(6, 19), new ECB(2, 20)), new ECBlocks(28, new ECB(6, 15), new ECB(2, 16))),\n        new Version(11, Int32Array.from([6, 30, 54]), new ECBlocks(20, new ECB(4, 81)), new ECBlocks(30, new ECB(1, 50), new ECB(4, 51)), new ECBlocks(28, new ECB(4, 22), new ECB(4, 23)), new ECBlocks(24, new ECB(3, 12), new ECB(8, 13))),\n        new Version(12, Int32Array.from([6, 32, 58]), new ECBlocks(24, new ECB(2, 92), new ECB(2, 93)), new ECBlocks(22, new ECB(6, 36), new ECB(2, 37)), new ECBlocks(26, new ECB(4, 20), new ECB(6, 21)), new ECBlocks(28, new ECB(7, 14), new ECB(4, 15))),\n        new Version(13, Int32Array.from([6, 34, 62]), new ECBlocks(26, new ECB(4, 107)), new ECBlocks(22, new ECB(8, 37), new ECB(1, 38)), new ECBlocks(24, new ECB(8, 20), new ECB(4, 21)), new ECBlocks(22, new ECB(12, 11), new ECB(4, 12))),\n        new Version(14, Int32Array.from([6, 26, 46, 66]), new ECBlocks(30, new ECB(3, 115), new ECB(1, 116)), new ECBlocks(24, new ECB(4, 40), new ECB(5, 41)), new ECBlocks(20, new ECB(11, 16), new ECB(5, 17)), new ECBlocks(24, new ECB(11, 12), new ECB(5, 13))),\n        new Version(15, Int32Array.from([6, 26, 48, 70]), new ECBlocks(22, new ECB(5, 87), new ECB(1, 88)), new ECBlocks(24, new ECB(5, 41), new ECB(5, 42)), new ECBlocks(30, new ECB(5, 24), new ECB(7, 25)), new ECBlocks(24, new ECB(11, 12), new ECB(7, 13))),\n        new Version(16, Int32Array.from([6, 26, 50, 74]), new ECBlocks(24, new ECB(5, 98), new ECB(1, 99)), new ECBlocks(28, new ECB(7, 45), new ECB(3, 46)), new ECBlocks(24, new ECB(15, 19), new ECB(2, 20)), new ECBlocks(30, new ECB(3, 15), new ECB(13, 16))),\n        new Version(17, Int32Array.from([6, 30, 54, 78]), new ECBlocks(28, new ECB(1, 107), new ECB(5, 108)), new ECBlocks(28, new ECB(10, 46), new ECB(1, 47)), new ECBlocks(28, new ECB(1, 22), new ECB(15, 23)), new ECBlocks(28, new ECB(2, 14), new ECB(17, 15))),\n        new Version(18, Int32Array.from([6, 30, 56, 82]), new ECBlocks(30, new ECB(5, 120), new ECB(1, 121)), new ECBlocks(26, new ECB(9, 43), new ECB(4, 44)), new ECBlocks(28, new ECB(17, 22), new ECB(1, 23)), new ECBlocks(28, new ECB(2, 14), new ECB(19, 15))),\n        new Version(19, Int32Array.from([6, 30, 58, 86]), new ECBlocks(28, new ECB(3, 113), new ECB(4, 114)), new ECBlocks(26, new ECB(3, 44), new ECB(11, 45)), new ECBlocks(26, new ECB(17, 21), new ECB(4, 22)), new ECBlocks(26, new ECB(9, 13), new ECB(16, 14))),\n        new Version(20, Int32Array.from([6, 34, 62, 90]), new ECBlocks(28, new ECB(3, 107), new ECB(5, 108)), new ECBlocks(26, new ECB(3, 41), new ECB(13, 42)), new ECBlocks(30, new ECB(15, 24), new ECB(5, 25)), new ECBlocks(28, new ECB(15, 15), new ECB(10, 16))),\n        new Version(21, Int32Array.from([6, 28, 50, 72, 94]), new ECBlocks(28, new ECB(4, 116), new ECB(4, 117)), new ECBlocks(26, new ECB(17, 42)), new ECBlocks(28, new ECB(17, 22), new ECB(6, 23)), new ECBlocks(30, new ECB(19, 16), new ECB(6, 17))),\n        new Version(22, Int32Array.from([6, 26, 50, 74, 98]), new ECBlocks(28, new ECB(2, 111), new ECB(7, 112)), new ECBlocks(28, new ECB(17, 46)), new ECBlocks(30, new ECB(7, 24), new ECB(16, 25)), new ECBlocks(24, new ECB(34, 13))),\n        new Version(23, Int32Array.from([6, 30, 54, 78, 102]), new ECBlocks(30, new ECB(4, 121), new ECB(5, 122)), new ECBlocks(28, new ECB(4, 47), new ECB(14, 48)), new ECBlocks(30, new ECB(11, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(16, 15), new ECB(14, 16))),\n        new Version(24, Int32Array.from([6, 28, 54, 80, 106]), new ECBlocks(30, new ECB(6, 117), new ECB(4, 118)), new ECBlocks(28, new ECB(6, 45), new ECB(14, 46)), new ECBlocks(30, new ECB(11, 24), new ECB(16, 25)), new ECBlocks(30, new ECB(30, 16), new ECB(2, 17))),\n        new Version(25, Int32Array.from([6, 32, 58, 84, 110]), new ECBlocks(26, new ECB(8, 106), new ECB(4, 107)), new ECBlocks(28, new ECB(8, 47), new ECB(13, 48)), new ECBlocks(30, new ECB(7, 24), new ECB(22, 25)), new ECBlocks(30, new ECB(22, 15), new ECB(13, 16))),\n        new Version(26, Int32Array.from([6, 30, 58, 86, 114]), new ECBlocks(28, new ECB(10, 114), new ECB(2, 115)), new ECBlocks(28, new ECB(19, 46), new ECB(4, 47)), new ECBlocks(28, new ECB(28, 22), new ECB(6, 23)), new ECBlocks(30, new ECB(33, 16), new ECB(4, 17))),\n        new Version(27, Int32Array.from([6, 34, 62, 90, 118]), new ECBlocks(30, new ECB(8, 122), new ECB(4, 123)), new ECBlocks(28, new ECB(22, 45), new ECB(3, 46)), new ECBlocks(30, new ECB(8, 23), new ECB(26, 24)), new ECBlocks(30, new ECB(12, 15), new ECB(28, 16))),\n        new Version(28, Int32Array.from([6, 26, 50, 74, 98, 122]), new ECBlocks(30, new ECB(3, 117), new ECB(10, 118)), new ECBlocks(28, new ECB(3, 45), new ECB(23, 46)), new ECBlocks(30, new ECB(4, 24), new ECB(31, 25)), new ECBlocks(30, new ECB(11, 15), new ECB(31, 16))),\n        new Version(29, Int32Array.from([6, 30, 54, 78, 102, 126]), new ECBlocks(30, new ECB(7, 116), new ECB(7, 117)), new ECBlocks(28, new ECB(21, 45), new ECB(7, 46)), new ECBlocks(30, new ECB(1, 23), new ECB(37, 24)), new ECBlocks(30, new ECB(19, 15), new ECB(26, 16))),\n        new Version(30, Int32Array.from([6, 26, 52, 78, 104, 130]), new ECBlocks(30, new ECB(5, 115), new ECB(10, 116)), new ECBlocks(28, new ECB(19, 47), new ECB(10, 48)), new ECBlocks(30, new ECB(15, 24), new ECB(25, 25)), new ECBlocks(30, new ECB(23, 15), new ECB(25, 16))),\n        new Version(31, Int32Array.from([6, 30, 56, 82, 108, 134]), new ECBlocks(30, new ECB(13, 115), new ECB(3, 116)), new ECBlocks(28, new ECB(2, 46), new ECB(29, 47)), new ECBlocks(30, new ECB(42, 24), new ECB(1, 25)), new ECBlocks(30, new ECB(23, 15), new ECB(28, 16))),\n        new Version(32, Int32Array.from([6, 34, 60, 86, 112, 138]), new ECBlocks(30, new ECB(17, 115)), new ECBlocks(28, new ECB(10, 46), new ECB(23, 47)), new ECBlocks(30, new ECB(10, 24), new ECB(35, 25)), new ECBlocks(30, new ECB(19, 15), new ECB(35, 16))),\n        new Version(33, Int32Array.from([6, 30, 58, 86, 114, 142]), new ECBlocks(30, new ECB(17, 115), new ECB(1, 116)), new ECBlocks(28, new ECB(14, 46), new ECB(21, 47)), new ECBlocks(30, new ECB(29, 24), new ECB(19, 25)), new ECBlocks(30, new ECB(11, 15), new ECB(46, 16))),\n        new Version(34, Int32Array.from([6, 34, 62, 90, 118, 146]), new ECBlocks(30, new ECB(13, 115), new ECB(6, 116)), new ECBlocks(28, new ECB(14, 46), new ECB(23, 47)), new ECBlocks(30, new ECB(44, 24), new ECB(7, 25)), new ECBlocks(30, new ECB(59, 16), new ECB(1, 17))),\n        new Version(35, Int32Array.from([6, 30, 54, 78, 102, 126, 150]), new ECBlocks(30, new ECB(12, 121), new ECB(7, 122)), new ECBlocks(28, new ECB(12, 47), new ECB(26, 48)), new ECBlocks(30, new ECB(39, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(22, 15), new ECB(41, 16))),\n        new Version(36, Int32Array.from([6, 24, 50, 76, 102, 128, 154]), new ECBlocks(30, new ECB(6, 121), new ECB(14, 122)), new ECBlocks(28, new ECB(6, 47), new ECB(34, 48)), new ECBlocks(30, new ECB(46, 24), new ECB(10, 25)), new ECBlocks(30, new ECB(2, 15), new ECB(64, 16))),\n        new Version(37, Int32Array.from([6, 28, 54, 80, 106, 132, 158]), new ECBlocks(30, new ECB(17, 122), new ECB(4, 123)), new ECBlocks(28, new ECB(29, 46), new ECB(14, 47)), new ECBlocks(30, new ECB(49, 24), new ECB(10, 25)), new ECBlocks(30, new ECB(24, 15), new ECB(46, 16))),\n        new Version(38, Int32Array.from([6, 32, 58, 84, 110, 136, 162]), new ECBlocks(30, new ECB(4, 122), new ECB(18, 123)), new ECBlocks(28, new ECB(13, 46), new ECB(32, 47)), new ECBlocks(30, new ECB(48, 24), new ECB(14, 25)), new ECBlocks(30, new ECB(42, 15), new ECB(32, 16))),\n        new Version(39, Int32Array.from([6, 26, 54, 82, 110, 138, 166]), new ECBlocks(30, new ECB(20, 117), new ECB(4, 118)), new ECBlocks(28, new ECB(40, 47), new ECB(7, 48)), new ECBlocks(30, new ECB(43, 24), new ECB(22, 25)), new ECBlocks(30, new ECB(10, 15), new ECB(67, 16))),\n        new Version(40, Int32Array.from([6, 30, 58, 86, 114, 142, 170]), new ECBlocks(30, new ECB(19, 118), new ECB(6, 119)), new ECBlocks(28, new ECB(18, 47), new ECB(31, 48)), new ECBlocks(30, new ECB(34, 24), new ECB(34, 25)), new ECBlocks(30, new ECB(20, 15), new ECB(61, 16)))\n    ];\n    return Version;\n}());\nexport default Version;\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 */\nexport 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 */\nvar DataMask = /** @class */ (function () {\n    // See ISO 18004:2006 6.8.1\n    function DataMask(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    DataMask.prototype.unmaskBitMatrix = function (bits, dimension /*int*/) {\n        for (var i = 0; i < dimension; i++) {\n            for (var j = 0; j < dimension; j++) {\n                if (this.isMasked(i, j)) {\n                    bits.flip(j, i);\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, function (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, function (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, function (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, function (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, function (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, function (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, function (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, function (i /*int*/, j /*int*/) { return ((i + j + ((i * j) % 3)) & 0x01) === 0; })],\n    ]);\n    return DataMask;\n}());\nexport default DataMask;\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 */\nimport Version from './Version';\nimport FormatInformation from './FormatInformation';\nimport DataMask from './DataMask';\nimport FormatException from '../../FormatException';\n/**\n * @author Sean Owen\n */\nvar BitMatrixParser = /** @class */ (function () {\n    /**\n     * @param bitMatrix {@link BitMatrix} to parse\n     * @throws FormatException if dimension is not >= 21 and 1 mod 4\n     */\n    function BitMatrixParser(bitMatrix) {\n        var 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    BitMatrixParser.prototype.readFormatInformation = function () {\n        if (this.parsedFormatInfo !== null && this.parsedFormatInfo !== undefined) {\n            return this.parsedFormatInfo;\n        }\n        // Read top-left format info bits\n        var formatInfoBits1 = 0;\n        for (var 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 (var j = 5; j >= 0; j--) {\n            formatInfoBits1 = this.copyBit(8, j, formatInfoBits1);\n        }\n        // Read the top-right/bottom-left pattern too\n        var dimension = this.bitMatrix.getHeight();\n        var formatInfoBits2 = 0;\n        var jMin = dimension - 7;\n        for (var j = dimension - 1; j >= jMin; j--) {\n            formatInfoBits2 = this.copyBit(8, j, formatInfoBits2);\n        }\n        for (var 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    BitMatrixParser.prototype.readVersion = function () {\n        if (this.parsedVersion !== null && this.parsedVersion !== undefined) {\n            return this.parsedVersion;\n        }\n        var dimension = this.bitMatrix.getHeight();\n        var provisionalVersion = Math.floor((dimension - 17) / 4);\n        if (provisionalVersion <= 6) {\n            return Version.getVersionForNumber(provisionalVersion);\n        }\n        // Read top-right version info: 3 wide by 6 tall\n        var versionBits = 0;\n        var ijMin = dimension - 11;\n        for (var j = 5; j >= 0; j--) {\n            for (var i = dimension - 9; i >= ijMin; i--) {\n                versionBits = this.copyBit(i, j, versionBits);\n            }\n        }\n        var theParsedVersion = Version.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 (var i = 5; i >= 0; i--) {\n            for (var j = dimension - 9; j >= ijMin; j--) {\n                versionBits = this.copyBit(i, j, versionBits);\n            }\n        }\n        theParsedVersion = Version.decodeVersionInformation(versionBits);\n        if (theParsedVersion !== null && theParsedVersion.getDimensionForVersion() === dimension) {\n            this.parsedVersion = theParsedVersion;\n            return theParsedVersion;\n        }\n        throw new FormatException();\n    };\n    BitMatrixParser.prototype.copyBit = function (i /*int*/, j /*int*/, versionBits /*int*/) {\n        var 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    BitMatrixParser.prototype.readCodewords = function () {\n        var formatInfo = this.readFormatInformation();\n        var 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        var dataMask = DataMask.values.get(formatInfo.getDataMask());\n        var dimension = this.bitMatrix.getHeight();\n        dataMask.unmaskBitMatrix(this.bitMatrix, dimension);\n        var functionPattern = version.buildFunctionPattern();\n        var readingUp = true;\n        var result = new Uint8Array(version.getTotalCodewords());\n        var resultOffset = 0;\n        var currentByte = 0;\n        var bitsRead = 0;\n        // Read columns in pairs, from right to left\n        for (var 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 (var count = 0; count < dimension; count++) {\n                var i = readingUp ? dimension - 1 - count : count;\n                for (var 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    BitMatrixParser.prototype.remask = function () {\n        if (this.parsedFormatInfo === null) {\n            return; // We have no format information, and have no data mask\n        }\n        var dataMask = DataMask.values[this.parsedFormatInfo.getDataMask()];\n        var 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    BitMatrixParser.prototype.setMirror = function (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    BitMatrixParser.prototype.mirror = function () {\n        var bitMatrix = this.bitMatrix;\n        for (var x = 0, width = bitMatrix.getWidth(); x < width; x++) {\n            for (var 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    return BitMatrixParser;\n}());\nexport default BitMatrixParser;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport IllegalArgumentException from '../../IllegalArgumentException';\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 */\nvar DataBlock = /** @class */ (function () {\n    function DataBlock(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    DataBlock.getDataBlocks = function (rawCodewords, version, ecLevel) {\n        var e_1, _a, e_2, _b;\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        var ecBlocks = version.getECBlocksForLevel(ecLevel);\n        // First count the total number of data blocks\n        var totalBlocks = 0;\n        var ecBlockArray = ecBlocks.getECBlocks();\n        try {\n            for (var ecBlockArray_1 = __values(ecBlockArray), ecBlockArray_1_1 = ecBlockArray_1.next(); !ecBlockArray_1_1.done; ecBlockArray_1_1 = ecBlockArray_1.next()) {\n                var ecBlock = ecBlockArray_1_1.value;\n                totalBlocks += ecBlock.getCount();\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (ecBlockArray_1_1 && !ecBlockArray_1_1.done && (_a = ecBlockArray_1.return)) _a.call(ecBlockArray_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        // Now establish DataBlocks of the appropriate size and number of data codewords\n        var result = new Array(totalBlocks);\n        var numResultBlocks = 0;\n        try {\n            for (var ecBlockArray_2 = __values(ecBlockArray), ecBlockArray_2_1 = ecBlockArray_2.next(); !ecBlockArray_2_1.done; ecBlockArray_2_1 = ecBlockArray_2.next()) {\n                var ecBlock = ecBlockArray_2_1.value;\n                for (var i = 0; i < ecBlock.getCount(); i++) {\n                    var numDataCodewords = ecBlock.getDataCodewords();\n                    var numBlockCodewords = ecBlocks.getECCodewordsPerBlock() + numDataCodewords;\n                    result[numResultBlocks++] = new DataBlock(numDataCodewords, new Uint8Array(numBlockCodewords));\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (ecBlockArray_2_1 && !ecBlockArray_2_1.done && (_b = ecBlockArray_2.return)) _b.call(ecBlockArray_2);\n            }\n            finally { if (e_2) throw e_2.error; }\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        var shorterBlocksTotalCodewords = result[0].codewords.length;\n        var longerBlocksStartAt = result.length - 1;\n        // TYPESCRIPTPORT: check length is correct here\n        while (longerBlocksStartAt >= 0) {\n            var numCodewords = result[longerBlocksStartAt].codewords.length;\n            if (numCodewords === shorterBlocksTotalCodewords) {\n                break;\n            }\n            longerBlocksStartAt--;\n        }\n        longerBlocksStartAt++;\n        var 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        var rawCodewordsOffset = 0;\n        for (var i = 0; i < shorterBlocksNumDataCodewords; i++) {\n            for (var 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 (var j = longerBlocksStartAt; j < numResultBlocks; j++) {\n            result[j].codewords[shorterBlocksNumDataCodewords] = rawCodewords[rawCodewordsOffset++];\n        }\n        // Now add in error correction blocks\n        var max = result[0].codewords.length;\n        for (var i = shorterBlocksNumDataCodewords; i < max; i++) {\n            for (var j = 0; j < numResultBlocks; j++) {\n                var iOffset = j < longerBlocksStartAt ? i : i + 1;\n                result[j].codewords[iOffset] = rawCodewords[rawCodewordsOffset++];\n            }\n        }\n        return result;\n    };\n    DataBlock.prototype.getNumDataCodewords = function () {\n        return this.numDataCodewords;\n    };\n    DataBlock.prototype.getCodewords = function () {\n        return this.codewords;\n    };\n    return DataBlock;\n}());\nexport default DataBlock;\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 */\nimport IllegalArgumentException from '../../IllegalArgumentException';\nexport 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 */\nvar Mode = /** @class */ (function () {\n    function Mode(value, stringValue, characterCountBitsForVersions, bits /*int*/) {\n        this.value = value;\n        this.stringValue = stringValue;\n        this.characterCountBitsForVersions = characterCountBitsForVersions;\n        this.bits = bits;\n        Mode.FOR_BITS.set(bits, this);\n        Mode.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    Mode.forBits = function (bits /*int*/) {\n        var mode = Mode.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    Mode.prototype.getCharacterCountBits = function (version) {\n        var versionNumber = version.getVersionNumber();\n        var 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    Mode.prototype.getValue = function () {\n        return this.value;\n    };\n    Mode.prototype.getBits = function () {\n        return this.bits;\n    };\n    Mode.prototype.equals = function (o) {\n        if (!(o instanceof Mode)) {\n            return false;\n        }\n        var other = o;\n        return this.value === other.value;\n    };\n    Mode.prototype.toString = function () {\n        return this.stringValue;\n    };\n    Mode.FOR_BITS = new Map();\n    Mode.FOR_VALUE = new Map();\n    Mode.TERMINATOR = new Mode(ModeValues.TERMINATOR, 'TERMINATOR', Int32Array.from([0, 0, 0]), 0x00); // Not really a mode...\n    Mode.NUMERIC = new Mode(ModeValues.NUMERIC, 'NUMERIC', Int32Array.from([10, 12, 14]), 0x01);\n    Mode.ALPHANUMERIC = new Mode(ModeValues.ALPHANUMERIC, 'ALPHANUMERIC', Int32Array.from([9, 11, 13]), 0x02);\n    Mode.STRUCTURED_APPEND = new Mode(ModeValues.STRUCTURED_APPEND, 'STRUCTURED_APPEND', Int32Array.from([0, 0, 0]), 0x03); // Not supported\n    Mode.BYTE = new Mode(ModeValues.BYTE, 'BYTE', Int32Array.from([8, 16, 16]), 0x04);\n    Mode.ECI = new Mode(ModeValues.ECI, 'ECI', Int32Array.from([0, 0, 0]), 0x07); // character counts don't apply\n    Mode.KANJI = new Mode(ModeValues.KANJI, 'KANJI', Int32Array.from([8, 10, 12]), 0x08);\n    Mode.FNC1_FIRST_POSITION = new Mode(ModeValues.FNC1_FIRST_POSITION, 'FNC1_FIRST_POSITION', Int32Array.from([0, 0, 0]), 0x05);\n    Mode.FNC1_SECOND_POSITION = new Mode(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.HANZI = new Mode(ModeValues.HANZI, 'HANZI', Int32Array.from([8, 10, 12]), 0x0D);\n    return Mode;\n}());\nexport default Mode;\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.qrcode.decoder {*/\nimport BitSource from '../../common/BitSource';\nimport CharacterSetECI from '../../common/CharacterSetECI';\nimport DecoderResult from '../../common/DecoderResult';\nimport StringUtils from '../../common/StringUtils';\nimport FormatException from '../../FormatException';\nimport StringBuilder from '../../util/StringBuilder';\nimport StringEncoding from '../../util/StringEncoding';\nimport Mode from './Mode';\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 */\nvar DecodedBitStreamParser = /** @class */ (function () {\n    function DecodedBitStreamParser() {\n    }\n    DecodedBitStreamParser.decode = function (bytes, version, ecLevel, hints) {\n        var bits = new BitSource(bytes);\n        var result = new StringBuilder();\n        var 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        var symbolSequence = -1;\n        var parityData = -1;\n        try {\n            var currentCharacterSetECI = null;\n            var fc1InEffect = false;\n            var mode = void 0;\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.TERMINATOR;\n                }\n                else {\n                    var modeBits = bits.readBits(4);\n                    mode = Mode.forBits(modeBits); // mode is encoded by 4 bits\n                }\n                switch (mode) {\n                    case Mode.TERMINATOR:\n                        break;\n                    case Mode.FNC1_FIRST_POSITION:\n                    case Mode.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.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.ECI:\n                        // Count doesn't apply to ECI\n                        var value = DecodedBitStreamParser.parseECIValue(bits);\n                        currentCharacterSetECI = CharacterSetECI.getCharacterSetECIByValue(value);\n                        if (currentCharacterSetECI === null) {\n                            throw new FormatException();\n                        }\n                        break;\n                    case Mode.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                        var subset = bits.readBits(4);\n                        var countHanzi = bits.readBits(mode.getCharacterCountBits(version));\n                        if (subset === DecodedBitStreamParser.GB2312_SUBSET) {\n                            DecodedBitStreamParser.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                        var count = bits.readBits(mode.getCharacterCountBits(version));\n                        switch (mode) {\n                            case Mode.NUMERIC:\n                                DecodedBitStreamParser.decodeNumericSegment(bits, result, count);\n                                break;\n                            case Mode.ALPHANUMERIC:\n                                DecodedBitStreamParser.decodeAlphanumericSegment(bits, result, count, fc1InEffect);\n                                break;\n                            case Mode.BYTE:\n                                DecodedBitStreamParser.decodeByteSegment(bits, result, count, currentCharacterSetECI, byteSegments, hints);\n                                break;\n                            case Mode.KANJI:\n                                DecodedBitStreamParser.decodeKanjiSegment(bits, result, count);\n                                break;\n                            default:\n                                throw new FormatException();\n                        }\n                        break;\n                }\n            } while (mode !== Mode.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    DecodedBitStreamParser.decodeHanziSegment = function (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        var buffer = new Uint8Array(2 * count);\n        var offset = 0;\n        while (count > 0) {\n            // Each 13 bits encodes a 2-byte character\n            var twoBytes = bits.readBits(13);\n            var 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    DecodedBitStreamParser.decodeKanjiSegment = function (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        var buffer = new Uint8Array(2 * count);\n        var offset = 0;\n        while (count > 0) {\n            // Each 13 bits encodes a 2-byte character\n            var twoBytes = bits.readBits(13);\n            var 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    DecodedBitStreamParser.decodeByteSegment = function (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        var readBytes = new Uint8Array(count);\n        for (var i = 0; i < count; i++) {\n            readBytes[i] = /*(byte) */ bits.readBits(8);\n        }\n        var 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    DecodedBitStreamParser.toAlphaNumericChar = function (value /*int*/) {\n        if (value >= DecodedBitStreamParser.ALPHANUMERIC_CHARS.length) {\n            throw new FormatException();\n        }\n        return DecodedBitStreamParser.ALPHANUMERIC_CHARS[value];\n    };\n    DecodedBitStreamParser.decodeAlphanumericSegment = function (bits, result, count /*int*/, fc1InEffect) {\n        // Read two characters at a time\n        var start = result.length();\n        while (count > 1) {\n            if (bits.available() < 11) {\n                throw new FormatException();\n            }\n            var nextTwoCharsBits = bits.readBits(11);\n            result.append(DecodedBitStreamParser.toAlphaNumericChar(Math.floor(nextTwoCharsBits / 45)));\n            result.append(DecodedBitStreamParser.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.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 (var 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    DecodedBitStreamParser.decodeNumericSegment = function (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            var threeDigitsBits = bits.readBits(10);\n            if (threeDigitsBits >= 1000) {\n                throw new FormatException();\n            }\n            result.append(DecodedBitStreamParser.toAlphaNumericChar(Math.floor(threeDigitsBits / 100)));\n            result.append(DecodedBitStreamParser.toAlphaNumericChar(Math.floor(threeDigitsBits / 10) % 10));\n            result.append(DecodedBitStreamParser.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            var twoDigitsBits = bits.readBits(7);\n            if (twoDigitsBits >= 100) {\n                throw new FormatException();\n            }\n            result.append(DecodedBitStreamParser.toAlphaNumericChar(Math.floor(twoDigitsBits / 10)));\n            result.append(DecodedBitStreamParser.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            var digitBits = bits.readBits(4);\n            if (digitBits >= 10) {\n                throw new FormatException();\n            }\n            result.append(DecodedBitStreamParser.toAlphaNumericChar(digitBits));\n        }\n    };\n    DecodedBitStreamParser.parseECIValue = function (bits) {\n        var 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            var secondByte = bits.readBits(8);\n            return (((firstByte & 0x3F) << 8) & 0xFFFFFFFF) | secondByte;\n        }\n        if ((firstByte & 0xE0) === 0xC0) {\n            // three bytes\n            var secondThirdBytes = bits.readBits(16);\n            return (((firstByte & 0x1F) << 16) & 0xFFFFFFFF) | secondThirdBytes;\n        }\n        throw new FormatException();\n    };\n    /**\n     * See ISO 18004:2006, 6.4.4 Table 5\n     */\n    DecodedBitStreamParser.ALPHANUMERIC_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\n    DecodedBitStreamParser.GB2312_SUBSET = 1;\n    return DecodedBitStreamParser;\n}());\nexport default DecodedBitStreamParser;\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 * 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 */\nvar QRCodeDecoderMetaData = /** @class */ (function () {\n    function QRCodeDecoderMetaData(mirrored) {\n        this.mirrored = mirrored;\n    }\n    /**\n     * @return true if the QR Code was mirrored.\n     */\n    QRCodeDecoderMetaData.prototype.isMirrored = function () {\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    QRCodeDecoderMetaData.prototype.applyMirroredCorrection = function (points) {\n        if (!this.mirrored || points === null || points.length < 3) {\n            return;\n        }\n        var bottomLeft = points[0];\n        points[0] = points[2];\n        points[2] = bottomLeft;\n        // No need to 'fix' top-left and alignment pattern.\n    };\n    return QRCodeDecoderMetaData;\n}());\nexport default QRCodeDecoderMetaData;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.decoder {*/\nimport ChecksumException from '../../ChecksumException';\nimport BitMatrix from '../../common/BitMatrix';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonDecoder from '../../common/reedsolomon/ReedSolomonDecoder';\nimport BitMatrixParser from './BitMatrixParser';\nimport DataBlock from './DataBlock';\nimport DecodedBitStreamParser from './DecodedBitStreamParser';\nimport QRCodeDecoderMetaData from './QRCodeDecoderMetaData';\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 */\nvar Decoder = /** @class */ (function () {\n    function Decoder() {\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    Decoder.prototype.decodeBooleanArray = function (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    Decoder.prototype.decodeBitMatrix = function (bits, hints) {\n        // Construct a parser and read version, error-correction level\n        var parser = new BitMatrixParser(bits);\n        var 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            var 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    Decoder.prototype.decodeBitMatrixParser = function (parser, hints) {\n        var e_1, _a, e_2, _b;\n        var version = parser.readVersion();\n        var ecLevel = parser.readFormatInformation().getErrorCorrectionLevel();\n        // Read codewords\n        var codewords = parser.readCodewords();\n        // Separate into data blocks\n        var dataBlocks = DataBlock.getDataBlocks(codewords, version, ecLevel);\n        // Count total number of data bytes\n        var totalBytes = 0;\n        try {\n            for (var dataBlocks_1 = __values(dataBlocks), dataBlocks_1_1 = dataBlocks_1.next(); !dataBlocks_1_1.done; dataBlocks_1_1 = dataBlocks_1.next()) {\n                var dataBlock = dataBlocks_1_1.value;\n                totalBytes += dataBlock.getNumDataCodewords();\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (dataBlocks_1_1 && !dataBlocks_1_1.done && (_a = dataBlocks_1.return)) _a.call(dataBlocks_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        var resultBytes = new Uint8Array(totalBytes);\n        var resultOffset = 0;\n        try {\n            // Error-correct and copy data blocks together into a stream of bytes\n            for (var dataBlocks_2 = __values(dataBlocks), dataBlocks_2_1 = dataBlocks_2.next(); !dataBlocks_2_1.done; dataBlocks_2_1 = dataBlocks_2.next()) {\n                var dataBlock = dataBlocks_2_1.value;\n                var codewordBytes = dataBlock.getCodewords();\n                var numDataCodewords = dataBlock.getNumDataCodewords();\n                this.correctErrors(codewordBytes, numDataCodewords);\n                for (var i = 0; i < numDataCodewords; i++) {\n                    resultBytes[resultOffset++] = codewordBytes[i];\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (dataBlocks_2_1 && !dataBlocks_2_1.done && (_b = dataBlocks_2.return)) _b.call(dataBlocks_2);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        // Decode the contents of that stream of bytes\n        return DecodedBitStreamParser.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    Decoder.prototype.correctErrors = function (codewordBytes, numDataCodewords /*int*/) {\n        // const numCodewords = codewordBytes.length;\n        // First read into an array of ints\n        var 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 (var i = 0; i < numDataCodewords; i++) {\n            codewordBytes[i] = /*(byte) */ codewordsInts[i];\n        }\n    };\n    return Decoder;\n}());\nexport default Decoder;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.qrcode.detector {*/\nimport ResultPoint from '../../ResultPoint';\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 */\nvar AlignmentPattern = /** @class */ (function (_super) {\n    __extends(AlignmentPattern, _super);\n    function AlignmentPattern(posX /*float*/, posY /*float*/, estimatedModuleSize /*float*/) {\n        var _this = _super.call(this, posX, posY) || this;\n        _this.estimatedModuleSize = estimatedModuleSize;\n        return _this;\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    AlignmentPattern.prototype.aboutEquals = function (moduleSize /*float*/, i /*float*/, j /*float*/) {\n        if (Math.abs(i - this.getY()) <= moduleSize && Math.abs(j - this.getX()) <= moduleSize) {\n            var 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    AlignmentPattern.prototype.combineEstimate = function (i /*float*/, j /*float*/, newModuleSize /*float*/) {\n        var combinedX = (this.getX() + j) / 2.0;\n        var combinedY = (this.getY() + i) / 2.0;\n        var combinedModuleSize = (this.estimatedModuleSize + newModuleSize) / 2.0;\n        return new AlignmentPattern(combinedX, combinedY, combinedModuleSize);\n    };\n    return AlignmentPattern;\n}(ResultPoint));\nexport default AlignmentPattern;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport AlignmentPattern from './AlignmentPattern';\nimport NotFoundException from '../../NotFoundException';\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 */\nvar AlignmentPatternFinder = /** @class */ (function () {\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    function AlignmentPatternFinder(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    AlignmentPatternFinder.prototype.find = function () {\n        var startX = this.startX;\n        var height = this.height;\n        var width = this.width;\n        var maxJ = startX + width;\n        var 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        var stateCount = new Int32Array(3);\n        var image = this.image;\n        for (var iGen = 0; iGen < height; iGen++) {\n            // Search from middle outwards\n            var 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            var 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            var 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                                var 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                var 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    AlignmentPatternFinder.centerFromEnd = function (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    AlignmentPatternFinder.prototype.foundPatternCross = function (stateCount) {\n        var moduleSize = this.moduleSize;\n        var maxVariance = moduleSize / 2.0;\n        for (var 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    AlignmentPatternFinder.prototype.crossCheckVertical = function (startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n        var image = this.image;\n        var maxI = image.getHeight();\n        var stateCount = this.crossCheckStateCount;\n        stateCount[0] = 0;\n        stateCount[1] = 0;\n        stateCount[2] = 0;\n        // Start counting up from center\n        var 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        var 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    AlignmentPatternFinder.prototype.handlePossibleCenter = function (stateCount, i /*int*/, j /*int*/) {\n        var e_1, _a;\n        var stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2];\n        var centerJ = AlignmentPatternFinder.centerFromEnd(stateCount, j);\n        var centerI = this.crossCheckVertical(i, /*(int) */ centerJ, 2 * stateCount[1], stateCountTotal);\n        if (!isNaN(centerI)) {\n            var estimatedModuleSize = (stateCount[0] + stateCount[1] + stateCount[2]) / 3.0;\n            try {\n                for (var _b = __values(this.possibleCenters), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var center = _c.value;\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            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            // Hadn't found this before; save it\n            var 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    return AlignmentPatternFinder;\n}());\nexport default AlignmentPatternFinder;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing.qrcode.detector {*/\nimport ResultPoint from '../../ResultPoint';\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 */\nvar FinderPattern = /** @class */ (function (_super) {\n    __extends(FinderPattern, _super);\n    // FinderPattern(posX: number/*float*/, posY: number/*float*/, estimatedModuleSize: number/*float*/) {\n    //   this(posX, posY, estimatedModuleSize, 1)\n    // }\n    function FinderPattern(posX /*float*/, posY /*float*/, estimatedModuleSize /*float*/, count /*int*/) {\n        var _this = _super.call(this, posX, posY) || this;\n        _this.estimatedModuleSize = estimatedModuleSize;\n        _this.count = count;\n        if (undefined === count) {\n            _this.count = 1;\n        }\n        return _this;\n    }\n    FinderPattern.prototype.getEstimatedModuleSize = function () {\n        return this.estimatedModuleSize;\n    };\n    FinderPattern.prototype.getCount = function () {\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    FinderPattern.prototype.aboutEquals = function (moduleSize /*float*/, i /*float*/, j /*float*/) {\n        if (Math.abs(i - this.getY()) <= moduleSize && Math.abs(j - this.getX()) <= moduleSize) {\n            var 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    FinderPattern.prototype.combineEstimate = function (i /*float*/, j /*float*/, newModuleSize /*float*/) {\n        var combinedCount = this.count + 1;\n        var combinedX = (this.count * this.getX() + j) / combinedCount;\n        var combinedY = (this.count * this.getY() + i) / combinedCount;\n        var combinedModuleSize = (this.count * this.estimatedModuleSize + newModuleSize) / combinedCount;\n        return new FinderPattern(combinedX, combinedY, combinedModuleSize, combinedCount);\n    };\n    return FinderPattern;\n}(ResultPoint));\nexport default FinderPattern;\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 */\nvar FinderPatternInfo = /** @class */ (function () {\n    function FinderPatternInfo(patternCenters) {\n        this.bottomLeft = patternCenters[0];\n        this.topLeft = patternCenters[1];\n        this.topRight = patternCenters[2];\n    }\n    FinderPatternInfo.prototype.getBottomLeft = function () {\n        return this.bottomLeft;\n    };\n    FinderPatternInfo.prototype.getTopLeft = function () {\n        return this.topLeft;\n    };\n    FinderPatternInfo.prototype.getTopRight = function () {\n        return this.topRight;\n    };\n    return FinderPatternInfo;\n}());\nexport default FinderPatternInfo;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.detector {*/\nimport DecodeHintType from '../../DecodeHintType';\nimport ResultPoint from '../../ResultPoint';\nimport FinderPattern from './FinderPattern';\nimport FinderPatternInfo from './FinderPatternInfo';\nimport NotFoundException from '../../NotFoundException';\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 */\nvar FinderPatternFinder = /** @class */ (function () {\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    function FinderPatternFinder(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    FinderPatternFinder.prototype.getImage = function () {\n        return this.image;\n    };\n    FinderPatternFinder.prototype.getPossibleCenters = function () {\n        return this.possibleCenters;\n    };\n    FinderPatternFinder.prototype.find = function (hints) {\n        var tryHarder = (hints !== null && hints !== undefined) && undefined !== hints.get(DecodeHintType.TRY_HARDER);\n        var pureBarcode = (hints !== null && hints !== undefined) && undefined !== hints.get(DecodeHintType.PURE_BARCODE);\n        var image = this.image;\n        var maxI = image.getHeight();\n        var 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        var iSkip = Math.floor((3 * maxI) / (4 * FinderPatternFinder.MAX_MODULES));\n        if (iSkip < FinderPatternFinder.MIN_SKIP || tryHarder) {\n            iSkip = FinderPatternFinder.MIN_SKIP;\n        }\n        var done = false;\n        var stateCount = new Int32Array(5);\n        for (var 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            var currentState = 0;\n            for (var 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                                var 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                                        var 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                var 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        var 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    FinderPatternFinder.centerFromEnd = function (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    FinderPatternFinder.foundPatternCross = function (stateCount) {\n        var totalModuleSize = 0;\n        for (var i = 0; i < 5; i++) {\n            var count = stateCount[i];\n            if (count === 0) {\n                return false;\n            }\n            totalModuleSize += count;\n        }\n        if (totalModuleSize < 7) {\n            return false;\n        }\n        var moduleSize = totalModuleSize / 7.0;\n        var 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    FinderPatternFinder.prototype.getCrossCheckStateCount = function () {\n        var 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    FinderPatternFinder.prototype.crossCheckDiagonal = function (startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n        var stateCount = this.getCrossCheckStateCount();\n        // Start counting up, left from center finding black center mass\n        var i = 0;\n        var 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        var maxI = image.getHeight();\n        var 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        var 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    FinderPatternFinder.prototype.crossCheckVertical = function (startI /*int*/, centerJ /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n        var image = this.image;\n        var maxI = image.getHeight();\n        var stateCount = this.getCrossCheckStateCount();\n        // Start counting up from center\n        var 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        var 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    FinderPatternFinder.prototype.crossCheckHorizontal = function (startJ /*int*/, centerI /*int*/, maxCount /*int*/, originalStateCountTotal /*int*/) {\n        var image = this.image;\n        var maxJ = image.getWidth();\n        var stateCount = this.getCrossCheckStateCount();\n        var 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        var 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    FinderPatternFinder.prototype.handlePossibleCenter = function (stateCount, i /*int*/, j /*int*/, pureBarcode) {\n        var stateCountTotal = stateCount[0] + stateCount[1] + stateCount[2] + stateCount[3] +\n            stateCount[4];\n        var centerJ = FinderPatternFinder.centerFromEnd(stateCount, j);\n        var 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                var estimatedModuleSize = stateCountTotal / 7.0;\n                var found = false;\n                var possibleCenters = this.possibleCenters;\n                for (var index = 0, length_1 = possibleCenters.length; index < length_1; index++) {\n                    var 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                    var point = new FinderPattern(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    FinderPatternFinder.prototype.findRowSkip = function () {\n        var e_1, _a;\n        var max = this.possibleCenters.length;\n        if (max <= 1) {\n            return 0;\n        }\n        var firstConfirmedCenter = null;\n        try {\n            for (var _b = __values(this.possibleCenters), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var center = _c.value;\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        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\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    FinderPatternFinder.prototype.haveMultiplyConfirmedCenters = function () {\n        var e_2, _a, e_3, _b;\n        var confirmedCount = 0;\n        var totalModuleSize = 0.0;\n        var max = this.possibleCenters.length;\n        try {\n            for (var _c = __values(this.possibleCenters), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var pattern = _d.value;\n                if (pattern.getCount() >= FinderPatternFinder.CENTER_QUORUM) {\n                    confirmedCount++;\n                    totalModuleSize += pattern.getEstimatedModuleSize();\n                }\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_2) throw e_2.error; }\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        var average = totalModuleSize / max;\n        var totalDeviation = 0.0;\n        try {\n            for (var _e = __values(this.possibleCenters), _f = _e.next(); !_f.done; _f = _e.next()) {\n                var pattern = _f.value;\n                totalDeviation += Math.abs(pattern.getEstimatedModuleSize() - average);\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n            }\n            finally { if (e_3) throw e_3.error; }\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    FinderPatternFinder.prototype.selectBestPatterns = function () {\n        var e_4, _a, e_5, _b;\n        var startSize = this.possibleCenters.length;\n        if (startSize < 3) {\n            // Couldn't find enough finder patterns\n            throw new NotFoundException();\n        }\n        var possibleCenters = this.possibleCenters;\n        var 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            var totalModuleSize = 0.0;\n            var square = 0.0;\n            try {\n                for (var _c = __values(this.possibleCenters), _d = _c.next(); !_d.done; _d = _c.next()) {\n                    var center = _d.value;\n                    var size = center.getEstimatedModuleSize();\n                    totalModuleSize += size;\n                    square += size * size;\n                }\n            }\n            catch (e_4_1) { e_4 = { error: e_4_1 }; }\n            finally {\n                try {\n                    if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n                }\n                finally { if (e_4) throw e_4.error; }\n            }\n            average = totalModuleSize / startSize;\n            var 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            function (center1, center2) {\n                var dA = Math.abs(center2.getEstimatedModuleSize() - average);\n                var dB = Math.abs(center1.getEstimatedModuleSize() - average);\n                return dA < dB ? -1 : dA > dB ? 1 : 0;\n            });\n            var limit = Math.max(0.2 * average, stdDev);\n            for (var i = 0; i < possibleCenters.length && possibleCenters.length > 3; i++) {\n                var 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            var totalModuleSize = 0.0;\n            try {\n                for (var possibleCenters_1 = __values(possibleCenters), possibleCenters_1_1 = possibleCenters_1.next(); !possibleCenters_1_1.done; possibleCenters_1_1 = possibleCenters_1.next()) {\n                    var possibleCenter = possibleCenters_1_1.value;\n                    totalModuleSize += possibleCenter.getEstimatedModuleSize();\n                }\n            }\n            catch (e_5_1) { e_5 = { error: e_5_1 }; }\n            finally {\n                try {\n                    if (possibleCenters_1_1 && !possibleCenters_1_1.done && (_b = possibleCenters_1.return)) _b.call(possibleCenters_1);\n                }\n                finally { if (e_5) throw e_5.error; }\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            function (center1, center2) {\n                if (center2.getCount() === center1.getCount()) {\n                    var dA = Math.abs(center2.getEstimatedModuleSize() - average);\n                    var 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    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    return FinderPatternFinder;\n}());\nexport default FinderPatternFinder;\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 */\nimport MathUtils from '../../common/detector/MathUtils';\nimport DetectorResult from '../../common/DetectorResult';\n// import GridSampler from '../../common/GridSampler';\nimport GridSamplerInstance from '../../common/GridSamplerInstance';\nimport PerspectiveTransform from '../../common/PerspectiveTransform';\nimport DecodeHintType from '../../DecodeHintType';\nimport NotFoundException from '../../NotFoundException';\nimport ResultPoint from '../../ResultPoint';\nimport Version from '../decoder/Version';\nimport AlignmentPatternFinder from './AlignmentPatternFinder';\nimport FinderPatternFinder from './FinderPatternFinder';\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 */\nvar Detector = /** @class */ (function () {\n    function Detector(image) {\n        this.image = image;\n    }\n    Detector.prototype.getImage = function () {\n        return this.image;\n    };\n    Detector.prototype.getResultPointCallback = function () {\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    Detector.prototype.detect = function (hints) {\n        this.resultPointCallback = (hints === null || hints === undefined) ? null :\n            /*(ResultPointCallback) */ hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);\n        var finder = new FinderPatternFinder(this.image, this.resultPointCallback);\n        var info = finder.find(hints);\n        return this.processFinderPatternInfo(info);\n    };\n    Detector.prototype.processFinderPatternInfo = function (info) {\n        var topLeft = info.getTopLeft();\n        var topRight = info.getTopRight();\n        var bottomLeft = info.getBottomLeft();\n        var moduleSize = this.calculateModuleSize(topLeft, topRight, bottomLeft);\n        if (moduleSize < 1.0) {\n            throw new NotFoundException('No pattern found in proccess finder.');\n        }\n        var dimension = Detector.computeDimension(topLeft, topRight, bottomLeft, moduleSize);\n        var provisionalVersion = Version.getProvisionalVersionForDimension(dimension);\n        var modulesBetweenFPCenters = provisionalVersion.getDimensionForVersion() - 7;\n        var 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            var bottomRightX = topRight.getX() - topLeft.getX() + bottomLeft.getX();\n            var 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            var correctionToTopLeft = 1.0 - 3.0 / modulesBetweenFPCenters;\n            var estAlignmentX = /*(int) */ Math.floor(topLeft.getX() + correctionToTopLeft * (bottomRightX - topLeft.getX()));\n            var estAlignmentY = /*(int) */ Math.floor(topLeft.getY() + correctionToTopLeft * (bottomRightY - topLeft.getY()));\n            // Kind of arbitrary -- expand search radius before giving up\n            for (var 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        var transform = Detector.createTransform(topLeft, topRight, bottomLeft, alignmentPattern, dimension);\n        var bits = Detector.sampleGrid(this.image, transform, dimension);\n        var 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    Detector.createTransform = function (topLeft, topRight, bottomLeft, alignmentPattern, dimension /*int*/) {\n        var dimMinusThree = dimension - 3.5;\n        var bottomRightX; /*float*/\n        var bottomRightY; /*float*/\n        var sourceBottomRightX; /*float*/\n        var 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    Detector.sampleGrid = function (image, transform, dimension /*int*/) {\n        var 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    Detector.computeDimension = function (topLeft, topRight, bottomLeft, moduleSize /*float*/) {\n        var tltrCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, topRight) / moduleSize);\n        var tlblCentersDimension = MathUtils.round(ResultPoint.distance(topLeft, bottomLeft) / moduleSize);\n        var 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    Detector.prototype.calculateModuleSize = function (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    Detector.prototype.calculateModuleSizeOneWay = function (pattern, otherPattern) {\n        var 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        var 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    Detector.prototype.sizeOfBlackWhiteBlackRunBothWays = function (fromX /*int*/, fromY /*int*/, toX /*int*/, toY /*int*/) {\n        var result = this.sizeOfBlackWhiteBlackRun(fromX, fromY, toX, toY);\n        // Now count other way -- don't run off image though of course\n        var scale = 1.0;\n        var 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        var 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    Detector.prototype.sizeOfBlackWhiteBlackRun = function (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        var steep = Math.abs(toY - fromY) > Math.abs(toX - fromX);\n        if (steep) {\n            var temp = fromX;\n            fromX = fromY;\n            fromY = temp;\n            temp = toX;\n            toX = toY;\n            toY = temp;\n        }\n        var dx = Math.abs(toX - fromX);\n        var dy = Math.abs(toY - fromY);\n        var error = -dx / 2;\n        var xstep = fromX < toX ? 1 : -1;\n        var ystep = fromY < toY ? 1 : -1;\n        // In black pixels, looking for white, first or second time.\n        var state = 0;\n        // Loop up until x == toX, but not beyond\n        var xLimit = toX + xstep;\n        for (var x = fromX, y = fromY; x !== xLimit; x += xstep) {\n            var realX = steep ? y : x;\n            var 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    Detector.prototype.findAlignmentInRegion = function (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        var allowance = /*(int) */ Math.floor(allowanceFactor * overallEstModuleSize);\n        var alignmentAreaLeftX = Math.max(0, estAlignmentX - allowance);\n        var 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        var alignmentAreaTopY = Math.max(0, estAlignmentY - allowance);\n        var 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        var alignmentFinder = new AlignmentPatternFinder(this.image, alignmentAreaLeftX, alignmentAreaTopY, alignmentAreaRightX - alignmentAreaLeftX, alignmentAreaBottomY - alignmentAreaTopY, overallEstModuleSize, this.resultPointCallback);\n        return alignmentFinder.find();\n    };\n    return Detector;\n}());\nexport default Detector;\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.qrcode {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport BitMatrix from '../common/BitMatrix';\nimport DecodeHintType from '../DecodeHintType';\nimport NotFoundException from '../NotFoundException';\nimport Result from '../Result';\nimport ResultMetadataType from '../ResultMetadataType';\n// import DetectorResult from '../common/DetectorResult';\nimport Decoder from './decoder/Decoder';\nimport QRCodeDecoderMetaData from './decoder/QRCodeDecoderMetaData';\nimport Detector from './detector/Detector';\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 */\nvar QRCodeReader = /** @class */ (function () {\n    function QRCodeReader() {\n        this.decoder = new Decoder();\n    }\n    QRCodeReader.prototype.getDecoder = function () {\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    QRCodeReader.prototype.decode = function (image, hints) {\n        var decoderResult;\n        var points;\n        if (hints !== undefined && hints !== null && undefined !== hints.get(DecodeHintType.PURE_BARCODE)) {\n            var bits = QRCodeReader.extractPureBits(image.getBlackMatrix());\n            decoderResult = this.decoder.decodeBitMatrix(bits, hints);\n            points = QRCodeReader.NO_POINTS;\n        }\n        else {\n            var detectorResult = new Detector(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        var result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat.QR_CODE, undefined);\n        var byteSegments = decoderResult.getByteSegments();\n        if (byteSegments !== null) {\n            result.putMetadata(ResultMetadataType.BYTE_SEGMENTS, byteSegments);\n        }\n        var ecLevel = decoderResult.getECLevel();\n        if (ecLevel !== null) {\n            result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, ecLevel);\n        }\n        if (decoderResult.hasStructuredAppend()) {\n            result.putMetadata(ResultMetadataType.STRUCTURED_APPEND_SEQUENCE, decoderResult.getStructuredAppendSequenceNumber());\n            result.putMetadata(ResultMetadataType.STRUCTURED_APPEND_PARITY, decoderResult.getStructuredAppendParity());\n        }\n        return result;\n    };\n    /*@Override*/\n    QRCodeReader.prototype.reset = function () {\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    QRCodeReader.extractPureBits = function (image) {\n        var leftTopBlack = image.getTopLeftOnBit();\n        var rightBottomBlack = image.getBottomRightOnBit();\n        if (leftTopBlack === null || rightBottomBlack === null) {\n            throw new NotFoundException();\n        }\n        var moduleSize = this.moduleSize(leftTopBlack, image);\n        var top = leftTopBlack[1];\n        var bottom = rightBottomBlack[1];\n        var left = leftTopBlack[0];\n        var 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        var matrixWidth = Math.round((right - left + 1) / moduleSize);\n        var 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        var 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        var 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        var 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        var bits = new BitMatrix(matrixWidth, matrixHeight);\n        for (var y = 0; y < matrixHeight; y++) {\n            var iOffset = top + /*(int) */ Math.floor(y * moduleSize);\n            for (var 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    QRCodeReader.moduleSize = function (leftTopBlack, image) {\n        var height = image.getHeight();\n        var width = image.getWidth();\n        var x = leftTopBlack[0];\n        var y = leftTopBlack[1];\n        var inBlack = true;\n        var 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    QRCodeReader.NO_POINTS = new Array();\n    return QRCodeReader;\n}());\nexport default QRCodeReader;\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// package com.google.zxing.pdf417;\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// import java.util.Arrays;\nimport Arrays from '../util/Arrays';\n// import java.util.Collection;\n// import com.google.zxing.common.detector.MathUtils;\nimport MathUtils from '../common/detector/MathUtils';\n/**\n * @author SITA Lab (kevin.osullivan@sita.aero)\n * @author Guenther Grau\n */\nvar PDF417Common = /** @class */ (function () {\n    function PDF417Common() {\n    }\n    PDF417Common.prototype.PDF417Common = function () {\n    };\n    /**\n     * @param moduleBitCount values to sum\n     * @return sum of values\n     * @deprecated call {@link MathUtils#sum(int[])}\n     */\n    // @Deprecated\n    PDF417Common.getBitCountSum = function (moduleBitCount) {\n        return MathUtils.sum(moduleBitCount);\n    };\n    PDF417Common.toIntArray = function (list) {\n        var e_1, _a;\n        if (list == null || !list.length) {\n            return PDF417Common.EMPTY_INT_ARRAY;\n        }\n        var result = new Int32Array(list.length);\n        var i = 0;\n        try {\n            for (var list_1 = __values(list), list_1_1 = list_1.next(); !list_1_1.done; list_1_1 = list_1.next()) {\n                var integer = list_1_1.value;\n                result[i++] = integer;\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (list_1_1 && !list_1_1.done && (_a = list_1.return)) _a.call(list_1);\n            }\n            finally { if (e_1) throw e_1.error; }\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    PDF417Common.getCodeword = function (symbol /*int*/) {\n        var 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    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    return PDF417Common;\n}());\nexport default PDF417Common;\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 */\nvar PDF417DetectorResult = /** @class */ (function () {\n    function PDF417DetectorResult(bits, points) {\n        this.bits = bits;\n        this.points = points;\n    }\n    PDF417DetectorResult.prototype.getBits = function () {\n        return this.bits;\n    };\n    PDF417DetectorResult.prototype.getPoints = function () {\n        return this.points;\n    };\n    return PDF417DetectorResult;\n}());\nexport default PDF417DetectorResult;\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*/\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// import com.google.zxing.NotFoundException;\n// import com.google.zxing.ResultPoint;\nimport ResultPoint from '../../ResultPoint';\nimport System from '../../util/System';\nimport Arrays from '../../util/Arrays';\nimport PDF417DetectorResult from './PDF417DetectorResult';\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 */\nvar Detector = /** @class */ (function () {\n    function Detector() {\n    }\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    Detector.detectMultiple = function (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        var bitMatrix = image.getBlackMatrix();\n        var barcodeCoordinates = Detector.detect(multiple, bitMatrix);\n        if (!barcodeCoordinates.length) {\n            bitMatrix = bitMatrix.clone();\n            bitMatrix.rotate180();\n            barcodeCoordinates = Detector.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    Detector.detect = function (multiple, bitMatrix) {\n        var e_1, _a;\n        var barcodeCoordinates = new Array();\n        var row = 0;\n        var column = 0;\n        var foundBarcodeInRow = false;\n        while (row < bitMatrix.getHeight()) {\n            var vertices = Detector.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                try {\n                    for (var barcodeCoordinates_1 = (e_1 = void 0, __values(barcodeCoordinates)), barcodeCoordinates_1_1 = barcodeCoordinates_1.next(); !barcodeCoordinates_1_1.done; barcodeCoordinates_1_1 = barcodeCoordinates_1.next()) {\n                        var barcodeCoordinate = barcodeCoordinates_1_1.value;\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                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (barcodeCoordinates_1_1 && !barcodeCoordinates_1_1.done && (_a = barcodeCoordinates_1.return)) _a.call(barcodeCoordinates_1);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n                row += Detector.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    Detector.findVertices = function (matrix, startRow, startColumn) {\n        var height = matrix.getHeight();\n        var width = matrix.getWidth();\n        // const result = new ResultPoint[8];\n        var result = new Array(8);\n        Detector.copyToResult(result, Detector.findRowsWithPattern(matrix, height, width, startRow, startColumn, Detector.START_PATTERN), Detector.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.copyToResult(result, Detector.findRowsWithPattern(matrix, height, width, startRow, startColumn, Detector.STOP_PATTERN), Detector.INDEXES_STOP_PATTERN);\n        return result;\n    };\n    Detector.copyToResult = function (result, tmpResult, destinationIndexes) {\n        for (var i = 0; i < destinationIndexes.length; i++) {\n            result[destinationIndexes[i]] = tmpResult[i];\n        }\n    };\n    Detector.findRowsWithPattern = function (matrix, height, width, startRow, startColumn, pattern) {\n        // const result = new ResultPoint[4];\n        var result = new Array(4);\n        var found = false;\n        var counters = new Int32Array(pattern.length);\n        for (; startRow < height; startRow += Detector.ROW_STEP) {\n            var loc = Detector.findGuardPattern(matrix, startColumn, startRow, width, false, pattern, counters);\n            if (loc != null) {\n                while (startRow > 0) {\n                    var previousRowLoc = Detector.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        var stopRow = startRow + 1;\n        // Last row of the current symbol that contains pattern\n        if (found) {\n            var skippedRowCount = 0;\n            var previousRowLoc = Int32Array.from([Math.trunc(result[0].getX()), Math.trunc(result[1].getX())]);\n            for (; stopRow < height; stopRow++) {\n                var loc = Detector.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.MAX_PATTERN_DRIFT &&\n                    Math.abs(previousRowLoc[1] - loc[1]) < Detector.MAX_PATTERN_DRIFT) {\n                    previousRowLoc = loc;\n                    skippedRowCount = 0;\n                }\n                else {\n                    if (skippedRowCount > Detector.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.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    Detector.findGuardPattern = function (matrix, column, row, width, whiteFirst, pattern, counters) {\n        Arrays.fillWithin(counters, 0, counters.length, 0);\n        var patternStart = column;\n        var 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.MAX_PIXEL_DRIFT) {\n            patternStart--;\n        }\n        var x = patternStart;\n        var counterPosition = 0;\n        var patternLength = pattern.length;\n        for (var isWhite = whiteFirst; x < width; x++) {\n            var pixel = matrix.get(x, row);\n            if (pixel !== isWhite) {\n                counters[counterPosition]++;\n            }\n            else {\n                if (counterPosition === patternLength - 1) {\n                    if (Detector.patternMatchVariance(counters, pattern, Detector.MAX_INDIVIDUAL_VARIANCE) < Detector.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.patternMatchVariance(counters, pattern, Detector.MAX_INDIVIDUAL_VARIANCE) < Detector.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    Detector.patternMatchVariance = function (counters, pattern, maxIndividualVariance) {\n        var numCounters = counters.length;\n        var total = 0;\n        var patternLength = 0;\n        for (var 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        var unitBarWidth = total / patternLength;\n        maxIndividualVariance *= unitBarWidth;\n        var totalVariance = 0.0;\n        for (var x = 0; x < numCounters; x++) {\n            var counter = counters[x];\n            var scaledPattern = pattern[x] * unitBarWidth;\n            var 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    Detector.INDEXES_START_PATTERN = Int32Array.from([0, 4, 1, 5]);\n    Detector.INDEXES_STOP_PATTERN = Int32Array.from([6, 2, 7, 3]);\n    Detector.MAX_AVG_VARIANCE = 0.42;\n    Detector.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.START_PATTERN = Int32Array.from([8, 1, 1, 1, 1, 1, 1, 3]);\n    // 1111111 0 1 000 1 0 1 00 1\n    Detector.STOP_PATTERN = Int32Array.from([7, 1, 1, 3, 1, 1, 1, 2, 1]);\n    Detector.MAX_PIXEL_DRIFT = 3;\n    Detector.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.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.ROW_STEP = 5;\n    Detector.BARCODE_MIN_HEIGHT = 10;\n    return Detector;\n}());\nexport default Detector;\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*/\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder.ec;\nimport IllegalArgumentException from '../../../IllegalArgumentException';\nimport System from '../../../util/System';\nimport StringBuilder from '../../../util/StringBuilder';\n/**\n * @author Sean Owen\n * @see com.google.zxing.common.reedsolomon.GenericGFPoly\n */\nvar ModulusPoly = /** @class */ (function () {\n    function ModulusPoly(field, coefficients) {\n        if (coefficients.length === 0) {\n            throw new IllegalArgumentException();\n        }\n        this.field = field;\n        var 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            var 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    ModulusPoly.prototype.getCoefficients = function () {\n        return this.coefficients;\n    };\n    /**\n     * @return degree of this polynomial\n     */\n    ModulusPoly.prototype.getDegree = function () {\n        return this.coefficients.length - 1;\n    };\n    /**\n     * @return true iff this polynomial is the monomial \"0\"\n     */\n    ModulusPoly.prototype.isZero = function () {\n        return this.coefficients[0] === 0;\n    };\n    /**\n     * @return coefficient of x^degree term in this polynomial\n     */\n    ModulusPoly.prototype.getCoefficient = function (degree) {\n        return this.coefficients[this.coefficients.length - 1 - degree];\n    };\n    /**\n     * @return evaluation of this polynomial at a given point\n     */\n    ModulusPoly.prototype.evaluateAt = function (a) {\n        var e_1, _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            var sum = /*int*/ 0;\n            try {\n                for (var _b = __values(this.coefficients), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var coefficient = _c.value /*int*/;\n                    sum = this.field.add(sum, coefficient);\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            return sum;\n        }\n        var result = /*int*/ this.coefficients[0];\n        var size = /*int*/ this.coefficients.length;\n        for (var 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    ModulusPoly.prototype.add = function (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        var smallerCoefficients = this.coefficients;\n        var largerCoefficients = other.coefficients;\n        if (smallerCoefficients.length > largerCoefficients.length) {\n            var temp = smallerCoefficients;\n            smallerCoefficients = largerCoefficients;\n            largerCoefficients = temp;\n        }\n        var sumDiff = new Int32Array(largerCoefficients.length);\n        var 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 (var 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    ModulusPoly.prototype.subtract = function (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    ModulusPoly.prototype.multiply = function (other) {\n        if (other instanceof ModulusPoly) {\n            return this.multiplyOther(other);\n        }\n        return this.multiplyScalar(other);\n    };\n    ModulusPoly.prototype.multiplyOther = function (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        var aCoefficients = this.coefficients;\n        var aLength = /*int*/ aCoefficients.length;\n        var bCoefficients = other.coefficients;\n        var bLength = /*int*/ bCoefficients.length;\n        var product = new Int32Array(aLength + bLength - 1);\n        for (var i /*int*/ = 0; i < aLength; i++) {\n            var aCoeff = /*int*/ aCoefficients[i];\n            for (var 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    ModulusPoly.prototype.negative = function () {\n        var size = /*int*/ this.coefficients.length;\n        var negativeCoefficients = new Int32Array(size);\n        for (var 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    ModulusPoly.prototype.multiplyScalar = function (scalar) {\n        if (scalar === 0) {\n            return new ModulusPoly(this.field, new Int32Array([0]));\n        }\n        if (scalar === 1) {\n            return this;\n        }\n        var size = /*int*/ this.coefficients.length;\n        var product = new Int32Array(size);\n        for (var 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    ModulusPoly.prototype.multiplyByMonomial = function (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        var size = /*int*/ this.coefficients.length;\n        var product = new Int32Array(size + degree);\n        for (var 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    ModulusPoly.prototype.toString = function () {\n        var result = new StringBuilder( /*8 * this.getDegree()*/); // dynamic string size in JS\n        for (var degree /*int*/ = this.getDegree(); degree >= 0; degree--) {\n            var 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    return ModulusPoly;\n}());\nexport default ModulusPoly;\n", "import IllegalArgumentException from '../../../IllegalArgumentException';\nimport ArithmeticException from '../../../ArithmeticException';\nvar ModulusBase = /** @class */ (function () {\n    function ModulusBase() {\n    }\n    ModulusBase.prototype.add = function (a, b) {\n        return (a + b) % this.modulus;\n    };\n    ModulusBase.prototype.subtract = function (a, b) {\n        return (this.modulus + a - b) % this.modulus;\n    };\n    ModulusBase.prototype.exp = function (a) {\n        return this.expTable[a];\n    };\n    ModulusBase.prototype.log = function (a) {\n        if (a === 0) {\n            throw new IllegalArgumentException();\n        }\n        return this.logTable[a];\n    };\n    ModulusBase.prototype.inverse = function (a) {\n        if (a === 0) {\n            throw new ArithmeticException();\n        }\n        return this.expTable[this.modulus - this.logTable[a] - 1];\n    };\n    ModulusBase.prototype.multiply = function (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    ModulusBase.prototype.getSize = function () {\n        return this.modulus;\n    };\n    ModulusBase.prototype.equals = function (o) {\n        return o === this;\n    };\n    return ModulusBase;\n}());\nexport default ModulusBase;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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// package com.google.zxing.pdf417.decoder.ec;\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../../PDF417Common';\nimport ModulusPoly from './ModulusPoly';\nimport IllegalArgumentException from '../../../IllegalArgumentException';\nimport ModulusBase from './ModulusBase';\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 */\nvar ModulusGF = /** @class */ (function (_super) {\n    __extends(ModulusGF, _super);\n    // private /*final*/ modulus: /*int*/ number;\n    function ModulusGF(modulus, generator) {\n        var _this = _super.call(this) || this;\n        _this.modulus = modulus;\n        _this.expTable = new Int32Array(modulus);\n        _this.logTable = new Int32Array(modulus);\n        var x = /*int*/ 1;\n        for (var i /*int*/ = 0; i < modulus; i++) {\n            _this.expTable[i] = x;\n            x = (x * generator) % modulus;\n        }\n        for (var 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        return _this;\n    }\n    ModulusGF.prototype.getZero = function () {\n        return this.zero;\n    };\n    ModulusGF.prototype.getOne = function () {\n        return this.one;\n    };\n    ModulusGF.prototype.buildMonomial = function (degree, coefficient) {\n        if (degree < 0) {\n            throw new IllegalArgumentException();\n        }\n        if (coefficient === 0) {\n            return this.zero;\n        }\n        var coefficients = new Int32Array(degree + 1);\n        coefficients[0] = coefficient;\n        return new ModulusPoly(this, coefficients);\n    };\n    ModulusGF.PDF417_GF = new ModulusGF(PDF417Common.NUMBER_OF_CODEWORDS, 3);\n    return ModulusGF;\n}(ModulusBase));\nexport default ModulusGF;\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*/\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder.ec;\n// import com.google.zxing.ChecksumException;\nimport ChecksumException from '../../../ChecksumException';\nimport ModulusPoly from './ModulusPoly';\nimport ModulusGF from './ModulusGF';\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 */\nvar ErrorCorrection = /** @class */ (function () {\n    function ErrorCorrection() {\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    ErrorCorrection.prototype.decode = function (received, numECCodewords, erasures) {\n        var e_1, _a;\n        var poly = new ModulusPoly(this.field, received);\n        var S = new Int32Array(numECCodewords);\n        var error = false;\n        for (var i /*int*/ = numECCodewords; i > 0; i--) {\n            var 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        var knownErrors = this.field.getOne();\n        if (erasures != null) {\n            try {\n                for (var erasures_1 = __values(erasures), erasures_1_1 = erasures_1.next(); !erasures_1_1.done; erasures_1_1 = erasures_1.next()) {\n                    var erasure = erasures_1_1.value;\n                    var b = this.field.exp(received.length - 1 - erasure);\n                    // Add (1 - bx) term:\n                    var term = new ModulusPoly(this.field, new Int32Array([this.field.subtract(0, b), 1]));\n                    knownErrors = knownErrors.multiply(term);\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (erasures_1_1 && !erasures_1_1.done && (_a = erasures_1.return)) _a.call(erasures_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }\n        var syndrome = new ModulusPoly(this.field, S);\n        // syndrome = syndrome.multiply(knownErrors);\n        var sigmaOmega = this.runEuclideanAlgorithm(this.field.buildMonomial(numECCodewords, 1), syndrome, numECCodewords);\n        var sigma = sigmaOmega[0];\n        var omega = sigmaOmega[1];\n        // sigma = sigma.multiply(knownErrors);\n        var errorLocations = this.findErrorLocations(sigma);\n        var errorMagnitudes = this.findErrorMagnitudes(omega, sigma, errorLocations);\n        for (var i /*int*/ = 0; i < errorLocations.length; i++) {\n            var 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    ErrorCorrection.prototype.runEuclideanAlgorithm = function (a, b, R) {\n        // Assume a's degree is >= b's\n        if (a.getDegree() < b.getDegree()) {\n            var temp = a;\n            a = b;\n            b = temp;\n        }\n        var rLast = a;\n        var r = b;\n        var tLast = this.field.getZero();\n        var 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            var rLastLast = rLast;\n            var 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            var q = this.field.getZero();\n            var denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());\n            var dltInverse = this.field.inverse(denominatorLeadingTerm);\n            while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {\n                var degreeDiff = r.getDegree() - rLast.getDegree();\n                var 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        var sigmaTildeAtZero = t.getCoefficient(0);\n        if (sigmaTildeAtZero === 0) {\n            throw ChecksumException.getChecksumInstance();\n        }\n        var inverse = this.field.inverse(sigmaTildeAtZero);\n        var sigma = t.multiply(inverse);\n        var omega = r.multiply(inverse);\n        return [sigma, omega];\n    };\n    /**\n     *\n     * @param errorLocator\n     * @throws ChecksumException\n     */\n    ErrorCorrection.prototype.findErrorLocations = function (errorLocator) {\n        // This is a direct application of Chien's search\n        var numErrors = errorLocator.getDegree();\n        var result = new Int32Array(numErrors);\n        var e = 0;\n        for (var 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    ErrorCorrection.prototype.findErrorMagnitudes = function (errorEvaluator, errorLocator, errorLocations) {\n        var errorLocatorDegree = errorLocator.getDegree();\n        var formalDerivativeCoefficients = new Int32Array(errorLocatorDegree);\n        for (var i /*int*/ = 1; i <= errorLocatorDegree; i++) {\n            formalDerivativeCoefficients[errorLocatorDegree - i] =\n                this.field.multiply(i, errorLocator.getCoefficient(i));\n        }\n        var formalDerivative = new ModulusPoly(this.field, formalDerivativeCoefficients);\n        // This is directly applying Forney's Formula\n        var s = errorLocations.length;\n        var result = new Int32Array(s);\n        for (var i /*int*/ = 0; i < s; i++) {\n            var xiInverse = this.field.inverse(errorLocations[i]);\n            var numerator = this.field.subtract(0, errorEvaluator.evaluateAt(xiInverse));\n            var denominator = this.field.inverse(formalDerivative.evaluateAt(xiInverse));\n            result[i] = this.field.multiply(numerator, denominator);\n        }\n        return result;\n    };\n    return ErrorCorrection;\n}());\nexport default ErrorCorrection;\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// import com.google.zxing.NotFoundException;\nimport NotFoundException from '../../NotFoundException';\n// import com.google.zxing.ResultPoint;\nimport ResultPoint from '../../ResultPoint';\n/**\n * @author Guenther Grau\n */\nvar BoundingBox = /** @class */ (function () {\n    function BoundingBox(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    BoundingBox.prototype.constructor_1 = function (image, topLeft, bottomLeft, topRight, bottomRight) {\n        var leftUnspecified = topLeft == null || bottomLeft == null;\n        var 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    BoundingBox.prototype.constructor_2 = function (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    BoundingBox.merge = function (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    BoundingBox.prototype.addMissingRows = function (missingStartRows, missingEndRows, isLeft) {\n        var newTopLeft = this.topLeft;\n        var newBottomLeft = this.bottomLeft;\n        var newTopRight = this.topRight;\n        var newBottomRight = this.bottomRight;\n        if (missingStartRows > 0) {\n            var top_1 = isLeft ? this.topLeft : this.topRight;\n            var newMinY = Math.trunc(top_1.getY() - missingStartRows);\n            if (newMinY < 0) {\n                newMinY = 0;\n            }\n            var newTop = new ResultPoint(top_1.getX(), newMinY);\n            if (isLeft) {\n                newTopLeft = newTop;\n            }\n            else {\n                newTopRight = newTop;\n            }\n        }\n        if (missingEndRows > 0) {\n            var bottom = isLeft ? this.bottomLeft : this.bottomRight;\n            var newMaxY = Math.trunc(bottom.getY() + missingEndRows);\n            if (newMaxY >= this.image.getHeight()) {\n                newMaxY = this.image.getHeight() - 1;\n            }\n            var 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    BoundingBox.prototype.getMinX = function () {\n        return this.minX;\n    };\n    BoundingBox.prototype.getMaxX = function () {\n        return this.maxX;\n    };\n    BoundingBox.prototype.getMinY = function () {\n        return this.minY;\n    };\n    BoundingBox.prototype.getMaxY = function () {\n        return this.maxY;\n    };\n    BoundingBox.prototype.getTopLeft = function () {\n        return this.topLeft;\n    };\n    BoundingBox.prototype.getTopRight = function () {\n        return this.topRight;\n    };\n    BoundingBox.prototype.getBottomLeft = function () {\n        return this.bottomLeft;\n    };\n    BoundingBox.prototype.getBottomRight = function () {\n        return this.bottomRight;\n    };\n    return BoundingBox;\n}());\nexport default BoundingBox;\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 */\nvar BarcodeMetadata = /** @class */ (function () {\n    function BarcodeMetadata(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    BarcodeMetadata.prototype.getColumnCount = function () {\n        return this.columnCount;\n    };\n    BarcodeMetadata.prototype.getErrorCorrectionLevel = function () {\n        return this.errorCorrectionLevel;\n    };\n    BarcodeMetadata.prototype.getRowCount = function () {\n        return this.rowCount;\n    };\n    BarcodeMetadata.prototype.getRowCountUpperPart = function () {\n        return this.rowCountUpperPart;\n    };\n    BarcodeMetadata.prototype.getRowCountLowerPart = function () {\n        return this.rowCountLowerPart;\n    };\n    return BarcodeMetadata;\n}());\nexport default BarcodeMetadata;\n", "/**\n * Java Formatter class polyfill that works in the JS way.\n */\nvar Formatter = /** @class */ (function () {\n    function Formatter() {\n        this.buffer = '';\n    }\n    /**\n     *\n     * @see https://stackoverflow.com/a/13439711/4367683\n     *\n     * @param str\n     * @param arr\n     */\n    Formatter.form = function (str, arr) {\n        var 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            var base = p3 ? parseInt(p3.substr(1)) : undefined;\n            var 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            var size = parseInt(p1); /* padding size */\n            var 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        var 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    Formatter.prototype.format = function (append) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        this.buffer += Formatter.form(append, args);\n    };\n    /**\n     * Returns the Formatter string value.\n     */\n    Formatter.prototype.toString = function () {\n        return this.buffer;\n    };\n    return Formatter;\n}());\nexport default Formatter;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder;\n// import java.util.Formatter;\nimport Formatter from '../../util/Formatter';\nimport BoundingBox from './BoundingBox';\n/**\n * @author Guenther Grau\n */\nvar DetectionResultColumn = /** @class */ (function () {\n    function DetectionResultColumn(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*/ DetectionResultColumn.prototype.getCodewordNearby = function (imageRow) {\n        var codeword = this.getCodeword(imageRow);\n        if (codeword != null) {\n            return codeword;\n        }\n        for (var i = 1; i < DetectionResultColumn.MAX_NEARBY_DISTANCE; i++) {\n            var 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*/ DetectionResultColumn.prototype.imageRowToCodewordIndex = function (imageRow) {\n        return imageRow - this.boundingBox.getMinY();\n    };\n    /*final void*/ DetectionResultColumn.prototype.setCodeword = function (imageRow, codeword) {\n        this.codewords[this.imageRowToCodewordIndex(imageRow)] = codeword;\n    };\n    /*final*/ DetectionResultColumn.prototype.getCodeword = function (imageRow) {\n        return this.codewords[this.imageRowToCodewordIndex(imageRow)];\n    };\n    /*final*/ DetectionResultColumn.prototype.getBoundingBox = function () {\n        return this.boundingBox;\n    };\n    /*final*/ DetectionResultColumn.prototype.getCodewords = function () {\n        return this.codewords;\n    };\n    // @Override\n    DetectionResultColumn.prototype.toString = function () {\n        var e_1, _a;\n        var formatter = new Formatter();\n        var row = 0;\n        try {\n            for (var _b = __values(this.codewords), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var codeword = _c.value;\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        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return formatter.toString();\n    };\n    DetectionResultColumn.MAX_NEARBY_DISTANCE = 5;\n    return DetectionResultColumn;\n}());\nexport default DetectionResultColumn;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\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 */\nvar BarcodeValue = /** @class */ (function () {\n    function BarcodeValue() {\n        this.values = new Map();\n    }\n    /**\n     * Add an occurrence of a value\n     */\n    BarcodeValue.prototype.setValue = function (value) {\n        value = Math.trunc(value);\n        var 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    BarcodeValue.prototype.getValue = function () {\n        var e_1, _a;\n        var maxConfidence = -1;\n        var result = new Array();\n        var _loop_1 = function (key, value) {\n            var entry = {\n                getKey: function () { return key; },\n                getValue: function () { return 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        try {\n            for (var _b = __values(this.values.entries()), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read(_c.value, 2), key = _d[0], value = _d[1];\n                _loop_1(key, value);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return PDF417Common.toIntArray(result);\n    };\n    BarcodeValue.prototype.getConfidence = function (value) {\n        return this.values.get(value);\n    };\n    return BarcodeValue;\n}());\nexport default BarcodeValue;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\nimport BarcodeMetadata from './BarcodeMetadata';\nimport DetectionResultColumn from './DetectionResultColumn';\nimport BarcodeValue from './BarcodeValue';\n/**\n * @author Guenther Grau\n */\nvar DetectionResultRowIndicatorColumn = /** @class */ (function (_super) {\n    __extends(DetectionResultRowIndicatorColumn, _super);\n    function DetectionResultRowIndicatorColumn(boundingBox, isLeft) {\n        var _this = _super.call(this, boundingBox) || this;\n        _this._isLeft = isLeft;\n        return _this;\n    }\n    DetectionResultRowIndicatorColumn.prototype.setRowNumbers = function () {\n        var e_1, _a;\n        try {\n            for (var _b = __values(this.getCodewords()), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var codeword = _c.value /*Codeword*/;\n                if (codeword != null) {\n                    codeword.setRowNumberAsRowIndicatorColumn();\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\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    DetectionResultRowIndicatorColumn.prototype.adjustCompleteIndicatorColumnRowNumbers = function (barcodeMetadata) {\n        var codewords = this.getCodewords();\n        this.setRowNumbers();\n        this.removeIncorrectCodewords(codewords, barcodeMetadata);\n        var boundingBox = this.getBoundingBox();\n        var top = this._isLeft ? boundingBox.getTopLeft() : boundingBox.getTopRight();\n        var bottom = this._isLeft ? boundingBox.getBottomLeft() : boundingBox.getBottomRight();\n        var firstRow = this.imageRowToCodewordIndex(Math.trunc(top.getY()));\n        var 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        var barcodeRow = -1;\n        var maxRowHeight = 1;\n        var currentRowHeight = 0;\n        for (var codewordsRow /*int*/ = firstRow; codewordsRow < lastRow; codewordsRow++) {\n            if (codewords[codewordsRow] == null) {\n                continue;\n            }\n            var 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            var 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                var checkedRows = void 0;\n                if (maxRowHeight > 2) {\n                    checkedRows = (maxRowHeight - 2) * rowDifference;\n                }\n                else {\n                    checkedRows = rowDifference;\n                }\n                var closePreviousCodewordFound = checkedRows >= codewordsRow;\n                for (var 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    DetectionResultRowIndicatorColumn.prototype.getRowHeights = function () {\n        var e_2, _a;\n        var barcodeMetadata = this.getBarcodeMetadata();\n        if (barcodeMetadata == null) {\n            return null;\n        }\n        this.adjustIncompleteIndicatorColumnRowNumbers(barcodeMetadata);\n        var result = new Int32Array(barcodeMetadata.getRowCount());\n        try {\n            for (var _b = __values(this.getCodewords()), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var codeword = _c.value /*Codeword*/;\n                if (codeword != null) {\n                    var 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        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_2) throw e_2.error; }\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    DetectionResultRowIndicatorColumn.prototype.adjustIncompleteIndicatorColumnRowNumbers = function (barcodeMetadata) {\n        var boundingBox = this.getBoundingBox();\n        var top = this._isLeft ? boundingBox.getTopLeft() : boundingBox.getTopRight();\n        var bottom = this._isLeft ? boundingBox.getBottomLeft() : boundingBox.getBottomRight();\n        var firstRow = this.imageRowToCodewordIndex(Math.trunc(top.getY()));\n        var lastRow = this.imageRowToCodewordIndex(Math.trunc(bottom.getY()));\n        // float averageRowHeight = (lastRow - firstRow) / /*(float)*/ barcodeMetadata.getRowCount();\n        var codewords = this.getCodewords();\n        var barcodeRow = -1;\n        var maxRowHeight = 1;\n        var currentRowHeight = 0;\n        for (var codewordsRow /*int*/ = firstRow; codewordsRow < lastRow; codewordsRow++) {\n            if (codewords[codewordsRow] == null) {\n                continue;\n            }\n            var codeword = codewords[codewordsRow];\n            codeword.setRowNumberAsRowIndicatorColumn();\n            var 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 (codeword.getRowNumber() >= barcodeMetadata.getRowCount()) {\n                codewords[codewordsRow] = null;\n            }\n            else {\n                barcodeRow = codeword.getRowNumber();\n                currentRowHeight = 1;\n            }\n        }\n        // return (int) (averageRowHeight + 0.5);\n    };\n    DetectionResultRowIndicatorColumn.prototype.getBarcodeMetadata = function () {\n        var e_3, _a;\n        var codewords = this.getCodewords();\n        var barcodeColumnCount = new BarcodeValue();\n        var barcodeRowCountUpperPart = new BarcodeValue();\n        var barcodeRowCountLowerPart = new BarcodeValue();\n        var barcodeECLevel = new BarcodeValue();\n        try {\n            for (var codewords_1 = __values(codewords), codewords_1_1 = codewords_1.next(); !codewords_1_1.done; codewords_1_1 = codewords_1.next()) {\n                var codeword = codewords_1_1.value /*Codeword*/;\n                if (codeword == null) {\n                    continue;\n                }\n                codeword.setRowNumberAsRowIndicatorColumn();\n                var rowIndicatorValue = codeword.getValue() % 30;\n                var 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        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (codewords_1_1 && !codewords_1_1.done && (_a = codewords_1.return)) _a.call(codewords_1);\n            }\n            finally { if (e_3) throw e_3.error; }\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        var 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    DetectionResultRowIndicatorColumn.prototype.removeIncorrectCodewords = function (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 (var codewordRow /*int*/ = 0; codewordRow < codewords.length; codewordRow++) {\n            var codeword = codewords[codewordRow];\n            if (codewords[codewordRow] == null) {\n                continue;\n            }\n            var rowIndicatorValue = codeword.getValue() % 30;\n            var 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    DetectionResultRowIndicatorColumn.prototype.isLeft = function () {\n        return this._isLeft;\n    };\n    // @Override\n    DetectionResultRowIndicatorColumn.prototype.toString = function () {\n        return 'IsLeft: ' + this._isLeft + '\\n' + _super.prototype.toString.call(this);\n    };\n    return DetectionResultRowIndicatorColumn;\n}(DetectionResultColumn));\nexport default DetectionResultRowIndicatorColumn;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\nimport Formatter from '../../util/Formatter';\n/**\n * @author Guenther Grau\n */\nvar DetectionResult = /** @class */ (function () {\n    function DetectionResult(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    DetectionResult.prototype.getDetectionResultColumns = function () {\n        this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]);\n        this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount + 1]);\n        var unadjustedCodewordCount = PDF417Common.MAX_CODEWORDS_IN_BARCODE;\n        var previousUnadjustedCount;\n        do {\n            previousUnadjustedCount = unadjustedCodewordCount;\n            unadjustedCodewordCount = this.adjustRowNumbersAndGetCount();\n        } while (unadjustedCodewordCount > 0 && unadjustedCodewordCount < previousUnadjustedCount);\n        return this.detectionResultColumns;\n    };\n    DetectionResult.prototype.adjustIndicatorColumnRowNumbers = function (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    DetectionResult.prototype.adjustRowNumbersAndGetCount = function () {\n        var unadjustedCount = this.adjustRowNumbersByRow();\n        if (unadjustedCount === 0) {\n            return 0;\n        }\n        for (var barcodeColumn /*int*/ = 1; barcodeColumn < this.barcodeColumnCount + 1; barcodeColumn++) {\n            var codewords = this.detectionResultColumns[barcodeColumn].getCodewords();\n            for (var 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    DetectionResult.prototype.adjustRowNumbersByRow = function () {\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        var unadjustedCount = this.adjustRowNumbersFromLRI();\n        return unadjustedCount + this.adjustRowNumbersFromRRI();\n    };\n    DetectionResult.prototype.adjustRowNumbersFromBothRI = function () {\n        if (this.detectionResultColumns[0] == null || this.detectionResultColumns[this.barcodeColumnCount + 1] == null) {\n            return;\n        }\n        var LRIcodewords = this.detectionResultColumns[0].getCodewords();\n        var RRIcodewords = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\n        for (var 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 (var barcodeColumn /*int*/ = 1; barcodeColumn <= this.barcodeColumnCount; barcodeColumn++) {\n                    var 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    DetectionResult.prototype.adjustRowNumbersFromRRI = function () {\n        if (this.detectionResultColumns[this.barcodeColumnCount + 1] == null) {\n            return 0;\n        }\n        var unadjustedCount = 0;\n        var codewords = this.detectionResultColumns[this.barcodeColumnCount + 1].getCodewords();\n        for (var codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n            if (codewords[codewordsRow] == null) {\n                continue;\n            }\n            var rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();\n            var invalidRowCounts = 0;\n            for (var barcodeColumn /*int*/ = this.barcodeColumnCount + 1; barcodeColumn > 0 && invalidRowCounts < this.ADJUST_ROW_NUMBER_SKIP; barcodeColumn--) {\n                var 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    DetectionResult.prototype.adjustRowNumbersFromLRI = function () {\n        if (this.detectionResultColumns[0] == null) {\n            return 0;\n        }\n        var unadjustedCount = 0;\n        var codewords = this.detectionResultColumns[0].getCodewords();\n        for (var codewordsRow /*int*/ = 0; codewordsRow < codewords.length; codewordsRow++) {\n            if (codewords[codewordsRow] == null) {\n                continue;\n            }\n            var rowIndicatorRowNumber = codewords[codewordsRow].getRowNumber();\n            var invalidRowCounts = 0;\n            for (var barcodeColumn /*int*/ = 1; barcodeColumn < this.barcodeColumnCount + 1 && invalidRowCounts < this.ADJUST_ROW_NUMBER_SKIP; barcodeColumn++) {\n                var 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    DetectionResult.adjustRowNumberIfValid = function (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    DetectionResult.prototype.adjustRowNumbers = function (barcodeColumn, codewordsRow, codewords) {\n        var e_1, _a;\n        if (this.detectionResultColumns[barcodeColumn - 1] == null) {\n            return;\n        }\n        var codeword = codewords[codewordsRow];\n        var previousColumnCodewords = this.detectionResultColumns[barcodeColumn - 1].getCodewords();\n        var 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        var 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        try {\n            for (var otherCodewords_1 = __values(otherCodewords), otherCodewords_1_1 = otherCodewords_1.next(); !otherCodewords_1_1.done; otherCodewords_1_1 = otherCodewords_1.next()) {\n                var otherCodeword = otherCodewords_1_1.value;\n                if (DetectionResult.adjustRowNumber(codeword, otherCodeword)) {\n                    return;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (otherCodewords_1_1 && !otherCodewords_1_1.done && (_a = otherCodewords_1.return)) _a.call(otherCodewords_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    /**\n     * @return true, if row number was adjusted, false otherwise\n     */\n    DetectionResult.adjustRowNumber = function (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    DetectionResult.prototype.getBarcodeColumnCount = function () {\n        return this.barcodeColumnCount;\n    };\n    DetectionResult.prototype.getBarcodeRowCount = function () {\n        return this.barcodeMetadata.getRowCount();\n    };\n    DetectionResult.prototype.getBarcodeECLevel = function () {\n        return this.barcodeMetadata.getErrorCorrectionLevel();\n    };\n    DetectionResult.prototype.setBoundingBox = function (boundingBox) {\n        this.boundingBox = boundingBox;\n    };\n    DetectionResult.prototype.getBoundingBox = function () {\n        return this.boundingBox;\n    };\n    DetectionResult.prototype.setDetectionResultColumn = function (barcodeColumn, detectionResultColumn) {\n        this.detectionResultColumns[barcodeColumn] = detectionResultColumn;\n    };\n    DetectionResult.prototype.getDetectionResultColumn = function (barcodeColumn) {\n        return this.detectionResultColumns[barcodeColumn];\n    };\n    // @Override\n    DetectionResult.prototype.toString = function () {\n        var rowIndicatorColumn = this.detectionResultColumns[0];\n        if (rowIndicatorColumn == null) {\n            rowIndicatorColumn = this.detectionResultColumns[this.barcodeColumnCount + 1];\n        }\n        // try (\n        var formatter = new Formatter();\n        // ) {\n        for (var codewordsRow /*int*/ = 0; codewordsRow < rowIndicatorColumn.getCodewords().length; codewordsRow++) {\n            formatter.format('CW %3d:', codewordsRow);\n            for (var barcodeColumn /*int*/ = 0; barcodeColumn < this.barcodeColumnCount + 2; barcodeColumn++) {\n                if (this.detectionResultColumns[barcodeColumn] == null) {\n                    formatter.format('    |   ');\n                    continue;\n                }\n                var 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    return DetectionResult;\n}());\nexport default DetectionResult;\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 */\nvar Codeword = /** @class */ (function () {\n    function Codeword(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    Codeword.prototype.hasValidRowNumber = function () {\n        return this.isValidRowNumber(this.rowNumber);\n    };\n    Codeword.prototype.isValidRowNumber = function (rowNumber) {\n        return rowNumber !== Codeword.BARCODE_ROW_UNKNOWN && this.bucket === (rowNumber % 3) * 3;\n    };\n    Codeword.prototype.setRowNumberAsRowIndicatorColumn = function () {\n        this.rowNumber = Math.trunc((Math.trunc(this.value / 30)) * 3 + Math.trunc(this.bucket / 3));\n    };\n    Codeword.prototype.getWidth = function () {\n        return this.endX - this.startX;\n    };\n    Codeword.prototype.getStartX = function () {\n        return this.startX;\n    };\n    Codeword.prototype.getEndX = function () {\n        return this.endX;\n    };\n    Codeword.prototype.getBucket = function () {\n        return this.bucket;\n    };\n    Codeword.prototype.getValue = function () {\n        return this.value;\n    };\n    Codeword.prototype.getRowNumber = function () {\n        return this.rowNumber;\n    };\n    Codeword.prototype.setRowNumber = function (rowNumber) {\n        this.rowNumber = rowNumber;\n    };\n    //   @Override\n    Codeword.prototype.toString = function () {\n        return this.rowNumber + '|' + this.value;\n    };\n    Codeword.BARCODE_ROW_UNKNOWN = -1;\n    return Codeword;\n}());\nexport default Codeword;\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// import com.google.zxing.common.detector.MathUtils;\nimport MathUtils from '../../common/detector/MathUtils';\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\nimport Float from '../../util/Float';\n/**\n * @author Guenther Grau\n * @author creatale GmbH (christoph.schulz@creatale.de)\n */\nvar PDF417CodewordDecoder = /** @class */ (function () {\n    function PDF417CodewordDecoder() {\n    }\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    PDF417CodewordDecoder.initialize = function () {\n        // Pre-computes the symbol ratio table.\n        for ( /*int*/var i = 0; i < PDF417Common.SYMBOL_TABLE.length; i++) {\n            var currentSymbol = PDF417Common.SYMBOL_TABLE[i];\n            var currentBit = currentSymbol & 0x1;\n            for ( /*int*/var j = 0; j < PDF417Common.BARS_IN_MODULE; j++) {\n                var 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    PDF417CodewordDecoder.getDecodedValue = function (moduleBitCount) {\n        var decodedValue = PDF417CodewordDecoder.getDecodedCodewordValue(PDF417CodewordDecoder.sampleBitCounts(moduleBitCount));\n        if (decodedValue !== -1) {\n            return decodedValue;\n        }\n        return PDF417CodewordDecoder.getClosestDecodedValue(moduleBitCount);\n    };\n    PDF417CodewordDecoder.sampleBitCounts = function (moduleBitCount) {\n        var bitCountSum = MathUtils.sum(moduleBitCount);\n        var result = new Int32Array(PDF417Common.BARS_IN_MODULE);\n        var bitCountIndex = 0;\n        var sumPreviousBits = 0;\n        for ( /*int*/var i = 0; i < PDF417Common.MODULES_IN_CODEWORD; i++) {\n            var 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    PDF417CodewordDecoder.getDecodedCodewordValue = function (moduleBitCount) {\n        var decodedValue = PDF417CodewordDecoder.getBitValue(moduleBitCount);\n        return PDF417Common.getCodeword(decodedValue) === -1 ? -1 : decodedValue;\n    };\n    PDF417CodewordDecoder.getBitValue = function (moduleBitCount) {\n        var result = /*long*/ 0;\n        for (var /*int*/ i = 0; i < moduleBitCount.length; i++) {\n            for ( /*int*/var 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    PDF417CodewordDecoder.getClosestDecodedValue = function (moduleBitCount) {\n        var bitCountSum = MathUtils.sum(moduleBitCount);\n        var bitCountRatios = new Array(PDF417Common.BARS_IN_MODULE);\n        if (bitCountSum > 1) {\n            for (var /*int*/ i = 0; i < bitCountRatios.length; i++) {\n                bitCountRatios[i] = Math.fround(moduleBitCount[i] / bitCountSum);\n            }\n        }\n        var bestMatchError = Float.MAX_VALUE;\n        var bestMatch = -1;\n        if (!this.bSymbolTableReady) {\n            PDF417CodewordDecoder.initialize();\n        }\n        for ( /*int*/var j = 0; j < PDF417CodewordDecoder.RATIOS_TABLE.length; j++) {\n            var error = 0.0;\n            var ratioTableRow = PDF417CodewordDecoder.RATIOS_TABLE[j];\n            for ( /*int*/var k = 0; k < PDF417Common.BARS_IN_MODULE; k++) {\n                var 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    // flag that the table is ready for use\n    PDF417CodewordDecoder.bSymbolTableReady = false;\n    PDF417CodewordDecoder.RATIOS_TABLE = new Array(PDF417Common.SYMBOL_TABLE.length).map(function (x) { return x = new Array(PDF417Common.BARS_IN_MODULE); });\n    return PDF417CodewordDecoder;\n}());\nexport default PDF417CodewordDecoder;\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 */\nvar PDF417ResultMetadata = /** @class */ (function () {\n    function PDF417ResultMetadata() {\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    PDF417ResultMetadata.prototype.getSegmentIndex = function () {\n        return this.segmentIndex;\n    };\n    PDF417ResultMetadata.prototype.setSegmentIndex = function (segmentIndex) {\n        this.segmentIndex = segmentIndex;\n    };\n    /**\n     * Is the same for each related PDF417 symbol\n     *\n     * @return File ID\n     */\n    PDF417ResultMetadata.prototype.getFileId = function () {\n        return this.fileId;\n    };\n    PDF417ResultMetadata.prototype.setFileId = function (fileId) {\n        this.fileId = fileId;\n    };\n    /**\n     * @return always null\n     * @deprecated use dedicated already parsed fields\n     */\n    //   @Deprecated\n    PDF417ResultMetadata.prototype.getOptionalData = function () {\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    PDF417ResultMetadata.prototype.setOptionalData = function (optionalData) {\n        this.optionalData = optionalData;\n    };\n    /**\n     * @return true if it is the last segment\n     */\n    PDF417ResultMetadata.prototype.isLastSegment = function () {\n        return this.lastSegment;\n    };\n    PDF417ResultMetadata.prototype.setLastSegment = function (lastSegment) {\n        this.lastSegment = lastSegment;\n    };\n    /**\n     * @return count of segments, -1 if not set\n     */\n    PDF417ResultMetadata.prototype.getSegmentCount = function () {\n        return this.segmentCount;\n    };\n    PDF417ResultMetadata.prototype.setSegmentCount = function (segmentCount /*int*/) {\n        this.segmentCount = segmentCount;\n    };\n    PDF417ResultMetadata.prototype.getSender = function () {\n        return this.sender || null;\n    };\n    PDF417ResultMetadata.prototype.setSender = function (sender) {\n        this.sender = sender;\n    };\n    PDF417ResultMetadata.prototype.getAddressee = function () {\n        return this.addressee || null;\n    };\n    PDF417ResultMetadata.prototype.setAddressee = function (addressee) {\n        this.addressee = addressee;\n    };\n    /**\n     * Filename of the encoded file\n     *\n     * @return filename\n     */\n    PDF417ResultMetadata.prototype.getFileName = function () {\n        return this.fileName;\n    };\n    PDF417ResultMetadata.prototype.setFileName = function (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    PDF417ResultMetadata.prototype.getFileSize = function () {\n        return this.fileSize;\n    };\n    PDF417ResultMetadata.prototype.setFileSize = function (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    PDF417ResultMetadata.prototype.getChecksum = function () {\n        return this.checksum;\n    };\n    PDF417ResultMetadata.prototype.setChecksum = function (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    PDF417ResultMetadata.prototype.getTimestamp = function () {\n        return this.timestamp;\n    };\n    PDF417ResultMetadata.prototype.setTimestamp = function (timestamp /*long*/) {\n        this.timestamp = timestamp;\n    };\n    return PDF417ResultMetadata;\n}());\nexport default PDF417ResultMetadata;\n", "/**\n * Ponyfill for Java's Long class.\n */\nvar Long = /** @class */ (function () {\n    function Long() {\n    }\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    Long.parseLong = function (num, radix) {\n        if (radix === void 0) { radix = undefined; }\n        return parseInt(num, radix);\n    };\n    return Long;\n}());\nexport default Long;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar NullPointerException = /** @class */ (function (_super) {\n    __extends(NullPointerException, _super);\n    function NullPointerException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    NullPointerException.kind = 'NullPointerException';\n    return NullPointerException;\n}(Exception));\nexport default NullPointerException;\n", "import IndexOutOfBoundsException from '../IndexOutOfBoundsException';\nimport NullPointerException from '../NullPointerException';\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 */\nvar OutputStream /*implements Closeable, Flushable*/ = /** @class */ (function () {\n    function OutputStream() {\n    }\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    OutputStream.prototype.writeBytes = function (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    OutputStream.prototype.writeBytesOffset = function (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 (var 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    OutputStream.prototype.flush = function () {\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    OutputStream.prototype.close = function () {\n    };\n    return OutputStream;\n}());\nexport default OutputStream;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar OutOfMemoryError = /** @class */ (function (_super) {\n    __extends(OutOfMemoryError, _super);\n    function OutOfMemoryError() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return OutOfMemoryError;\n}(Exception));\nexport default OutOfMemoryError;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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// package java.io;\n// import java.util.Arrays;\nimport Arrays from './Arrays';\nimport OutputStream from './OutputStream';\nimport Integer from './Integer';\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport OutOfMemoryError from '../OutOfMemoryError';\nimport System from './System';\nimport IndexOutOfBoundsException from '../IndexOutOfBoundsException';\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 */\nvar ByteArrayOutputStream = /** @class */ (function (_super) {\n    __extends(ByteArrayOutputStream, _super);\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    function ByteArrayOutputStream(size) {\n        if (size === void 0) { size = 32; }\n        var _this = _super.call(this) || this;\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        return _this;\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    ByteArrayOutputStream.prototype.ensureCapacity = function (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    ByteArrayOutputStream.prototype.grow = function (minCapacity) {\n        // overflow-conscious code\n        var oldCapacity = this.buf.length;\n        var 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    ByteArrayOutputStream.prototype.write = function (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    ByteArrayOutputStream.prototype.writeBytesOffset = function (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    ByteArrayOutputStream.prototype.writeTo = function (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    ByteArrayOutputStream.prototype.reset = function () {\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    ByteArrayOutputStream.prototype.toByteArray = function () {\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    ByteArrayOutputStream.prototype.size = function () {\n        return this.count;\n    };\n    ByteArrayOutputStream.prototype.toString = function (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    ByteArrayOutputStream.prototype.toString_void = function () {\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    ByteArrayOutputStream.prototype.toString_string = function (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    ByteArrayOutputStream.prototype.toString_number = function (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    ByteArrayOutputStream.prototype.close = function () {\n    };\n    return ByteArrayOutputStream;\n}(OutputStream));\nexport default ByteArrayOutputStream;\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// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.FormatException;\nimport FormatException from '../../FormatException';\n// import com.google.zxing.common.CharacterSetECI;\nimport CharacterSetECI from '../../common/CharacterSetECI';\n// import com.google.zxing.common.DecoderResult;\nimport DecoderResult from '../../common/DecoderResult';\n// import com.google.zxing.pdf417.PDF417ResultMetadata;\nimport PDF417ResultMetadata from '../PDF417ResultMetadata';\n// import java.io.ByteArrayOutputStream;\n// import java.math.BigInteger;\n// import java.nio.charset.Charset;\n// import java.nio.charset.StandardCharsets;\n// import java.util.Arrays;\nimport Arrays from '../../util/Arrays';\nimport StringBuilder from '../../util/StringBuilder';\nimport Integer from '../../util/Integer';\nimport Long from '../../util/Long';\nimport ByteArrayOutputStream from '../../util/ByteArrayOutputStream';\nimport StringEncoding from '../../util/StringEncoding';\n/*private*/ var Mode;\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 || (Mode = {}));\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 */\nfunction 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 */\nvar 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 */\nfunction 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}\nfunction getEXP900() {\n    // in Java - array with length = 16\n    var EXP900 = [];\n    EXP900[0] = createBigInt(1);\n    var nineHundred = createBigInt(900);\n    EXP900[1] = nineHundred;\n    // in Java - array with length = 16\n    for (var 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 */\nvar DecodedBitStreamParser = /** @class */ (function () {\n    function DecodedBitStreamParser() {\n    }\n    //   private DecodedBitStreamParser() {\n    // }\n    /**\n     *\n     * @param codewords\n     * @param ecLevel\n     *\n     * @throws FormatException\n     */\n    DecodedBitStreamParser.decode = function (codewords, ecLevel) {\n        // pass encoding to result (will be used for decode symbols in byte mode)\n        var result = new StringBuilder('');\n        // let encoding: Charset = StandardCharsets.ISO_8859_1;\n        var 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        var codeIndex = 1;\n        var code = codewords[codeIndex++];\n        var resultMetadata = new PDF417ResultMetadata();\n        while (codeIndex < codewords[0]) {\n            switch (code) {\n                case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n                    codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex, result);\n                    break;\n                case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n                case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n                    codeIndex = DecodedBitStreamParser.byteCompaction(code, codewords, encoding, codeIndex, result);\n                    break;\n                case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                    result.append(/*(char)*/ codewords[codeIndex++]);\n                    break;\n                case DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH:\n                    codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex, result);\n                    break;\n                case DecodedBitStreamParser.ECI_CHARSET:\n                    var charsetECI = CharacterSetECI.getCharacterSetECIByValue(codewords[codeIndex++]);\n                    // encoding = Charset.forName(charsetECI.getName());\n                    break;\n                case DecodedBitStreamParser.ECI_GENERAL_PURPOSE:\n                    // Can't do anything with generic ECI; skip its 2 characters\n                    codeIndex += 2;\n                    break;\n                case DecodedBitStreamParser.ECI_USER_DEFINED:\n                    // Can't do anything with user ECI; skip its 1 character\n                    codeIndex++;\n                    break;\n                case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                    codeIndex = DecodedBitStreamParser.decodeMacroBlock(codewords, codeIndex, resultMetadata);\n                    break;\n                case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                case DecodedBitStreamParser.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.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        var 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    DecodedBitStreamParser.decodeMacroBlock = function (codewords, codeIndex, resultMetadata) {\n        if (codeIndex + DecodedBitStreamParser.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        var segmentIndexArray = new Int32Array(DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS);\n        for (var i /*int*/ = 0; i < DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS; i++, codeIndex++) {\n            segmentIndexArray[i] = codewords[codeIndex];\n        }\n        resultMetadata.setSegmentIndex(Integer.parseInt(DecodedBitStreamParser.decodeBase900toBase10(segmentIndexArray, DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS)));\n        var fileId = new StringBuilder();\n        codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex, fileId);\n        resultMetadata.setFileId(fileId.toString());\n        var optionalFieldsStart = -1;\n        if (codewords[codeIndex] === DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD) {\n            optionalFieldsStart = codeIndex + 1;\n        }\n        while (codeIndex < codewords[0]) {\n            switch (codewords[codeIndex]) {\n                case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                    codeIndex++;\n                    switch (codewords[codeIndex]) {\n                        case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME:\n                            var fileName = new StringBuilder();\n                            codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex + 1, fileName);\n                            resultMetadata.setFileName(fileName.toString());\n                            break;\n                        case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_SENDER:\n                            var sender = new StringBuilder();\n                            codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex + 1, sender);\n                            resultMetadata.setSender(sender.toString());\n                            break;\n                        case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE:\n                            var addressee = new StringBuilder();\n                            codeIndex = DecodedBitStreamParser.textCompaction(codewords, codeIndex + 1, addressee);\n                            resultMetadata.setAddressee(addressee.toString());\n                            break;\n                        case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT:\n                            var segmentCount = new StringBuilder();\n                            codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex + 1, segmentCount);\n                            resultMetadata.setSegmentCount(Integer.parseInt(segmentCount.toString()));\n                            break;\n                        case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP:\n                            var timestamp = new StringBuilder();\n                            codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex + 1, timestamp);\n                            resultMetadata.setTimestamp(Long.parseLong(timestamp.toString()));\n                            break;\n                        case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM:\n                            var checksum = new StringBuilder();\n                            codeIndex = DecodedBitStreamParser.numericCompaction(codewords, codeIndex + 1, checksum);\n                            resultMetadata.setChecksum(Integer.parseInt(checksum.toString()));\n                            break;\n                        case DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE:\n                            var fileSize = new StringBuilder();\n                            codeIndex = DecodedBitStreamParser.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.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            var 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    DecodedBitStreamParser.textCompaction = function (codewords, codeIndex, result) {\n        // 2 character per codeword\n        var textCompactionData = new Int32Array((codewords[0] - codeIndex) * 2);\n        // Used to hold the byte compaction value if there is a mode shift\n        var byteCompactionData = new Int32Array((codewords[0] - codeIndex) * 2);\n        var index = 0;\n        var end = false;\n        while ((codeIndex < codewords[0]) && !end) {\n            var code = codewords[codeIndex++];\n            if (code < DecodedBitStreamParser.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.TEXT_COMPACTION_MODE_LATCH:\n                        // reinitialize text compaction mode to alpha sub mode\n                        textCompactionData[index++] = DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH;\n                        break;\n                    case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n                    case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n                    case DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH:\n                    case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                    case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                    case DecodedBitStreamParser.MACRO_PDF417_TERMINATOR:\n                        codeIndex--;\n                        end = true;\n                        break;\n                    case DecodedBitStreamParser.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.MODE_SHIFT_TO_BYTE_COMPACTION_MODE;\n                        code = codewords[codeIndex++];\n                        byteCompactionData[index] = code;\n                        index++;\n                        break;\n                }\n            }\n        }\n        DecodedBitStreamParser.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    DecodedBitStreamParser.decodeTextCompaction = function (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        var subMode = Mode.ALPHA;\n        var priorToShiftMode = Mode.ALPHA;\n        var i = 0;\n        while (i < length) {\n            var subModeCh = textCompactionData[i];\n            var ch = /*char*/ '';\n            switch (subMode) {\n                case Mode.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.LL:\n                                subMode = Mode.LOWER;\n                                break;\n                            case DecodedBitStreamParser.ML:\n                                subMode = Mode.MIXED;\n                                break;\n                            case DecodedBitStreamParser.PS:\n                                // Shift to punctuation\n                                priorToShiftMode = subMode;\n                                subMode = Mode.PUNCT_SHIFT;\n                                break;\n                            case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                result.append(/*(char)*/ byteCompactionData[i]);\n                                break;\n                            case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n                                subMode = Mode.ALPHA;\n                                break;\n                        }\n                    }\n                    break;\n                case Mode.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.AS:\n                                // Shift to alpha\n                                priorToShiftMode = subMode;\n                                subMode = Mode.ALPHA_SHIFT;\n                                break;\n                            case DecodedBitStreamParser.ML:\n                                subMode = Mode.MIXED;\n                                break;\n                            case DecodedBitStreamParser.PS:\n                                // Shift to punctuation\n                                priorToShiftMode = subMode;\n                                subMode = Mode.PUNCT_SHIFT;\n                                break;\n                            case DecodedBitStreamParser.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.TEXT_COMPACTION_MODE_LATCH:\n                                subMode = Mode.ALPHA;\n                                break;\n                        }\n                    }\n                    break;\n                case Mode.MIXED:\n                    // Mixed (punctuation: e)\n                    if (subModeCh < DecodedBitStreamParser.PL) {\n                        ch = DecodedBitStreamParser.MIXED_CHARS[subModeCh];\n                    }\n                    else {\n                        switch (subModeCh) {\n                            case DecodedBitStreamParser.PL:\n                                subMode = Mode.PUNCT;\n                                break;\n                            case 26:\n                                ch = ' ';\n                                break;\n                            case DecodedBitStreamParser.LL:\n                                subMode = Mode.LOWER;\n                                break;\n                            case DecodedBitStreamParser.AL:\n                                subMode = Mode.ALPHA;\n                                break;\n                            case DecodedBitStreamParser.PS:\n                                // Shift to punctuation\n                                priorToShiftMode = subMode;\n                                subMode = Mode.PUNCT_SHIFT;\n                                break;\n                            case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                result.append(/*(char)*/ byteCompactionData[i]);\n                                break;\n                            case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n                                subMode = Mode.ALPHA;\n                                break;\n                        }\n                    }\n                    break;\n                case Mode.PUNCT:\n                    // Punctuation\n                    if (subModeCh < DecodedBitStreamParser.PAL) {\n                        ch = DecodedBitStreamParser.PUNCT_CHARS[subModeCh];\n                    }\n                    else {\n                        switch (subModeCh) {\n                            case DecodedBitStreamParser.PAL:\n                                subMode = Mode.ALPHA;\n                                break;\n                            case DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:\n                                result.append(/*(char)*/ byteCompactionData[i]);\n                                break;\n                            case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n                                subMode = Mode.ALPHA;\n                                break;\n                        }\n                    }\n                    break;\n                case Mode.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.TEXT_COMPACTION_MODE_LATCH:\n                                subMode = Mode.ALPHA;\n                                break;\n                        }\n                    }\n                    break;\n                case Mode.PUNCT_SHIFT:\n                    // Restore sub-mode\n                    subMode = priorToShiftMode;\n                    if (subModeCh < DecodedBitStreamParser.PAL) {\n                        ch = DecodedBitStreamParser.PUNCT_CHARS[subModeCh];\n                    }\n                    else {\n                        switch (subModeCh) {\n                            case DecodedBitStreamParser.PAL:\n                                subMode = Mode.ALPHA;\n                                break;\n                            case DecodedBitStreamParser.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.TEXT_COMPACTION_MODE_LATCH:\n                                subMode = Mode.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    DecodedBitStreamParser.byteCompaction = function (mode, codewords, encoding, codeIndex, result) {\n        var decodedBytes = new ByteArrayOutputStream();\n        var count = 0;\n        var value = /*long*/ 0;\n        var end = false;\n        switch (mode) {\n            case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n                // Total number of Byte Compaction characters to be encoded\n                // is not a multiple of 6\n                var byteCompactedCodewords = new Int32Array(6);\n                var 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.TEXT_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH:\n                        case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n                        case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                        case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                        case DecodedBitStreamParser.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 (var 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.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 (var i /*int*/ = 0; i < count; i++) {\n                    decodedBytes.write(/*(byte)*/ byteCompactedCodewords[i]);\n                }\n                break;\n            case DecodedBitStreamParser.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                    var code = codewords[codeIndex++];\n                    if (code < DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH) {\n                        count++;\n                        // Base 900\n                        value = 900 * value + code;\n                    }\n                    else {\n                        switch (code) {\n                            case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH:\n                            case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n                            case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                            case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                            case DecodedBitStreamParser.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 (var 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    DecodedBitStreamParser.numericCompaction = function (codewords, codeIndex /*int*/, result) {\n        var count = 0;\n        var end = false;\n        var numericCodewords = new Int32Array(DecodedBitStreamParser.MAX_NUMERIC_CODEWORDS);\n        while (codeIndex < codewords[0] && !end) {\n            var code = codewords[codeIndex++];\n            if (codeIndex === codewords[0]) {\n                end = true;\n            }\n            if (code < DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH) {\n                numericCodewords[count] = code;\n                count++;\n            }\n            else {\n                switch (code) {\n                    case DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH:\n                    case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH:\n                    case DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6:\n                    case DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK:\n                    case DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:\n                    case DecodedBitStreamParser.MACRO_PDF417_TERMINATOR:\n                        codeIndex--;\n                        end = true;\n                        break;\n                }\n            }\n            if ((count % DecodedBitStreamParser.MAX_NUMERIC_CODEWORDS === 0 || code === DecodedBitStreamParser.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.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    DecodedBitStreamParser.decodeBase900toBase10 = function (codewords, count) {\n        var result = createBigInt(0);\n        for (var i /*int*/ = 0; i < count; i++) {\n            result += DecodedBitStreamParser.EXP900[count - i - 1] * createBigInt(codewords[i]);\n        }\n        var resultString = result.toString();\n        if (resultString.charAt(0) !== '1') {\n            throw new FormatException();\n        }\n        return resultString.substring(1);\n    };\n    DecodedBitStreamParser.TEXT_COMPACTION_MODE_LATCH = 900;\n    DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH = 901;\n    DecodedBitStreamParser.NUMERIC_COMPACTION_MODE_LATCH = 902;\n    DecodedBitStreamParser.BYTE_COMPACTION_MODE_LATCH_6 = 924;\n    DecodedBitStreamParser.ECI_USER_DEFINED = 925;\n    DecodedBitStreamParser.ECI_GENERAL_PURPOSE = 926;\n    DecodedBitStreamParser.ECI_CHARSET = 927;\n    DecodedBitStreamParser.BEGIN_MACRO_PDF417_CONTROL_BLOCK = 928;\n    DecodedBitStreamParser.BEGIN_MACRO_PDF417_OPTIONAL_FIELD = 923;\n    DecodedBitStreamParser.MACRO_PDF417_TERMINATOR = 922;\n    DecodedBitStreamParser.MODE_SHIFT_TO_BYTE_COMPACTION_MODE = 913;\n    DecodedBitStreamParser.MAX_NUMERIC_CODEWORDS = 15;\n    DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME = 0;\n    DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT = 1;\n    DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP = 2;\n    DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_SENDER = 3;\n    DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE = 4;\n    DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE = 5;\n    DecodedBitStreamParser.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM = 6;\n    DecodedBitStreamParser.PL = 25;\n    DecodedBitStreamParser.LL = 27;\n    DecodedBitStreamParser.AS = 27;\n    DecodedBitStreamParser.ML = 28;\n    DecodedBitStreamParser.AL = 28;\n    DecodedBitStreamParser.PS = 29;\n    DecodedBitStreamParser.PAL = 29;\n    DecodedBitStreamParser.PUNCT_CHARS = ';<>@[\\\\]_`~!\\r\\t,:\\n-.$/\"|*()?{}\\'';\n    DecodedBitStreamParser.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.EXP900 = getBigIntConstructor() ? getEXP900() : [];\n    DecodedBitStreamParser.NUMBER_OF_SEQUENCE_CODEWORDS = 2;\n    return DecodedBitStreamParser;\n}());\nexport default DecodedBitStreamParser;\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*/\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417.decoder;\n// import com.google.zxing.ChecksumException;\nimport ChecksumException from '../../ChecksumException';\n// import com.google.zxing.FormatException;\nimport FormatException from '../../FormatException';\n// import com.google.zxing.NotFoundException;\nimport NotFoundException from '../../NotFoundException';\n// import com.google.zxing.common.detector.MathUtils;\nimport MathUtils from '../../common/detector/MathUtils';\n// import com.google.zxing.pdf417.PDF417Common;\nimport PDF417Common from '../PDF417Common';\n// import com.google.zxing.pdf417.decoder.ec.ErrorCorrection;\nimport ErrorCorrection from './ec/ErrorCorrection';\n// local\nimport BoundingBox from './BoundingBox';\nimport DetectionResultRowIndicatorColumn from './DetectionResultRowIndicatorColumn';\nimport DetectionResult from './DetectionResult';\nimport DetectionResultColumn from './DetectionResultColumn';\nimport Codeword from './Codeword';\nimport BarcodeValue from './BarcodeValue';\nimport PDF417CodewordDecoder from './PDF417CodewordDecoder';\nimport DecodedBitStreamParser from './DecodedBitStreamParser';\n// utils\nimport Formatter from '../../util/Formatter';\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 */\nvar PDF417ScanningDecoder = /** @class */ (function () {\n    function PDF417ScanningDecoder() {\n    }\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    PDF417ScanningDecoder.decode = function (image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight, minCodewordWidth, maxCodewordWidth) {\n        var boundingBox = new BoundingBox(image, imageTopLeft, imageBottomLeft, imageTopRight, imageBottomRight);\n        var leftRowIndicatorColumn = null;\n        var rightRowIndicatorColumn = null;\n        var detectionResult;\n        for (var 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            var 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        var maxBarcodeColumn = detectionResult.getBarcodeColumnCount() + 1;\n        detectionResult.setDetectionResultColumn(0, leftRowIndicatorColumn);\n        detectionResult.setDetectionResultColumn(maxBarcodeColumn, rightRowIndicatorColumn);\n        var leftToRight = leftRowIndicatorColumn != null;\n        for (var barcodeColumnCount /*int*/ = 1; barcodeColumnCount <= maxBarcodeColumn; barcodeColumnCount++) {\n            var 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            var detectionResultColumn = void 0;\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            var startColumn = -1;\n            var previousStartColumn = startColumn;\n            // TODO start at a row for which we know the start position, then detect upwards and downwards from there.\n            for (var 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                var 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    PDF417ScanningDecoder.merge = function (leftRowIndicatorColumn, rightRowIndicatorColumn) {\n        if (leftRowIndicatorColumn == null && rightRowIndicatorColumn == null) {\n            return null;\n        }\n        var barcodeMetadata = PDF417ScanningDecoder.getBarcodeMetadata(leftRowIndicatorColumn, rightRowIndicatorColumn);\n        if (barcodeMetadata == null) {\n            return null;\n        }\n        var 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    PDF417ScanningDecoder.adjustBoundingBox = function (rowIndicatorColumn) {\n        var e_1, _a;\n        if (rowIndicatorColumn == null) {\n            return null;\n        }\n        var rowHeights = rowIndicatorColumn.getRowHeights();\n        if (rowHeights == null) {\n            return null;\n        }\n        var maxRowHeight = PDF417ScanningDecoder.getMax(rowHeights);\n        var missingStartRows = 0;\n        try {\n            for (var rowHeights_1 = __values(rowHeights), rowHeights_1_1 = rowHeights_1.next(); !rowHeights_1_1.done; rowHeights_1_1 = rowHeights_1.next()) {\n                var rowHeight = rowHeights_1_1.value /*int*/;\n                missingStartRows += maxRowHeight - rowHeight;\n                if (rowHeight > 0) {\n                    break;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (rowHeights_1_1 && !rowHeights_1_1.done && (_a = rowHeights_1.return)) _a.call(rowHeights_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        var codewords = rowIndicatorColumn.getCodewords();\n        for (var row /*int*/ = 0; missingStartRows > 0 && codewords[row] == null; row++) {\n            missingStartRows--;\n        }\n        var missingEndRows = 0;\n        for (var row /*int*/ = rowHeights.length - 1; row >= 0; row--) {\n            missingEndRows += maxRowHeight - rowHeights[row];\n            if (rowHeights[row] > 0) {\n                break;\n            }\n        }\n        for (var 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    PDF417ScanningDecoder.getMax = function (values) {\n        var e_2, _a;\n        var maxValue = -1;\n        try {\n            for (var values_1 = __values(values), values_1_1 = values_1.next(); !values_1_1.done; values_1_1 = values_1.next()) {\n                var value = values_1_1.value /*int*/;\n                maxValue = Math.max(maxValue, value);\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        return maxValue;\n    };\n    PDF417ScanningDecoder.getBarcodeMetadata = function (leftRowIndicatorColumn, rightRowIndicatorColumn) {\n        var leftBarcodeMetadata;\n        if (leftRowIndicatorColumn == null ||\n            (leftBarcodeMetadata = leftRowIndicatorColumn.getBarcodeMetadata()) == null) {\n            return rightRowIndicatorColumn == null ? null : rightRowIndicatorColumn.getBarcodeMetadata();\n        }\n        var 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    PDF417ScanningDecoder.getRowIndicatorColumn = function (image, boundingBox, startPoint, leftToRight, minCodewordWidth, maxCodewordWidth) {\n        var rowIndicatorColumn = new DetectionResultRowIndicatorColumn(boundingBox, leftToRight);\n        for (var i /*int*/ = 0; i < 2; i++) {\n            var increment = i === 0 ? 1 : -1;\n            var startColumn = Math.trunc(Math.trunc(startPoint.getX()));\n            for (var imageRow /*int*/ = Math.trunc(Math.trunc(startPoint.getY())); imageRow <= boundingBox.getMaxY() &&\n                imageRow >= boundingBox.getMinY(); imageRow += increment) {\n                var 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    PDF417ScanningDecoder.adjustCodewordCount = function (detectionResult, barcodeMatrix) {\n        var barcodeMatrix01 = barcodeMatrix[0][1];\n        var numberOfCodewords = barcodeMatrix01.getValue();\n        var 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    PDF417ScanningDecoder.createDecoderResult = function (detectionResult) {\n        var barcodeMatrix = PDF417ScanningDecoder.createBarcodeMatrix(detectionResult);\n        PDF417ScanningDecoder.adjustCodewordCount(detectionResult, barcodeMatrix);\n        var erasures /*Collection<Integer>*/ = new Array();\n        var codewords = new Int32Array(detectionResult.getBarcodeRowCount() * detectionResult.getBarcodeColumnCount());\n        var ambiguousIndexValuesList = /*List<int[]>*/ [];\n        var ambiguousIndexesList = /*Collection<Integer>*/ new Array();\n        for (var row /*int*/ = 0; row < detectionResult.getBarcodeRowCount(); row++) {\n            for (var column /*int*/ = 0; column < detectionResult.getBarcodeColumnCount(); column++) {\n                var values = barcodeMatrix[row][column + 1].getValue();\n                var 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        var ambiguousIndexValues = new Array(ambiguousIndexValuesList.length);\n        for (var 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    PDF417ScanningDecoder.createDecoderResultFromAmbiguousValues = function (ecLevel, codewords, erasureArray, ambiguousIndexes, ambiguousIndexValues) {\n        var ambiguousIndexCount = new Int32Array(ambiguousIndexes.length);\n        var tries = 100;\n        while (tries-- > 0) {\n            for (var 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                var ignored = err instanceof ChecksumException;\n                if (!ignored) {\n                    throw err;\n                }\n            }\n            if (ambiguousIndexCount.length === 0) {\n                throw ChecksumException.getChecksumInstance();\n            }\n            for (var 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    PDF417ScanningDecoder.createBarcodeMatrix = function (detectionResult) {\n        var e_3, _a, e_4, _b;\n        // let barcodeMatrix: BarcodeValue[][] =\n        // new BarcodeValue[detectionResult.getBarcodeRowCount()][detectionResult.getBarcodeColumnCount() + 2];\n        var barcodeMatrix = Array.from({ length: detectionResult.getBarcodeRowCount() }, function () { return new Array(detectionResult.getBarcodeColumnCount() + 2); });\n        for (var row /*int*/ = 0; row < barcodeMatrix.length; row++) {\n            for (var column_1 /*int*/ = 0; column_1 < barcodeMatrix[row].length; column_1++) {\n                barcodeMatrix[row][column_1] = new BarcodeValue();\n            }\n        }\n        var column = 0;\n        try {\n            for (var _c = __values(detectionResult.getDetectionResultColumns()), _d = _c.next(); !_d.done; _d = _c.next()) {\n                var detectionResultColumn = _d.value /*DetectionResultColumn*/;\n                if (detectionResultColumn != null) {\n                    try {\n                        for (var _e = (e_4 = void 0, __values(detectionResultColumn.getCodewords())), _f = _e.next(); !_f.done; _f = _e.next()) {\n                            var codeword = _f.value /*Codeword*/;\n                            if (codeword != null) {\n                                var 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                    catch (e_4_1) { e_4 = { error: e_4_1 }; }\n                    finally {\n                        try {\n                            if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n                        }\n                        finally { if (e_4) throw e_4.error; }\n                    }\n                }\n                column++;\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        return barcodeMatrix;\n    };\n    PDF417ScanningDecoder.isValidBarcodeColumn = function (detectionResult, barcodeColumn) {\n        return barcodeColumn >= 0 && barcodeColumn <= detectionResult.getBarcodeColumnCount() + 1;\n    };\n    PDF417ScanningDecoder.getStartColumn = function (detectionResult, barcodeColumn, imageRow, leftToRight) {\n        var e_5, _a;\n        var offset = leftToRight ? 1 : -1;\n        var 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        var skippedColumns = 0;\n        while (PDF417ScanningDecoder.isValidBarcodeColumn(detectionResult, barcodeColumn - offset)) {\n            barcodeColumn -= offset;\n            try {\n                for (var _b = (e_5 = void 0, __values(detectionResult.getDetectionResultColumn(barcodeColumn).getCodewords())), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var previousRowCodeword = _c.value /*Codeword*/;\n                    if (previousRowCodeword != null) {\n                        return (leftToRight ? previousRowCodeword.getEndX() : previousRowCodeword.getStartX()) +\n                            offset *\n                                skippedColumns *\n                                (previousRowCodeword.getEndX() - previousRowCodeword.getStartX());\n                    }\n                }\n            }\n            catch (e_5_1) { e_5 = { error: e_5_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_5) throw e_5.error; }\n            }\n            skippedColumns++;\n        }\n        return leftToRight ? detectionResult.getBoundingBox().getMinX() : detectionResult.getBoundingBox().getMaxX();\n    };\n    PDF417ScanningDecoder.detectCodeword = function (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        var moduleBitCount = PDF417ScanningDecoder.getModuleBitCount(image, minColumn, maxColumn, leftToRight, startColumn, imageRow);\n        if (moduleBitCount == null) {\n            return null;\n        }\n        var endColumn;\n        var codewordBitCount = MathUtils.sum(moduleBitCount);\n        if (leftToRight) {\n            endColumn = startColumn + codewordBitCount;\n        }\n        else {\n            for (var i /*int*/ = 0; i < moduleBitCount.length / 2; i++) {\n                var 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        var decodedValue = PDF417CodewordDecoder.getDecodedValue(moduleBitCount);\n        var codeword = PDF417Common.getCodeword(decodedValue);\n        if (codeword === -1) {\n            return null;\n        }\n        return new Codeword(startColumn, endColumn, PDF417ScanningDecoder.getCodewordBucketNumber(decodedValue), codeword);\n    };\n    PDF417ScanningDecoder.getModuleBitCount = function (image, minColumn, maxColumn, leftToRight, startColumn, imageRow) {\n        var imageColumn = startColumn;\n        var moduleBitCount = new Int32Array(8);\n        var moduleNumber = 0;\n        var increment = leftToRight ? 1 : -1;\n        var 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    PDF417ScanningDecoder.getNumberOfECCodeWords = function (barcodeECLevel) {\n        return 2 << barcodeECLevel;\n    };\n    PDF417ScanningDecoder.adjustCodewordStartColumn = function (image, minColumn, maxColumn, leftToRight, codewordStartColumn, imageRow) {\n        var correctedStartColumn = codewordStartColumn;\n        var 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 (var 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    PDF417ScanningDecoder.checkCodewordSkew = function (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    PDF417ScanningDecoder.decodeCodewords = function (codewords, ecLevel, erasures) {\n        if (codewords.length === 0) {\n            throw FormatException.getFormatInstance();\n        }\n        var numECCodewords = 1 << (ecLevel + 1);\n        var correctedErrorsCount = PDF417ScanningDecoder.correctErrors(codewords, erasures, numECCodewords);\n        PDF417ScanningDecoder.verifyCodewordCount(codewords, numECCodewords);\n        // Decode the codewords\n        var decoderResult = DecodedBitStreamParser.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    PDF417ScanningDecoder.correctErrors = function (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    PDF417ScanningDecoder.verifyCodewordCount = function (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        var 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    PDF417ScanningDecoder.getBitCountForCodeword = function (codeword) {\n        var result = new Int32Array(8);\n        var previousValue = 0;\n        var 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    PDF417ScanningDecoder.getCodewordBucketNumber = function (codeword) {\n        if (codeword instanceof Int32Array) {\n            return this.getCodewordBucketNumber_Int32Array(codeword);\n        }\n        return this.getCodewordBucketNumber_number(codeword);\n    };\n    PDF417ScanningDecoder.getCodewordBucketNumber_number = function (codeword) {\n        return PDF417ScanningDecoder.getCodewordBucketNumber(PDF417ScanningDecoder.getBitCountForCodeword(codeword));\n    };\n    PDF417ScanningDecoder.getCodewordBucketNumber_Int32Array = function (moduleBitCount) {\n        return (moduleBitCount[0] - moduleBitCount[2] + moduleBitCount[4] - moduleBitCount[6] + 9) % 9;\n    };\n    PDF417ScanningDecoder.toString = function (barcodeMatrix) {\n        var formatter = new Formatter();\n        // try (let formatter = new Formatter()) {\n        for (var row /*int*/ = 0; row < barcodeMatrix.length; row++) {\n            formatter.format('Row %2d: ', row);\n            for (var column /*int*/ = 0; column < barcodeMatrix[row].length; column++) {\n                var 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    /*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    return PDF417ScanningDecoder;\n}());\nexport default PDF417ScanningDecoder;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.pdf417;\n// import com.google.zxing.BarcodeFormat;\nimport BarcodeFormat from '../BarcodeFormat';\n// import com.google.zxing.ChecksumException;\nimport ChecksumException from '../ChecksumException';\n// import com.google.zxing.FormatException;\nimport FormatException from '../FormatException';\n// import com.google.zxing.NotFoundException;\nimport NotFoundException from '../NotFoundException';\n// import com.google.zxing.Result;\nimport Result from '../Result';\n// import com.google.zxing.common.DecoderResult;\n// import com.google.zxing.multi.MultipleBarcodeReader;\n// import com.google.zxing.pdf417.decoder.PDF417ScanningDecoder;\n// import com.google.zxing.pdf417.detector.Detector;\n// import com.google.zxing.pdf417.detector.PDF417DetectorResult;\nimport PDF417Common from './PDF417Common';\nimport Integer from '../util/Integer';\nimport ResultMetadataType from '../ResultMetadataType';\nimport Detector from './detector/Detector';\nimport PDF417ScanningDecoder from './decoder/PDF417ScanningDecoder';\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 */\nvar PDF417Reader = /** @class */ (function () {\n    function PDF417Reader() {\n    }\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    PDF417Reader.prototype.decode = function (image, hints) {\n        if (hints === void 0) { hints = null; }\n        var 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    PDF417Reader.prototype.decodeMultiple = function (image, hints) {\n        if (hints === void 0) { 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    PDF417Reader.decode = function (image, hints, multiple) {\n        var e_1, _a;\n        var results = new Array();\n        var detectorResult = Detector.detectMultiple(image, hints, multiple);\n        try {\n            for (var _b = __values(detectorResult.getPoints()), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var points = _c.value;\n                var decoderResult = PDF417ScanningDecoder.decode(detectorResult.getBits(), points[4], points[5], points[6], points[7], PDF417Reader.getMinCodewordWidth(points), PDF417Reader.getMaxCodewordWidth(points));\n                var result = new Result(decoderResult.getText(), decoderResult.getRawBytes(), undefined, points, BarcodeFormat.PDF_417);\n                result.putMetadata(ResultMetadataType.ERROR_CORRECTION_LEVEL, decoderResult.getECLevel());\n                var pdf417ResultMetadata = decoderResult.getOther();\n                if (pdf417ResultMetadata != null) {\n                    result.putMetadata(ResultMetadataType.PDF417_EXTRA_METADATA, pdf417ResultMetadata);\n                }\n                results.push(result);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return results.map(function (x) { return x; });\n    };\n    PDF417Reader.getMaxWidth = function (p1, p2) {\n        if (p1 == null || p2 == null) {\n            return 0;\n        }\n        return Math.trunc(Math.abs(p1.getX() - p2.getX()));\n    };\n    PDF417Reader.getMinWidth = function (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    PDF417Reader.getMaxCodewordWidth = function (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    PDF417Reader.getMinCodewordWidth = function (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    PDF417Reader.prototype.reset = function () {\n        // nothing needs to be reset\n    };\n    return PDF417Reader;\n}());\nexport default PDF417Reader;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar ReaderException = /** @class */ (function (_super) {\n    __extends(ReaderException, _super);\n    function ReaderException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ReaderException.kind = 'ReaderException';\n    return ReaderException;\n}(Exception));\nexport default ReaderException;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport DecodeHintType from './DecodeHintType';\nimport BarcodeFormat from './BarcodeFormat';\nimport QRCodeReader from './qrcode/QRCodeReader';\nimport AztecReader from './aztec/AztecReader';\nimport MultiFormatOneDReader from './oned/MultiFormatOneDReader';\nimport DataMatrixReader from './datamatrix/DataMatrixReader';\nimport NotFoundException from './NotFoundException';\nimport PDF417Reader from './pdf417/PDF417Reader';\nimport ReaderException from './ReaderException';\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 */\nvar MultiFormatReader = /** @class */ (function () {\n    function MultiFormatReader() {\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    MultiFormatReader.prototype.decode = function (image, hints) {\n        this.setHints(hints);\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    MultiFormatReader.prototype.decodeWithState = function (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    MultiFormatReader.prototype.setHints = function (hints) {\n        this.hints = hints;\n        var tryHarder = hints !== null && hints !== undefined && undefined !== hints.get(DecodeHintType.TRY_HARDER);\n        /*@SuppressWarnings(\"unchecked\")*/\n        var formats = hints === null || hints === undefined ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS);\n        var readers = new Array();\n        if (formats !== null && formats !== undefined) {\n            var addOneDReader = formats.some(function (f) {\n                return f === BarcodeFormat.UPC_A ||\n                    f === BarcodeFormat.UPC_E ||\n                    f === BarcodeFormat.EAN_13 ||\n                    f === BarcodeFormat.EAN_8 ||\n                    f === BarcodeFormat.CODABAR ||\n                    f === BarcodeFormat.CODE_39 ||\n                    f === BarcodeFormat.CODE_93 ||\n                    f === BarcodeFormat.CODE_128 ||\n                    f === BarcodeFormat.ITF ||\n                    f === BarcodeFormat.RSS_14 ||\n                    f === BarcodeFormat.RSS_EXPANDED;\n            });\n            // Put 1D readers upfront in \"normal\" mode\n            // TYPESCRIPTPORT: TODO: uncomment below as they are ported\n            if (addOneDReader && !tryHarder) {\n                readers.push(new MultiFormatOneDReader(hints));\n            }\n            if (formats.includes(BarcodeFormat.QR_CODE)) {\n                readers.push(new QRCodeReader());\n            }\n            if (formats.includes(BarcodeFormat.DATA_MATRIX)) {\n                readers.push(new DataMatrixReader());\n            }\n            if (formats.includes(BarcodeFormat.AZTEC)) {\n                readers.push(new AztecReader());\n            }\n            if (formats.includes(BarcodeFormat.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));\n            }\n        }\n        if (readers.length === 0) {\n            if (!tryHarder) {\n                readers.push(new MultiFormatOneDReader(hints));\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));\n            }\n        }\n        this.readers = readers; // .toArray(new Reader[readers.size()])\n    };\n    /*@Override*/\n    MultiFormatReader.prototype.reset = function () {\n        var e_1, _a;\n        if (this.readers !== null) {\n            try {\n                for (var _b = __values(this.readers), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var reader = _c.value;\n                    reader.reset();\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }\n    };\n    /**\n     * @throws NotFoundException\n     */\n    MultiFormatReader.prototype.decodeInternal = function (image) {\n        var e_2, _a;\n        if (this.readers === null) {\n            throw new ReaderException('No readers where selected, nothing can be read.');\n        }\n        try {\n            for (var _b = __values(this.readers), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var reader = _c.value;\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        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        throw new NotFoundException('No MultiFormat Readers were able to detect the code.');\n    };\n    return MultiFormatReader;\n}());\nexport default MultiFormatReader;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport MultiFormatReader from '../core/MultiFormatReader';\nvar BrowserMultiFormatReader = /** @class */ (function (_super) {\n    __extends(BrowserMultiFormatReader, _super);\n    function BrowserMultiFormatReader(hints, timeBetweenScansMillis) {\n        if (hints === void 0) { hints = null; }\n        if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n        var _this = this;\n        var reader = new MultiFormatReader();\n        reader.setHints(hints);\n        _this = _super.call(this, reader, timeBetweenScansMillis) || this;\n        return _this;\n    }\n    /**\n     * Overwrite decodeBitmap to call decodeWithState, which will pay\n     * attention to the hints set in the constructor function\n     */\n    BrowserMultiFormatReader.prototype.decodeBitmap = function (binaryBitmap) {\n        return this.reader.decodeWithState(binaryBitmap);\n    };\n    return BrowserMultiFormatReader;\n}(BrowserCodeReader));\nexport { BrowserMultiFormatReader };\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport PDF417Reader from '../core/pdf417/PDF417Reader';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * QR Code reader to use from browser.\n */\nvar BrowserPDF417Reader = /** @class */ (function (_super) {\n    __extends(BrowserPDF417Reader, _super);\n    /**\n     * Creates an instance of BrowserPDF417Reader.\n     * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n     */\n    function BrowserPDF417Reader(timeBetweenScansMillis) {\n        if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n        return _super.call(this, new PDF417Reader(), timeBetweenScansMillis) || this;\n    }\n    return BrowserPDF417Reader;\n}(BrowserCodeReader));\nexport { BrowserPDF417Reader };\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport { BrowserCodeReader } from './BrowserCodeReader';\nimport QRCodeReader from '../core/qrcode/QRCodeReader';\n/**\n * @deprecated Moving to @zxing/browser\n *\n * QR Code reader to use from browser.\n */\nvar BrowserQRCodeReader = /** @class */ (function (_super) {\n    __extends(BrowserQRCodeReader, _super);\n    /**\n     * Creates an instance of BrowserQRCodeReader.\n     * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries\n     */\n    function BrowserQRCodeReader(timeBetweenScansMillis) {\n        if (timeBetweenScansMillis === void 0) { timeBetweenScansMillis = 500; }\n        return _super.call(this, new QRCodeReader(), timeBetweenScansMillis) || this;\n    }\n    return BrowserQRCodeReader;\n}(BrowserCodeReader));\nexport { BrowserQRCodeReader };\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 */\nvar 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 whether to use compact mode for Data Matrix (type {@link Boolean}, or \"true\" or \"false\"\n     * {@link String } value).\n     * The compact encoding mode also supports the encoding of characters that are not in the ISO-8859-1\n     * character set via ECIs.\n     * Please note that in that case, the most compact character encoding is chosen for characters in\n     * the input that are not in the ISO-8859-1 character set. Based on experience, some scanners do not\n     * support encodings like cp-1256 (Arabic). In such cases the encoding can be forced to UTF-8 by\n     * means of the {@link #CHARACTER_SET} encoding hint.\n     * Compact encoding also provides GS1-FNC1 support when {@link #GS1_FORMAT} is selected. In this case\n     * group-separator character (ASCII 29 decimal) can be used to encode the positions of FNC1 codewords\n     * for the purpose of delimiting AIs.\n     * This option and {@link #FORCE_C40} are mutually exclusive.\n     */\n    EncodeHintType[EncodeHintType[\"DATA_MATRIX_COMPACT\"] = 3] = \"DATA_MATRIX_COMPACT\";\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\"] = 4] = \"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\"] = 5] = \"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\"] = 6] = \"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\"] = 7] = \"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\"] = 8] = \"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\"] = 9] = \"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\"] = 10] = \"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\"] = 11] = \"QR_VERSION\";\n    /**\n     * Specifies whether the data should be encoded to the GS1 standard (type {@link Boolean}, or \"true\" or \"false\"\n     * {@link String } value).\n     */\n    EncodeHintType[EncodeHintType[\"GS1_FORMAT\"] = 12] = \"GS1_FORMAT\";\n    /**\n     * Forces C40 encoding for data-matrix (type {@link Boolean}, or \"true\" or \"false\") {@link String } value). This\n     * option and {@link #DATA_MATRIX_COMPACT} are mutually exclusive.\n     */\n    EncodeHintType[EncodeHintType[\"FORCE_C40\"] = 13] = \"FORCE_C40\";\n})(EncodeHintType || (EncodeHintType = {}));\nexport default EncodeHintType;\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 */\nimport GenericGFPoly from './GenericGFPoly';\nimport System from '../../util/System';\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n * <p>Implements Reed-Solomon encoding, as the name implies.</p>\n *\n * @author Sean Owen\n * @author William Rucklidge\n */\nvar ReedSolomonEncoder = /** @class */ (function () {\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    function ReedSolomonEncoder(field) {\n        this.field = field;\n        this.cachedGenerators = [];\n        this.cachedGenerators.push(new GenericGFPoly(field, Int32Array.from([1])));\n    }\n    ReedSolomonEncoder.prototype.buildGenerator = function (degree /*int*/) {\n        var cachedGenerators = this.cachedGenerators;\n        if (degree >= cachedGenerators.length) {\n            var lastGenerator = cachedGenerators[cachedGenerators.length - 1];\n            var field = this.field;\n            for (var d = cachedGenerators.length; d <= degree; d++) {\n                var 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    ReedSolomonEncoder.prototype.encode = function (toEncode, ecBytes /*int*/) {\n        if (ecBytes === 0) {\n            throw new IllegalArgumentException('No error correction bytes');\n        }\n        var dataBytes = toEncode.length - ecBytes;\n        if (dataBytes <= 0) {\n            throw new IllegalArgumentException('No data bytes provided');\n        }\n        var generator = this.buildGenerator(ecBytes);\n        var infoCoefficients = new Int32Array(dataBytes);\n        System.arraycopy(toEncode, 0, infoCoefficients, 0, dataBytes);\n        var info = new GenericGFPoly(this.field, infoCoefficients);\n        info = info.multiplyByMonomial(ecBytes, 1);\n        var remainder = info.divide(generator)[1];\n        var coefficients = remainder.getCoefficients();\n        var numZeroCoefficients = ecBytes - coefficients.length;\n        for (var i = 0; i < numZeroCoefficients; i++) {\n            toEncode[dataBytes + i] = 0;\n        }\n        System.arraycopy(coefficients, 0, toEncode, dataBytes + numZeroCoefficients, coefficients.length);\n    };\n    return ReedSolomonEncoder;\n}());\nexport default ReedSolomonEncoder;\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 */\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n * @author Satoru Takabayashi\n * @author Daniel Switkin\n * @author Sean Owen\n */\nvar MaskUtil = /** @class */ (function () {\n    function MaskUtil() {\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    MaskUtil.applyMaskPenaltyRule1 = function (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    MaskUtil.applyMaskPenaltyRule2 = function (matrix) {\n        var penalty = 0;\n        var array = matrix.getArray();\n        var width = matrix.getWidth();\n        var height = matrix.getHeight();\n        for (var y = 0; y < height - 1; y++) {\n            var arrayY = array[y];\n            for (var x = 0; x < width - 1; x++) {\n                var 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    MaskUtil.applyMaskPenaltyRule3 = function (matrix) {\n        var numPenalties = 0;\n        var array = matrix.getArray();\n        var width = matrix.getWidth();\n        var height = matrix.getHeight();\n        for (var y = 0; y < height; y++) {\n            for (var x = 0; x < width; x++) {\n                var 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    MaskUtil.isWhiteHorizontal = function (rowArray, from /*int*/, to /*int*/) {\n        from = Math.max(from, 0);\n        to = Math.min(to, rowArray.length);\n        for (var i = from; i < to; i++) {\n            if (rowArray[i] === 1) {\n                return false;\n            }\n        }\n        return true;\n    };\n    MaskUtil.isWhiteVertical = function (array, col /*int*/, from /*int*/, to /*int*/) {\n        from = Math.max(from, 0);\n        to = Math.min(to, array.length);\n        for (var 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    MaskUtil.applyMaskPenaltyRule4 = function (matrix) {\n        var numDarkCells = 0;\n        var array = matrix.getArray();\n        var width = matrix.getWidth();\n        var height = matrix.getHeight();\n        for (var y = 0; y < height; y++) {\n            var arrayY = array[y];\n            for (var x = 0; x < width; x++) {\n                if (arrayY[x] === 1) {\n                    numDarkCells++;\n                }\n            }\n        }\n        var numTotalCells = matrix.getHeight() * matrix.getWidth();\n        var 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    MaskUtil.getDataMaskBit = function (maskPattern /*int*/, x /*int*/, y /*int*/) {\n        var intermediate; /*int*/\n        var 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    MaskUtil.applyMaskPenaltyRule1Internal = function (matrix, isHorizontal) {\n        var penalty = 0;\n        var iLimit = isHorizontal ? matrix.getHeight() : matrix.getWidth();\n        var jLimit = isHorizontal ? matrix.getWidth() : matrix.getHeight();\n        var array = matrix.getArray();\n        for (var i = 0; i < iLimit; i++) {\n            var numSameBitCells = 0;\n            var prevBit = -1;\n            for (var j = 0; j < jLimit; j++) {\n                var 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    // 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    return MaskUtil;\n}());\nexport default MaskUtil;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.encoder {*/\n/*import java.util.Arrays;*/\nimport Arrays from '../../util/Arrays';\nimport StringBuilder from '../../util/StringBuilder';\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 */\nvar ByteMatrix = /** @class */ (function () {\n    function ByteMatrix(width /*int*/, height /*int*/) {\n        this.width = width;\n        this.height = height;\n        var bytes = new Array(height); // [height][width]\n        for (var i = 0; i !== height; i++) {\n            bytes[i] = new Uint8Array(width);\n        }\n        this.bytes = bytes;\n    }\n    ByteMatrix.prototype.getHeight = function () {\n        return this.height;\n    };\n    ByteMatrix.prototype.getWidth = function () {\n        return this.width;\n    };\n    ByteMatrix.prototype.get = function (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    ByteMatrix.prototype.getArray = function () {\n        return this.bytes;\n    };\n    // TYPESCRIPTPORT: preffer to let two methods instead of override to avoid type comparison inside\n    ByteMatrix.prototype.setNumber = function (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    ByteMatrix.prototype.setBoolean = function (x /*int*/, y /*int*/, value) {\n        this.bytes[y][x] = /*(byte) */ (value ? 1 : 0);\n    };\n    ByteMatrix.prototype.clear = function (value /*byte*/) {\n        var e_1, _a;\n        try {\n            for (var _b = __values(this.bytes), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var aByte = _c.value;\n                Arrays.fill(aByte, value);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    ByteMatrix.prototype.equals = function (o) {\n        if (!(o instanceof ByteMatrix)) {\n            return false;\n        }\n        var other = o;\n        if (this.width !== other.width) {\n            return false;\n        }\n        if (this.height !== other.height) {\n            return false;\n        }\n        for (var y = 0, height = this.height; y < height; ++y) {\n            var bytesY = this.bytes[y];\n            var otherBytesY = other.bytes[y];\n            for (var 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    ByteMatrix.prototype.toString = function () {\n        var result = new StringBuilder(); // (2 * width * height + 2)\n        for (var y = 0, height = this.height; y < height; ++y) {\n            var bytesY = this.bytes[y];\n            for (var 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    return ByteMatrix;\n}());\nexport default ByteMatrix;\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 */\nimport StringBuilder from '../../util/StringBuilder';\n/**\n * @author satorux@google.com (Satoru Takabayashi) - creator\n * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n */\nvar QRCode = /** @class */ (function () {\n    function QRCode() {\n        this.maskPattern = -1;\n    }\n    QRCode.prototype.getMode = function () {\n        return this.mode;\n    };\n    QRCode.prototype.getECLevel = function () {\n        return this.ecLevel;\n    };\n    QRCode.prototype.getVersion = function () {\n        return this.version;\n    };\n    QRCode.prototype.getMaskPattern = function () {\n        return this.maskPattern;\n    };\n    QRCode.prototype.getMatrix = function () {\n        return this.matrix;\n    };\n    /*@Override*/\n    QRCode.prototype.toString = function () {\n        var 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    QRCode.prototype.setMode = function (value) {\n        this.mode = value;\n    };\n    QRCode.prototype.setECLevel = function (value) {\n        this.ecLevel = value;\n    };\n    QRCode.prototype.setVersion = function (version) {\n        this.version = version;\n    };\n    QRCode.prototype.setMaskPattern = function (value /*int*/) {\n        this.maskPattern = value;\n    };\n    QRCode.prototype.setMatrix = function (value) {\n        this.matrix = value;\n    };\n    // Check if \"mask_pattern\" is valid.\n    QRCode.isValidMaskPattern = function (maskPattern /*int*/) {\n        return maskPattern >= 0 && maskPattern < QRCode.NUM_MASK_PATTERNS;\n    };\n    QRCode.NUM_MASK_PATTERNS = 8;\n    return QRCode;\n}());\nexport default QRCode;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Exception from './Exception';\n/**\n * Custom Error class of type Exception.\n */\nvar WriterException = /** @class */ (function (_super) {\n    __extends(WriterException, _super);\n    function WriterException() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    WriterException.kind = 'WriterException';\n    return WriterException;\n}(Exception));\nexport default WriterException;\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/*namespace com.google.zxing.qrcode.encoder {*/\nimport BitArray from '../../common/BitArray';\nimport Integer from '../../util/Integer';\nimport QRCode from './QRCode';\nimport MaskUtil from './MaskUtil';\nimport WriterException from '../../WriterException';\nimport IllegalArgumentException from '../../IllegalArgumentException';\n/**\n * @author satorux@google.com (Satoru Takabayashi) - creator\n * @author dswitkin@google.com (Daniel Switkin) - ported from C++\n */\nvar MatrixUtil = /** @class */ (function () {\n    function MatrixUtil() {\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    MatrixUtil.clearMatrix = function (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    MatrixUtil.buildMatrix = function (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    MatrixUtil.embedBasicPatterns = function (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    MatrixUtil.embedTypeInfo = function (ecLevel, maskPattern /*int*/, matrix) {\n        var typeInfoBits = new BitArray();\n        MatrixUtil.makeTypeInfoBits(ecLevel, maskPattern, typeInfoBits);\n        for (var 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            var 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            var coordinates = MatrixUtil.TYPE_INFO_COORDINATES[i];\n            var x1 = coordinates[0];\n            var y1 = coordinates[1];\n            matrix.setBoolean(x1, y1, bit);\n            if (i < 8) {\n                // Right top corner.\n                var x2 = matrix.getWidth() - i - 1;\n                var y2 = 8;\n                matrix.setBoolean(x2, y2, bit);\n            }\n            else {\n                // Left bottom corner.\n                var x2 = 8;\n                var 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    MatrixUtil.maybeEmbedVersionInfo = function (version, matrix) {\n        if (version.getVersionNumber() < 7) { // Version info is necessary if version >= 7.\n            return; // Don't need version info.\n        }\n        var versionInfoBits = new BitArray();\n        MatrixUtil.makeVersionInfoBits(version, versionInfoBits);\n        var bitIndex = 6 * 3 - 1; // It will decrease from 17 to 0.\n        for (var i = 0; i < 6; ++i) {\n            for (var j = 0; j < 3; ++j) {\n                // Place bits in LSB (least significant bit) to MSB order.\n                var 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    MatrixUtil.embedDataBits = function (dataBits, maskPattern /*int*/, matrix) {\n        var bitIndex = 0;\n        var direction = -1;\n        // Start from the right bottom cell.\n        var x = matrix.getWidth() - 1;\n        var 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 (var i = 0; i < 2; ++i) {\n                    var xx = x - i;\n                    // Skip the cell if it's not empty.\n                    if (!MatrixUtil.isEmpty(matrix.get(xx, y))) {\n                        continue;\n                    }\n                    var bit = void 0;\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    MatrixUtil.findMSBSet = function (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    MatrixUtil.calculateBCHCode = function (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        var 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    MatrixUtil.makeTypeInfoBits = function (ecLevel, maskPattern /*int*/, bits) {\n        if (!QRCode.isValidMaskPattern(maskPattern)) {\n            throw new WriterException('Invalid mask pattern');\n        }\n        var typeInfo = (ecLevel.getBits() << 3) | maskPattern;\n        bits.appendBits(typeInfo, 5);\n        var bchCode = MatrixUtil.calculateBCHCode(typeInfo, MatrixUtil.TYPE_INFO_POLY);\n        bits.appendBits(bchCode, 10);\n        var 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    MatrixUtil.makeVersionInfoBits = function (version, bits) {\n        bits.appendBits(version.getVersionNumber(), 6);\n        var 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    MatrixUtil.isEmpty = function (value /*int*/) {\n        return value === 255; // -1\n    };\n    MatrixUtil.embedTimingPatterns = function (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 (var i = 8; i < matrix.getWidth() - 8; ++i) {\n            var 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    MatrixUtil.embedDarkDotAtLeftBottomCorner = function (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    MatrixUtil.embedHorizontalSeparationPattern = function (xStart /*int*/, yStart /*int*/, matrix) {\n        for (var 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    MatrixUtil.embedVerticalSeparationPattern = function (xStart /*int*/, yStart /*int*/, matrix) {\n        for (var 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    MatrixUtil.embedPositionAdjustmentPattern = function (xStart /*int*/, yStart /*int*/, matrix) {\n        for (var y = 0; y < 5; ++y) {\n            var patternY = MatrixUtil.POSITION_ADJUSTMENT_PATTERN[y];\n            for (var x = 0; x < 5; ++x) {\n                matrix.setNumber(xStart + x, yStart + y, patternY[x]);\n            }\n        }\n    };\n    MatrixUtil.embedPositionDetectionPattern = function (xStart /*int*/, yStart /*int*/, matrix) {\n        for (var y = 0; y < 7; ++y) {\n            var patternY = MatrixUtil.POSITION_DETECTION_PATTERN[y];\n            for (var 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    MatrixUtil.embedPositionDetectionPatternsAndSeparators = function (matrix) {\n        // Embed three big squares at corners.\n        var 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        var 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        var 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    MatrixUtil.maybeEmbedPositionAdjustmentPatterns = function (version, matrix) {\n        if (version.getVersionNumber() < 2) { // The patterns appear if version >= 2\n            return;\n        }\n        var index = version.getVersionNumber() - 1;\n        var coordinates = MatrixUtil.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[index];\n        for (var i = 0, length_1 = coordinates.length; i !== length_1; i++) {\n            var y = coordinates[i];\n            if (y >= 0) {\n                for (var j = 0; j !== length_1; j++) {\n                    var 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    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    return MatrixUtil;\n}());\nexport default MatrixUtil;\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/*namespace com.google.zxing.qrcode.encoder {*/\nvar BlockPair = /** @class */ (function () {\n    function BlockPair(dataBytes, errorCorrectionBytes) {\n        this.dataBytes = dataBytes;\n        this.errorCorrectionBytes = errorCorrectionBytes;\n    }\n    BlockPair.prototype.getDataBytes = function () {\n        return this.dataBytes;\n    };\n    BlockPair.prototype.getErrorCorrectionBytes = function () {\n        return this.errorCorrectionBytes;\n    };\n    return BlockPair;\n}());\nexport default BlockPair;\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/*namespace com.google.zxing.qrcode.encoder {*/\nimport EncodeHintType from '../../EncodeHintType';\nimport BitArray from '../../common/BitArray';\nimport CharacterSetECI from '../../common/CharacterSetECI';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport ReedSolomonEncoder from '../../common/reedsolomon/ReedSolomonEncoder';\nimport Mode from '../decoder/Mode';\nimport Version from '../decoder/Version';\nimport MaskUtil from './MaskUtil';\nimport ByteMatrix from './ByteMatrix';\nimport QRCode from './QRCode';\nimport MatrixUtil from './MatrixUtil';\nimport StringEncoding from '../../util/StringEncoding';\nimport BlockPair from './BlockPair';\nimport WriterException from '../../WriterException';\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 */\nvar Encoder = /** @class */ (function () {\n    // TYPESCRIPTPORT: changed to UTF8, the default for js\n    function Encoder() {\n    }\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    Encoder.calculateMaskPenalty = function (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    Encoder.encode = function (content, ecLevel, hints) {\n        if (hints === void 0) { hints = null; }\n        // Determine what character encoding has been specified by the caller, if any\n        var encoding = Encoder.DEFAULT_BYTE_MODE_ENCODING;\n        var hasEncodingHint = hints !== null && undefined !== hints.get(EncodeHintType.CHARACTER_SET);\n        if (hasEncodingHint) {\n            encoding = hints.get(EncodeHintType.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        var 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        var headerBits = new BitArray();\n        // Append ECI segment if applicable\n        if (mode === Mode.BYTE && (hasEncodingHint || Encoder.DEFAULT_BYTE_MODE_ENCODING !== encoding)) {\n            var 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        var dataBits = new BitArray();\n        this.appendBytes(content, mode, dataBits, encoding);\n        var version;\n        if (hints !== null && undefined !== hints.get(EncodeHintType.QR_VERSION)) {\n            var versionNumber = Number.parseInt(hints.get(EncodeHintType.QR_VERSION).toString(), 10);\n            version = Version.getVersionForNumber(versionNumber);\n            var 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        var headerAndDataBits = new BitArray();\n        headerAndDataBits.appendBitArray(headerBits);\n        // Find \"length\" of main segment and write it\n        var numLetters = mode === Mode.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        var ecBlocks = version.getECBlocksForLevel(ecLevel);\n        var numDataBytes = version.getTotalCodewords() - ecBlocks.getTotalECCodewords();\n        // Terminate the bits properly.\n        this.terminateBits(numDataBytes, headerAndDataBits);\n        // Interleave data bits with error correction code.\n        var finalBits = this.interleaveWithECBytes(headerAndDataBits, version.getTotalCodewords(), numDataBytes, ecBlocks.getNumBlocks());\n        var 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        var dimension = version.getDimensionForVersion();\n        var matrix = new ByteMatrix(dimension, dimension);\n        var 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    Encoder.recommendVersion = function (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        var provisionalBitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, Version.getVersionForNumber(1));\n        var 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        var bitsNeeded = this.calculateBitsNeeded(mode, headerBits, dataBits, provisionalVersion);\n        return this.chooseVersion(bitsNeeded, ecLevel);\n    };\n    Encoder.calculateBitsNeeded = function (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    Encoder.getAlphanumericCode = function (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    Encoder.chooseMode = function (content, encoding) {\n        if (encoding === void 0) { 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.KANJI;\n        }\n        var hasNumeric = false;\n        var hasAlphanumeric = false;\n        for (var i = 0, length_1 = content.length; i < length_1; ++i) {\n            var 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.BYTE;\n            }\n        }\n        if (hasAlphanumeric) {\n            return Mode.ALPHANUMERIC;\n        }\n        if (hasNumeric) {\n            return Mode.NUMERIC;\n        }\n        return Mode.BYTE;\n    };\n    Encoder.isOnlyDoubleByteKanji = function (content) {\n        var bytes;\n        try {\n            bytes = StringEncoding.encode(content, CharacterSetECI.SJIS); // content.getBytes(\"Shift_JIS\"))\n        }\n        catch (ignored /*: UnsupportedEncodingException*/) {\n            return false;\n        }\n        var length = bytes.length;\n        if (length % 2 !== 0) {\n            return false;\n        }\n        for (var i = 0; i < length; i += 2) {\n            var byte1 = bytes[i] & 0xFF;\n            if ((byte1 < 0x81 || byte1 > 0x9F) && (byte1 < 0xE0 || byte1 > 0xEB)) {\n                return false;\n            }\n        }\n        return true;\n    };\n    Encoder.chooseMaskPattern = function (bits, ecLevel, version, matrix) {\n        var minPenalty = Number.MAX_SAFE_INTEGER; // Lower penalty is better.\n        var bestMaskPattern = -1;\n        // We try all mask patterns to choose the best one.\n        for (var maskPattern = 0; maskPattern < QRCode.NUM_MASK_PATTERNS; maskPattern++) {\n            MatrixUtil.buildMatrix(bits, ecLevel, version, maskPattern, matrix);\n            var penalty = this.calculateMaskPenalty(matrix);\n            if (penalty < minPenalty) {\n                minPenalty = penalty;\n                bestMaskPattern = maskPattern;\n            }\n        }\n        return bestMaskPattern;\n    };\n    Encoder.chooseVersion = function (numInputBits /*int*/, ecLevel) {\n        for (var versionNum = 1; versionNum <= 40; versionNum++) {\n            var version = Version.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    Encoder.willFit = function (numInputBits /*int*/, version, ecLevel) {\n        // In the following comments, we use numbers of Version 7-H.\n        // numBytes = 196\n        var numBytes = version.getTotalCodewords();\n        // getNumECBytes = 130\n        var ecBlocks = version.getECBlocksForLevel(ecLevel);\n        var numEcBytes = ecBlocks.getTotalECCodewords();\n        // getNumDataBytes = 196 - 130 = 66\n        var numDataBytes = numBytes - numEcBytes;\n        var 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    Encoder.terminateBits = function (numDataBytes /*int*/, bits) {\n        var 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 (var 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        var numBitsInLastByte = bits.getSize() & 0x07;\n        if (numBitsInLastByte > 0) {\n            for (var 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        var numPaddingBytes = numDataBytes - bits.getSizeInBytes();\n        for (var 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    Encoder.getNumDataBytesAndNumECBytesForBlockID = function (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        var numRsBlocksInGroup2 = numTotalBytes % numRSBlocks;\n        // numRsBlocksInGroup1 = 5 - 1 = 4\n        var numRsBlocksInGroup1 = numRSBlocks - numRsBlocksInGroup2;\n        // numTotalBytesInGroup1 = 196 / 5 = 39\n        var numTotalBytesInGroup1 = Math.floor(numTotalBytes / numRSBlocks);\n        // numTotalBytesInGroup2 = 39 + 1 = 40\n        var numTotalBytesInGroup2 = numTotalBytesInGroup1 + 1;\n        // numDataBytesInGroup1 = 66 / 5 = 13\n        var numDataBytesInGroup1 = Math.floor(numDataBytes / numRSBlocks);\n        // numDataBytesInGroup2 = 13 + 1 = 14\n        var numDataBytesInGroup2 = numDataBytesInGroup1 + 1;\n        // numEcBytesInGroup1 = 39 - 13 = 26\n        var numEcBytesInGroup1 = numTotalBytesInGroup1 - numDataBytesInGroup1;\n        // numEcBytesInGroup2 = 40 - 14 = 26\n        var 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    Encoder.interleaveWithECBytes = function (bits, numTotalBytes /*int*/, numDataBytes /*int*/, numRSBlocks /*int*/) {\n        var e_1, _a, e_2, _b;\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        var dataBytesOffset = 0;\n        var maxNumDataBytes = 0;\n        var maxNumEcBytes = 0;\n        // Since, we know the number of reedsolmon blocks, we can initialize the vector with the number.\n        var blocks = new Array(); // new Array<BlockPair>(numRSBlocks)\n        for (var i = 0; i < numRSBlocks; ++i) {\n            var numDataBytesInBlock = new Int32Array(1);\n            var numEcBytesInBlock = new Int32Array(1);\n            Encoder.getNumDataBytesAndNumECBytesForBlockID(numTotalBytes, numDataBytes, numRSBlocks, i, numDataBytesInBlock, numEcBytesInBlock);\n            var size = numDataBytesInBlock[0];\n            var dataBytes = new Uint8Array(size);\n            bits.toBytes(8 * dataBytesOffset, dataBytes, 0, size);\n            var 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        var result = new BitArray();\n        // First, place data blocks.\n        for (var i = 0; i < maxNumDataBytes; ++i) {\n            try {\n                for (var blocks_1 = (e_1 = void 0, __values(blocks)), blocks_1_1 = blocks_1.next(); !blocks_1_1.done; blocks_1_1 = blocks_1.next()) {\n                    var block = blocks_1_1.value;\n                    var dataBytes = block.getDataBytes();\n                    if (i < dataBytes.length) {\n                        result.appendBits(dataBytes[i], 8);\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (blocks_1_1 && !blocks_1_1.done && (_a = blocks_1.return)) _a.call(blocks_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }\n        // Then, place error correction blocks.\n        for (var i = 0; i < maxNumEcBytes; ++i) {\n            try {\n                for (var blocks_2 = (e_2 = void 0, __values(blocks)), blocks_2_1 = blocks_2.next(); !blocks_2_1.done; blocks_2_1 = blocks_2.next()) {\n                    var block = blocks_2_1.value;\n                    var ecBytes = block.getErrorCorrectionBytes();\n                    if (i < ecBytes.length) {\n                        result.appendBits(ecBytes[i], 8);\n                    }\n                }\n            }\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n            finally {\n                try {\n                    if (blocks_2_1 && !blocks_2_1.done && (_b = blocks_2.return)) _b.call(blocks_2);\n                }\n                finally { if (e_2) throw e_2.error; }\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    Encoder.generateECBytes = function (dataBytes, numEcBytesInBlock /*int*/) {\n        var numDataBytes = dataBytes.length;\n        var toEncode = new Int32Array(numDataBytes + numEcBytesInBlock); // int[numDataBytes + numEcBytesInBlock]\n        for (var i = 0; i < numDataBytes; i++) {\n            toEncode[i] = dataBytes[i] & 0xFF;\n        }\n        new ReedSolomonEncoder(GenericGF.QR_CODE_FIELD_256).encode(toEncode, numEcBytesInBlock);\n        var ecBytes = new Uint8Array(numEcBytesInBlock);\n        for (var 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    Encoder.appendModeInfo = function (mode, bits) {\n        bits.appendBits(mode.getBits(), 4);\n    };\n    /**\n     * Append length info. On success, store the result in \"bits\".\n     */\n    Encoder.appendLengthInfo = function (numLetters /*int*/, version, mode, bits) {\n        var 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    Encoder.appendBytes = function (content, mode, bits, encoding) {\n        switch (mode) {\n            case Mode.NUMERIC:\n                Encoder.appendNumericBytes(content, bits);\n                break;\n            case Mode.ALPHANUMERIC:\n                Encoder.appendAlphanumericBytes(content, bits);\n                break;\n            case Mode.BYTE:\n                Encoder.append8BitBytes(content, bits, encoding);\n                break;\n            case Mode.KANJI:\n                Encoder.appendKanjiBytes(content, bits);\n                break;\n            default:\n                throw new WriterException('Invalid mode: ' + mode);\n        }\n    };\n    Encoder.getDigit = function (singleCharacter) {\n        return singleCharacter.charCodeAt(0) - 48;\n    };\n    Encoder.isDigit = function (singleCharacter) {\n        var cn = Encoder.getDigit(singleCharacter);\n        return cn >= 0 && cn <= 9;\n    };\n    Encoder.appendNumericBytes = function (content, bits) {\n        var length = content.length;\n        var i = 0;\n        while (i < length) {\n            var num1 = Encoder.getDigit(content.charAt(i));\n            if (i + 2 < length) {\n                // Encode three numeric letters in ten bits.\n                var num2 = Encoder.getDigit(content.charAt(i + 1));\n                var 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                var 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    Encoder.appendAlphanumericBytes = function (content, bits) {\n        var length = content.length;\n        var i = 0;\n        while (i < length) {\n            var code1 = Encoder.getAlphanumericCode(content.charCodeAt(i));\n            if (code1 === -1) {\n                throw new WriterException();\n            }\n            if (i + 1 < length) {\n                var 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    Encoder.append8BitBytes = function (content, bits, encoding) {\n        var bytes;\n        try {\n            bytes = StringEncoding.encode(content, encoding);\n        }\n        catch (uee /*: UnsupportedEncodingException*/) {\n            throw new WriterException(uee);\n        }\n        for (var i = 0, length_2 = bytes.length; i !== length_2; i++) {\n            var b = bytes[i];\n            bits.appendBits(b, 8);\n        }\n    };\n    /**\n     * @throws WriterException\n     */\n    Encoder.appendKanjiBytes = function (content, bits) {\n        var bytes;\n        try {\n            bytes = StringEncoding.encode(content, CharacterSetECI.SJIS);\n        }\n        catch (uee /*: UnsupportedEncodingException*/) {\n            throw new WriterException(uee);\n        }\n        var length = bytes.length;\n        for (var i = 0; i < length; i += 2) {\n            var byte1 = bytes[i] & 0xFF;\n            var byte2 = bytes[i + 1] & 0xFF;\n            var code = ((byte1 << 8) & 0xFFFFFFFF) | byte2;\n            var 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            var encoded = ((subtracted >> 8) * 0xc0) + (subtracted & 0xff);\n            bits.appendBits(encoded, 13);\n        }\n    };\n    Encoder.appendECI = function (eci, bits) {\n        bits.appendBits(Mode.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    // 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    return Encoder;\n}());\nexport default Encoder;\n", "import EncodeHintType from '../core/EncodeHintType';\nimport Encoder from '../core/qrcode/encoder/Encoder';\nimport ErrorCorrectionLevel from '../core/qrcode/decoder/ErrorCorrectionLevel';\nimport IllegalArgumentException from '../core/IllegalArgumentException';\nimport IllegalStateException from '../core/IllegalStateException';\n/**\n * @deprecated Moving to @zxing/browser\n */\nvar BrowserQRCodeSvgWriter = /** @class */ (function () {\n    function BrowserQRCodeSvgWriter() {\n    }\n    /**\n     * Writes and renders a QRCode SVG element.\n     *\n     * @param contents\n     * @param width\n     * @param height\n     * @param hints\n     */\n    BrowserQRCodeSvgWriter.prototype.write = function (contents, width, height, hints) {\n        if (hints === void 0) { 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        var errorCorrectionLevel = ErrorCorrectionLevel.L;\n        var quietZone = BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE;\n        if (hints !== null) {\n            if (undefined !== hints.get(EncodeHintType.ERROR_CORRECTION)) {\n                errorCorrectionLevel = ErrorCorrectionLevel.fromString(hints.get(EncodeHintType.ERROR_CORRECTION).toString());\n            }\n            if (undefined !== hints.get(EncodeHintType.MARGIN)) {\n                quietZone = Number.parseInt(hints.get(EncodeHintType.MARGIN).toString(), 10);\n            }\n        }\n        var 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    BrowserQRCodeSvgWriter.prototype.writeToDom = function (containerElement, contents, width, height, hints) {\n        if (hints === void 0) { hints = null; }\n        if (typeof containerElement === 'string') {\n            containerElement = document.querySelector(containerElement);\n        }\n        var 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    BrowserQRCodeSvgWriter.prototype.renderResult = function (code, width /*int*/, height /*int*/, quietZone /*int*/) {\n        var input = code.getMatrix();\n        if (input === null) {\n            throw new IllegalStateException();\n        }\n        var inputWidth = input.getWidth();\n        var inputHeight = input.getHeight();\n        var qrWidth = inputWidth + (quietZone * 2);\n        var qrHeight = inputHeight + (quietZone * 2);\n        var outputWidth = Math.max(width, qrWidth);\n        var outputHeight = Math.max(height, qrHeight);\n        var 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        var leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n        var topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n        var svgElement = this.createSVGElement(outputWidth, outputHeight);\n        for (var inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n            // Write the contents of this row of the barcode\n            for (var inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple) {\n                if (input.get(inputX, inputY) === 1) {\n                    var 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    BrowserQRCodeSvgWriter.prototype.createSVGElement = function (w, h) {\n        var 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    BrowserQRCodeSvgWriter.prototype.createSvgRectElement = function (x, y, w, h) {\n        var 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    BrowserQRCodeSvgWriter.QUIET_ZONE_SIZE = 4;\n    /**\n     * SVG markup NameSpace\n     */\n    BrowserQRCodeSvgWriter.SVG_NS = 'http://www.w3.org/2000/svg';\n    return BrowserQRCodeSvgWriter;\n}());\nexport { BrowserQRCodeSvgWriter };\n", "", "", "// browser\nexport * from './browser/BrowserAztecCodeReader';\nexport * from './browser/BrowserBarcodeReader';\nexport * from './browser/BrowserCodeReader';\nexport * from './browser/BrowserDatamatrixCodeReader';\nexport * from './browser/BrowserMultiFormatReader';\nexport * from './browser/BrowserPDF417Reader';\nexport * from './browser/BrowserQRCodeReader';\nexport * from './browser/BrowserQRCodeSvgWriter';\nexport * from './browser/DecodeContinuouslyCallback';\nexport * from './browser/HTMLCanvasElementLuminanceSource';\nexport * from './browser/HTMLVisualMediaElement';\nexport * from './browser/VideoInputDevice';\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/*namespace com.google.zxing.qrcode {*/\nimport BarcodeFormat from '../BarcodeFormat';\nimport EncodeHintType from '../EncodeHintType';\nimport BitMatrix from '../common/BitMatrix';\nimport ErrorCorrectionLevel from './decoder/ErrorCorrectionLevel';\nimport Encoder from './encoder/Encoder';\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport IllegalStateException from '../IllegalStateException';\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 */\nvar QRCodeWriter = /** @class */ (function () {\n    function QRCodeWriter() {\n    }\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    QRCodeWriter.prototype.encode = function (contents, format, width /*int*/, height /*int*/, hints) {\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        var errorCorrectionLevel = ErrorCorrectionLevel.L;\n        var quietZone = QRCodeWriter.QUIET_ZONE_SIZE;\n        if (hints !== null) {\n            if (undefined !== hints.get(EncodeHintType.ERROR_CORRECTION)) {\n                errorCorrectionLevel = ErrorCorrectionLevel.fromString(hints.get(EncodeHintType.ERROR_CORRECTION).toString());\n            }\n            if (undefined !== hints.get(EncodeHintType.MARGIN)) {\n                quietZone = Number.parseInt(hints.get(EncodeHintType.MARGIN).toString(), 10);\n            }\n        }\n        var 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    QRCodeWriter.renderResult = function (code, width /*int*/, height /*int*/, quietZone /*int*/) {\n        var input = code.getMatrix();\n        if (input === null) {\n            throw new IllegalStateException();\n        }\n        var inputWidth = input.getWidth();\n        var inputHeight = input.getHeight();\n        var qrWidth = inputWidth + (quietZone * 2);\n        var qrHeight = inputHeight + (quietZone * 2);\n        var outputWidth = Math.max(width, qrWidth);\n        var outputHeight = Math.max(height, qrHeight);\n        var 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        var leftPadding = Math.floor((outputWidth - (inputWidth * multiple)) / 2);\n        var topPadding = Math.floor((outputHeight - (inputHeight * multiple)) / 2);\n        var output = new BitMatrix(outputWidth, outputHeight);\n        for (var inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n            // Write the contents of this row of the barcode\n            for (var 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    QRCodeWriter.QUIET_ZONE_SIZE = 4;\n    return QRCodeWriter;\n}());\nexport default QRCodeWriter;\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// import DataMatrixWriter from './datamatrix/DataMatrixWriter'\n// import CodaBarWriter from './oned/CodaBarWriter'\n// import Code128Writer from './oned/Code128Writer'\n// import Code39Writer from './oned/Code39Writer'\n// import Code93Writer from './oned/Code93Writer'\n// import EAN13Writer from './oned/EAN13Writer'\n// import EAN8Writer from './oned/EAN8Writer'\n// import ITFWriter from './oned/ITFWriter'\n// import UPCAWriter from './oned/UPCAWriter'\n// import UPCEWriter from './oned/UPCEWriter'\n// import PDF417Writer from './pdf417/PDF417Writer'\nimport QRCodeWriter from './qrcode/QRCodeWriter';\nimport BarcodeFormat from './BarcodeFormat';\nimport IllegalArgumentException from './IllegalArgumentException';\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 */\nvar MultiFormatWriter = /** @class */ (function () {\n    function MultiFormatWriter() {\n    }\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    MultiFormatWriter.prototype.encode = function (contents, format, width /*int*/, height /*int*/, hints) {\n        var 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.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    return MultiFormatWriter;\n}());\nexport default MultiFormatWriter;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing {*/\nimport System from './util/System';\nimport LuminanceSource from './LuminanceSource';\nimport InvertedLuminanceSource from './InvertedLuminanceSource';\nimport IllegalArgumentException from './IllegalArgumentException';\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 */\nvar PlanarYUVLuminanceSource = /** @class */ (function (_super) {\n    __extends(PlanarYUVLuminanceSource, _super);\n    function PlanarYUVLuminanceSource(yuvData, dataWidth /*int*/, dataHeight /*int*/, left /*int*/, top /*int*/, width /*int*/, height /*int*/, reverseHorizontal) {\n        var _this = _super.call(this, width, height) || this;\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        return _this;\n    }\n    /*@Override*/\n    PlanarYUVLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n        if (y < 0 || y >= this.getHeight()) {\n            throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n        }\n        var width = this.getWidth();\n        if (row === null || row === undefined || row.length < width) {\n            row = new Uint8ClampedArray(width);\n        }\n        var offset = (y + this.top) * this.dataWidth + this.left;\n        System.arraycopy(this.yuvData, offset, row, 0, width);\n        return row;\n    };\n    /*@Override*/\n    PlanarYUVLuminanceSource.prototype.getMatrix = function () {\n        var width = this.getWidth();\n        var 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        var area = width * height;\n        var matrix = new Uint8ClampedArray(area);\n        var 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 (var y = 0; y < height; y++) {\n            var outputOffset = y * width;\n            System.arraycopy(this.yuvData, inputOffset, matrix, outputOffset, width);\n            inputOffset += this.dataWidth;\n        }\n        return matrix;\n    };\n    /*@Override*/\n    PlanarYUVLuminanceSource.prototype.isCropSupported = function () {\n        return true;\n    };\n    /*@Override*/\n    PlanarYUVLuminanceSource.prototype.crop = function (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    PlanarYUVLuminanceSource.prototype.renderThumbnail = function () {\n        var width = this.getWidth() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n        var height = this.getHeight() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n        var pixels = new Int32Array(width * height);\n        var yuv = this.yuvData;\n        var inputOffset = this.top * this.dataWidth + this.left;\n        for (var y = 0; y < height; y++) {\n            var outputOffset = y * width;\n            for (var x = 0; x < width; x++) {\n                var 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    PlanarYUVLuminanceSource.prototype.getThumbnailWidth = function () {\n        return this.getWidth() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n    };\n    /**\n     * @return height of image from {@link #renderThumbnail()}\n     */\n    PlanarYUVLuminanceSource.prototype.getThumbnailHeight = function () {\n        return this.getHeight() / PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR;\n    };\n    PlanarYUVLuminanceSource.prototype.reverseHorizontal = function (width /*int*/, height /*int*/) {\n        var yuvData = this.yuvData;\n        for (var y = 0, rowStart = this.top * this.dataWidth + this.left; y < height; y++, rowStart += this.dataWidth) {\n            var middle = rowStart + width / 2;\n            for (var x1 = rowStart, x2 = rowStart + width - 1; x1 < middle; x1++, x2--) {\n                var temp = yuvData[x1];\n                yuvData[x1] = yuvData[x2];\n                yuvData[x2] = temp;\n            }\n        }\n    };\n    PlanarYUVLuminanceSource.prototype.invert = function () {\n        return new InvertedLuminanceSource(this);\n    };\n    PlanarYUVLuminanceSource.THUMBNAIL_SCALE_FACTOR = 2;\n    return PlanarYUVLuminanceSource;\n}(LuminanceSource));\nexport default PlanarYUVLuminanceSource;\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 */\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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/*namespace com.google.zxing {*/\nimport './InvertedLuminanceSource'; // required because of circular dependencies between LuminanceSource and InvertedLuminanceSource\nimport InvertedLuminanceSource from './InvertedLuminanceSource';\nimport LuminanceSource from './LuminanceSource';\nimport System from './util/System';\nimport IllegalArgumentException from './IllegalArgumentException';\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 */\nvar RGBLuminanceSource = /** @class */ (function (_super) {\n    __extends(RGBLuminanceSource, _super);\n    function RGBLuminanceSource(luminances, width /*int*/, height /*int*/, dataWidth /*int*/, dataHeight /*int*/, left /*int*/, top /*int*/) {\n        var _this = _super.call(this, width, height) || this;\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            var size = width * height;\n            var luminancesUint8Array = new Uint8ClampedArray(size);\n            for (var offset = 0; offset < size; offset++) {\n                var pixel = luminances[offset];\n                var r = (pixel >> 16) & 0xff; // red\n                var g2 = (pixel >> 7) & 0x1fe; // 2 * green\n                var 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        return _this;\n    }\n    /*@Override*/\n    RGBLuminanceSource.prototype.getRow = function (y /*int*/, row) {\n        if (y < 0 || y >= this.getHeight()) {\n            throw new IllegalArgumentException('Requested row is outside the image: ' + y);\n        }\n        var width = this.getWidth();\n        if (row === null || row === undefined || row.length < width) {\n            row = new Uint8ClampedArray(width);\n        }\n        var offset = (y + this.top) * this.dataWidth + this.left;\n        System.arraycopy(this.luminances, offset, row, 0, width);\n        return row;\n    };\n    /*@Override*/\n    RGBLuminanceSource.prototype.getMatrix = function () {\n        var width = this.getWidth();\n        var 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        var area = width * height;\n        var matrix = new Uint8ClampedArray(area);\n        var 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 (var y = 0; y < height; y++) {\n            var outputOffset = y * width;\n            System.arraycopy(this.luminances, inputOffset, matrix, outputOffset, width);\n            inputOffset += this.dataWidth;\n        }\n        return matrix;\n    };\n    /*@Override*/\n    RGBLuminanceSource.prototype.isCropSupported = function () {\n        return true;\n    };\n    /*@Override*/\n    RGBLuminanceSource.prototype.crop = function (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    RGBLuminanceSource.prototype.invert = function () {\n        return new InvertedLuminanceSource(this);\n    };\n    return RGBLuminanceSource;\n}(LuminanceSource));\nexport default RGBLuminanceSource;\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport CharacterSetECI from '../common/CharacterSetECI';\n/**\n * Just to make a shortcut between Java code and TS code.\n */\nvar Charset = /** @class */ (function (_super) {\n    __extends(Charset, _super);\n    function Charset() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Charset.forName = function (name) {\n        return this.getCharacterSetECIByName(name);\n    };\n    return Charset;\n}(CharacterSetECI));\nexport default Charset;\n", "import CharacterSetECI from '../common/CharacterSetECI';\n/**\n * Just to make a shortcut between Java code and TS code.\n */\nvar StandardCharsets = /** @class */ (function () {\n    function StandardCharsets() {\n    }\n    StandardCharsets.ISO_8859_1 = CharacterSetECI.ISO8859_1;\n    return StandardCharsets;\n}());\nexport default StandardCharsets;\n", "import Arrays from '../../util/Arrays';\n/**\n * Symbol Character Placement Program. Adapted from Annex M.1 in ISO/IEC 16022:2000(E).\n */\nvar DefaultPlacement = /** @class */ (function () {\n    /**\n     * Main constructor\n     *\n     * @param codewords the codewords to place\n     * @param numcols   the number of columns\n     * @param numrows   the number of rows\n     */\n    function DefaultPlacement(codewords, numcols, numrows) {\n        this.codewords = codewords;\n        this.numcols = numcols;\n        this.numrows = numrows;\n        this.bits = new Uint8Array(numcols * numrows);\n        Arrays.fill(this.bits, 2); // Initialize with \"not set\" value\n    }\n    DefaultPlacement.prototype.getNumrows = function () {\n        return this.numrows;\n    };\n    DefaultPlacement.prototype.getNumcols = function () {\n        return this.numcols;\n    };\n    DefaultPlacement.prototype.getBits = function () {\n        return this.bits;\n    };\n    DefaultPlacement.prototype.getBit = function (col, row) {\n        return this.bits[row * this.numcols + col] === 1;\n    };\n    DefaultPlacement.prototype.setBit = function (col, row, bit) {\n        this.bits[row * this.numcols + col] = bit ? 1 : 0;\n    };\n    DefaultPlacement.prototype.noBit = function (col, row) {\n        return this.bits[row * this.numcols + col] === 2;\n    };\n    DefaultPlacement.prototype.place = function () {\n        var pos = 0;\n        var row = 4;\n        var col = 0;\n        do {\n            // repeatedly first check for one of the special corner cases, then...\n            if (row === this.numrows && col === 0) {\n                this.corner1(pos++);\n            }\n            if (row === this.numrows - 2 && col === 0 && this.numcols % 4 !== 0) {\n                this.corner2(pos++);\n            }\n            if (row === this.numrows - 2 && col === 0 && this.numcols % 8 === 4) {\n                this.corner3(pos++);\n            }\n            if (row === this.numrows + 4 && col === 2 && this.numcols % 8 === 0) {\n                this.corner4(pos++);\n            }\n            // sweep upward diagonally, inserting successive characters...\n            do {\n                if (row < this.numrows && col >= 0 && this.noBit(col, row)) {\n                    this.utah(row, col, pos++);\n                }\n                row -= 2;\n                col += 2;\n            } while (row >= 0 && col < this.numcols);\n            row++;\n            col += 3;\n            // and then sweep downward diagonally, inserting successive characters, ...\n            do {\n                if (row >= 0 && col < this.numcols && this.noBit(col, row)) {\n                    this.utah(row, col, pos++);\n                }\n                row += 2;\n                col -= 2;\n            } while (row < this.numrows && col >= 0);\n            row += 3;\n            col++;\n            // ...until the entire array is scanned\n        } while (row < this.numrows || col < this.numcols);\n        // Lastly, if the lower right-hand corner is untouched, fill in fixed pattern\n        if (this.noBit(this.numcols - 1, this.numrows - 1)) {\n            this.setBit(this.numcols - 1, this.numrows - 1, true);\n            this.setBit(this.numcols - 2, this.numrows - 2, true);\n        }\n    };\n    DefaultPlacement.prototype.module = function (row, col, pos, bit) {\n        if (row < 0) {\n            row += this.numrows;\n            col += 4 - ((this.numrows + 4) % 8);\n        }\n        if (col < 0) {\n            col += this.numcols;\n            row += 4 - ((this.numcols + 4) % 8);\n        }\n        // Note the conversion:\n        var v = this.codewords.charCodeAt(pos);\n        v &= 1 << (8 - bit);\n        this.setBit(col, row, v !== 0);\n    };\n    /**\n     * Places the 8 bits of a utah-shaped symbol character in ECC200.\n     *\n     * @param row the row\n     * @param col the column\n     * @param pos character position\n     */\n    DefaultPlacement.prototype.utah = function (row, col, pos) {\n        this.module(row - 2, col - 2, pos, 1);\n        this.module(row - 2, col - 1, pos, 2);\n        this.module(row - 1, col - 2, pos, 3);\n        this.module(row - 1, col - 1, pos, 4);\n        this.module(row - 1, col, pos, 5);\n        this.module(row, col - 2, pos, 6);\n        this.module(row, col - 1, pos, 7);\n        this.module(row, col, pos, 8);\n    };\n    DefaultPlacement.prototype.corner1 = function (pos) {\n        this.module(this.numrows - 1, 0, pos, 1);\n        this.module(this.numrows - 1, 1, pos, 2);\n        this.module(this.numrows - 1, 2, pos, 3);\n        this.module(0, this.numcols - 2, pos, 4);\n        this.module(0, this.numcols - 1, pos, 5);\n        this.module(1, this.numcols - 1, pos, 6);\n        this.module(2, this.numcols - 1, pos, 7);\n        this.module(3, this.numcols - 1, pos, 8);\n    };\n    DefaultPlacement.prototype.corner2 = function (pos) {\n        this.module(this.numrows - 3, 0, pos, 1);\n        this.module(this.numrows - 2, 0, pos, 2);\n        this.module(this.numrows - 1, 0, pos, 3);\n        this.module(0, this.numcols - 4, pos, 4);\n        this.module(0, this.numcols - 3, pos, 5);\n        this.module(0, this.numcols - 2, pos, 6);\n        this.module(0, this.numcols - 1, pos, 7);\n        this.module(1, this.numcols - 1, pos, 8);\n    };\n    DefaultPlacement.prototype.corner3 = function (pos) {\n        this.module(this.numrows - 3, 0, pos, 1);\n        this.module(this.numrows - 2, 0, pos, 2);\n        this.module(this.numrows - 1, 0, pos, 3);\n        this.module(0, this.numcols - 2, pos, 4);\n        this.module(0, this.numcols - 1, pos, 5);\n        this.module(1, this.numcols - 1, pos, 6);\n        this.module(2, this.numcols - 1, pos, 7);\n        this.module(3, this.numcols - 1, pos, 8);\n    };\n    DefaultPlacement.prototype.corner4 = function (pos) {\n        this.module(this.numrows - 1, 0, pos, 1);\n        this.module(this.numrows - 1, this.numcols - 1, pos, 2);\n        this.module(0, this.numcols - 3, pos, 3);\n        this.module(0, this.numcols - 2, pos, 4);\n        this.module(0, this.numcols - 1, pos, 5);\n        this.module(1, this.numcols - 3, pos, 6);\n        this.module(1, this.numcols - 2, pos, 7);\n        this.module(1, this.numcols - 1, pos, 8);\n    };\n    return DefaultPlacement;\n}());\nexport default DefaultPlacement;\n", "var _a;\n/**\n * Lookup table which factors to use for which number of error correction codewords.\n * See FACTORS.\n */\nexport var FACTOR_SETS = [\n    5, 7, 10, 11, 12, 14, 18, 20, 24, 28, 36, 42, 48, 56, 62, 68,\n];\n/**\n * Precomputed polynomial factors for ECC 200.\n */\nexport var FACTORS = [\n    [228, 48, 15, 111, 62],\n    [23, 68, 144, 134, 240, 92, 254],\n    [28, 24, 185, 166, 223, 248, 116, 255, 110, 61],\n    [175, 138, 205, 12, 194, 168, 39, 245, 60, 97, 120],\n    [41, 153, 158, 91, 61, 42, 142, 213, 97, 178, 100, 242],\n    [156, 97, 192, 252, 95, 9, 157, 119, 138, 45, 18, 186, 83, 185],\n    [\n        83, 195, 100, 39, 188, 75, 66, 61, 241, 213, 109, 129, 94, 254, 225, 48, 90,\n        188,\n    ],\n    [\n        15, 195, 244, 9, 233, 71, 168, 2, 188, 160, 153, 145, 253, 79, 108, 82, 27,\n        174, 186, 172,\n    ],\n    [\n        52, 190, 88, 205, 109, 39, 176, 21, 155, 197, 251, 223, 155, 21, 5, 172,\n        254, 124, 12, 181, 184, 96, 50, 193,\n    ],\n    [\n        211, 231, 43, 97, 71, 96, 103, 174, 37, 151, 170, 53, 75, 34, 249, 121, 17,\n        138, 110, 213, 141, 136, 120, 151, 233, 168, 93, 255,\n    ],\n    [\n        245, 127, 242, 218, 130, 250, 162, 181, 102, 120, 84, 179, 220, 251, 80,\n        182, 229, 18, 2, 4, 68, 33, 101, 137, 95, 119, 115, 44, 175, 184, 59, 25,\n        225, 98, 81, 112,\n    ],\n    [\n        77, 193, 137, 31, 19, 38, 22, 153, 247, 105, 122, 2, 245, 133, 242, 8, 175,\n        95, 100, 9, 167, 105, 214, 111, 57, 121, 21, 1, 253, 57, 54, 101, 248, 202,\n        69, 50, 150, 177, 226, 5, 9, 5,\n    ],\n    [\n        245, 132, 172, 223, 96, 32, 117, 22, 238, 133, 238, 231, 205, 188, 237, 87,\n        191, 106, 16, 147, 118, 23, 37, 90, 170, 205, 131, 88, 120, 100, 66, 138,\n        186, 240, 82, 44, 176, 87, 187, 147, 160, 175, 69, 213, 92, 253, 225, 19,\n    ],\n    [\n        175, 9, 223, 238, 12, 17, 220, 208, 100, 29, 175, 170, 230, 192, 215, 235,\n        150, 159, 36, 223, 38, 200, 132, 54, 228, 146, 218, 234, 117, 203, 29, 232,\n        144, 238, 22, 150, 201, 117, 62, 207, 164, 13, 137, 245, 127, 67, 247, 28,\n        155, 43, 203, 107, 233, 53, 143, 46,\n    ],\n    [\n        242, 93, 169, 50, 144, 210, 39, 118, 202, 188, 201, 189, 143, 108, 196, 37,\n        185, 112, 134, 230, 245, 63, 197, 190, 250, 106, 185, 221, 175, 64, 114, 71,\n        161, 44, 147, 6, 27, 218, 51, 63, 87, 10, 40, 130, 188, 17, 163, 31, 176,\n        170, 4, 107, 232, 7, 94, 166, 224, 124, 86, 47, 11, 204,\n    ],\n    [\n        220, 228, 173, 89, 251, 149, 159, 56, 89, 33, 147, 244, 154, 36, 73, 127,\n        213, 136, 248, 180, 234, 197, 158, 177, 68, 122, 93, 213, 15, 160, 227, 236,\n        66, 139, 153, 185, 202, 167, 179, 25, 220, 232, 96, 210, 231, 136, 223, 239,\n        181, 241, 59, 52, 172, 25, 49, 232, 211, 189, 64, 54, 108, 153, 132, 63, 96,\n        103, 82, 186,\n    ],\n];\nexport var /*final*/ MODULO_VALUE = 0x12d;\nvar static_LOG = function (LOG, ALOG) {\n    var p = 1;\n    for (var i = 0; i < 255; i++) {\n        ALOG[i] = p;\n        LOG[p] = i;\n        p *= 2;\n        if (p >= 256) {\n            p ^= MODULO_VALUE;\n        }\n    }\n    return {\n        LOG: LOG,\n        ALOG: ALOG,\n    };\n};\nexport var LOG = (_a = static_LOG([], []), _a.LOG), ALOG = _a.ALOG;\nexport var SymbolShapeHint;\n(function (SymbolShapeHint) {\n    SymbolShapeHint[SymbolShapeHint[\"FORCE_NONE\"] = 0] = \"FORCE_NONE\";\n    SymbolShapeHint[SymbolShapeHint[\"FORCE_SQUARE\"] = 1] = \"FORCE_SQUARE\";\n    SymbolShapeHint[SymbolShapeHint[\"FORCE_RECTANGLE\"] = 2] = \"FORCE_RECTANGLE\";\n})(SymbolShapeHint || (SymbolShapeHint = {}));\n/**\n * Padding character\n */\nexport var PAD = 129;\n/**\n * mode latch to C40 encodation mode\n */\nexport var LATCH_TO_C40 = 230;\n/**\n * mode latch to Base 256 encodation mode\n */\nexport var LATCH_TO_BASE256 = 231;\n/**\n * FNC1 Codeword\n */\n// private static FNC1 = 232;\n/**\n * Structured Append Codeword\n */\n// private static STRUCTURED_APPEND = 233;\n/**\n * Reader Programming\n */\n// private static READER_PROGRAMMING = 234;\n/**\n * Upper Shift\n */\nexport var UPPER_SHIFT = 235;\n/**\n * 05 Macro\n */\nexport var MACRO_05 = 236;\n/**\n * 06 Macro\n */\nexport var MACRO_06 = 237;\n/**\n * mode latch to ANSI X.12 encodation mode\n */\nexport var LATCH_TO_ANSIX12 = 238;\n/**\n * mode latch to Text encodation mode\n */\nexport var LATCH_TO_TEXT = 239;\n/**\n * mode latch to EDIFACT encodation mode\n */\nexport var LATCH_TO_EDIFACT = 240;\n/**\n * ECI character (Extended Channel Interpretation)\n */\n// private export const ECI = 241;\n/**\n * Unlatch from C40 encodation\n */\nexport var C40_UNLATCH = 254;\n/**\n * Unlatch from X12 encodation\n */\nexport var X12_UNLATCH = 254;\n/**\n * 05 Macro header\n */\nexport var MACRO_05_HEADER = '[)>\\u001E05\\u001D';\n/**\n * 06 Macro header\n */\nexport var MACRO_06_HEADER = '[)>\\u001E06\\u001D';\n/**\n * Macro trailer\n */\nexport var MACRO_TRAILER = '\\u001E\\u0004';\nexport var ASCII_ENCODATION = 0;\nexport var C40_ENCODATION = 1;\nexport var TEXT_ENCODATION = 2;\nexport var X12_ENCODATION = 3;\nexport var EDIFACT_ENCODATION = 4;\nexport var BASE256_ENCODATION = 5;\n", "import StringBuilder from '../../util/StringBuilder';\nimport { ALOG, FACTORS, FACTOR_SETS, LOG } from './constants';\n/**\n * Error Correction Code for ECC200.\n */\nvar ErrorCorrection = /** @class */ (function () {\n    function ErrorCorrection() {\n    }\n    /**\n     * Creates the ECC200 error correction for an encoded message.\n     *\n     * @param codewords  the codewords\n     * @param symbolInfo information about the symbol to be encoded\n     * @return the codewords with interleaved error correction.\n     */\n    ErrorCorrection.encodeECC200 = function (codewords, symbolInfo) {\n        if (codewords.length !== symbolInfo.getDataCapacity()) {\n            throw new Error('The number of codewords does not match the selected symbol');\n        }\n        var sb = new StringBuilder();\n        sb.append(codewords);\n        var blockCount = symbolInfo.getInterleavedBlockCount();\n        if (blockCount === 1) {\n            var ecc = this.createECCBlock(codewords, symbolInfo.getErrorCodewords());\n            sb.append(ecc);\n        }\n        else {\n            // sb.setLength(sb.capacity());\n            var dataSizes = [];\n            var errorSizes = [];\n            for (var i = 0; i < blockCount; i++) {\n                dataSizes[i] = symbolInfo.getDataLengthForInterleavedBlock(i + 1);\n                errorSizes[i] = symbolInfo.getErrorLengthForInterleavedBlock(i + 1);\n            }\n            for (var block = 0; block < blockCount; block++) {\n                var temp = new StringBuilder();\n                for (var d = block; d < symbolInfo.getDataCapacity(); d += blockCount) {\n                    temp.append(codewords.charAt(d));\n                }\n                var ecc = this.createECCBlock(temp.toString(), errorSizes[block]);\n                var pos = 0;\n                for (var e = block; e < errorSizes[block] * blockCount; e += blockCount) {\n                    sb.setCharAt(symbolInfo.getDataCapacity() + e, ecc.charAt(pos++));\n                }\n            }\n        }\n        return sb.toString();\n    };\n    ErrorCorrection.createECCBlock = function (codewords, numECWords) {\n        var table = -1;\n        for (var i = 0; i < FACTOR_SETS.length; i++) {\n            if (FACTOR_SETS[i] === numECWords) {\n                table = i;\n                break;\n            }\n        }\n        if (table < 0) {\n            throw new Error('Illegal number of error correction codewords specified: ' + numECWords);\n        }\n        var poly = FACTORS[table];\n        var ecc = [];\n        for (var i = 0; i < numECWords; i++) {\n            ecc[i] = 0;\n        }\n        for (var i = 0; i < codewords.length; i++) {\n            var m = ecc[numECWords - 1] ^ codewords.charAt(i).charCodeAt(0);\n            for (var k = numECWords - 1; k > 0; k--) {\n                if (m !== 0 && poly[k] !== 0) {\n                    ecc[k] = ecc[k - 1] ^ ALOG[(LOG[m] + LOG[poly[k]]) % 255];\n                }\n                else {\n                    ecc[k] = ecc[k - 1];\n                }\n            }\n            if (m !== 0 && poly[0] !== 0) {\n                ecc[0] = ALOG[(LOG[m] + LOG[poly[0]]) % 255];\n            }\n            else {\n                ecc[0] = 0;\n            }\n        }\n        var eccReversed = [];\n        for (var i = 0; i < numECWords; i++) {\n            eccReversed[i] = ecc[numECWords - i - 1];\n        }\n        return eccReversed.map(function (c) { return String.fromCharCode(c); }).join('');\n    };\n    return ErrorCorrection;\n}());\nexport default ErrorCorrection;\n", "import { ASCII_ENCODATION, BASE256_ENCODATION, C40_ENCODATION, EDIFACT_ENCODATION, LATCH_TO_ANSIX12, LATCH_TO_BASE256, LATCH_TO_C40, LATCH_TO_EDIFACT, LATCH_TO_TEXT, TEXT_ENCODATION, UPPER_SHIFT, X12_ENCODATION, } from './constants';\n// tslint:disable-next-line:no-circular-imports\nimport HighLevelEncoder from './HighLevelEncoder';\nvar ASCIIEncoder = /** @class */ (function () {\n    function ASCIIEncoder() {\n    }\n    ASCIIEncoder.prototype.getEncodingMode = function () {\n        return ASCII_ENCODATION;\n    };\n    ASCIIEncoder.prototype.encode = function (context) {\n        // step B\n        var n = HighLevelEncoder.determineConsecutiveDigitCount(context.getMessage(), context.pos);\n        if (n >= 2) {\n            context.writeCodeword(this.encodeASCIIDigits(context.getMessage().charCodeAt(context.pos), context.getMessage().charCodeAt(context.pos + 1)));\n            context.pos += 2;\n        }\n        else {\n            var c = context.getCurrentChar();\n            var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n            if (newMode !== this.getEncodingMode()) {\n                switch (newMode) {\n                    case BASE256_ENCODATION:\n                        context.writeCodeword(LATCH_TO_BASE256);\n                        context.signalEncoderChange(BASE256_ENCODATION);\n                        return;\n                    case C40_ENCODATION:\n                        context.writeCodeword(LATCH_TO_C40);\n                        context.signalEncoderChange(C40_ENCODATION);\n                        return;\n                    case X12_ENCODATION:\n                        context.writeCodeword(LATCH_TO_ANSIX12);\n                        context.signalEncoderChange(X12_ENCODATION);\n                        break;\n                    case TEXT_ENCODATION:\n                        context.writeCodeword(LATCH_TO_TEXT);\n                        context.signalEncoderChange(TEXT_ENCODATION);\n                        break;\n                    case EDIFACT_ENCODATION:\n                        context.writeCodeword(LATCH_TO_EDIFACT);\n                        context.signalEncoderChange(EDIFACT_ENCODATION);\n                        break;\n                    default:\n                        throw new Error('Illegal mode: ' + newMode);\n                }\n            }\n            else if (HighLevelEncoder.isExtendedASCII(c)) {\n                context.writeCodeword(UPPER_SHIFT);\n                context.writeCodeword(c - 128 + 1);\n                context.pos++;\n            }\n            else {\n                context.writeCodeword(c + 1);\n                context.pos++;\n            }\n        }\n    };\n    ASCIIEncoder.prototype.encodeASCIIDigits = function (digit1, digit2) {\n        if (HighLevelEncoder.isDigit(digit1) && HighLevelEncoder.isDigit(digit2)) {\n            var num = (digit1 - 48) * 10 + (digit2 - 48);\n            return num + 130;\n        }\n        throw new Error('not digits: ' + digit1 + digit2);\n    };\n    return ASCIIEncoder;\n}());\nexport { ASCIIEncoder };\n", "import StringUtils from '../../common/StringUtils';\nimport StringBuilder from '../../util/StringBuilder';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { BASE256_ENCODATION, ASCII_ENCODATION } from './constants';\nvar Base256Encoder = /** @class */ (function () {\n    function Base256Encoder() {\n    }\n    Base256Encoder.prototype.getEncodingMode = function () {\n        return BASE256_ENCODATION;\n    };\n    Base256Encoder.prototype.encode = function (context) {\n        var buffer = new StringBuilder();\n        buffer.append(0); // Initialize length field\n        while (context.hasMoreCharacters()) {\n            var c = context.getCurrentChar();\n            buffer.append(c);\n            context.pos++;\n            var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n            if (newMode !== this.getEncodingMode()) {\n                // Return to ASCII encodation, which will actually handle latch to new mode\n                context.signalEncoderChange(ASCII_ENCODATION);\n                break;\n            }\n        }\n        var dataCount = buffer.length() - 1;\n        var lengthFieldSize = 1;\n        var currentSize = context.getCodewordCount() + dataCount + lengthFieldSize;\n        context.updateSymbolInfo(currentSize);\n        var mustPad = context.getSymbolInfo().getDataCapacity() - currentSize > 0;\n        if (context.hasMoreCharacters() || mustPad) {\n            if (dataCount <= 249) {\n                buffer.setCharAt(0, StringUtils.getCharAt(dataCount));\n            }\n            else if (dataCount <= 1555) {\n                buffer.setCharAt(0, StringUtils.getCharAt(Math.floor(dataCount / 250) + 249));\n                buffer.insert(1, StringUtils.getCharAt(dataCount % 250));\n            }\n            else {\n                throw new Error('Message length not in valid ranges: ' + dataCount);\n            }\n        }\n        for (var i = 0, c = buffer.length(); i < c; i++) {\n            context.writeCodeword(this.randomize255State(buffer.charAt(i).charCodeAt(0), context.getCodewordCount() + 1));\n        }\n    };\n    Base256Encoder.prototype.randomize255State = function (ch, codewordPosition) {\n        var pseudoRandom = ((149 * codewordPosition) % 255) + 1;\n        var tempVariable = ch + pseudoRandom;\n        if (tempVariable <= 255) {\n            return tempVariable;\n        }\n        else {\n            return tempVariable - 256;\n        }\n    };\n    return Base256Encoder;\n}());\nexport { Base256Encoder };\n", "import StringBuilder from '../../util/StringBuilder';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { C40_ENCODATION, LATCH_TO_C40, ASCII_ENCODATION, C40_UNLATCH, } from './constants';\nvar C40Encoder = /** @class */ (function () {\n    function C40Encoder() {\n    }\n    C40Encoder.prototype.getEncodingMode = function () {\n        return C40_ENCODATION;\n    };\n    C40Encoder.prototype.encodeMaximal = function (context) {\n        var buffer = new StringBuilder();\n        var lastCharSize = 0;\n        var backtrackStartPosition = context.pos;\n        var backtrackBufferLength = 0;\n        while (context.hasMoreCharacters()) {\n            var c = context.getCurrentChar();\n            context.pos++;\n            lastCharSize = this.encodeChar(c, buffer);\n            if (buffer.length() % 3 === 0) {\n                backtrackStartPosition = context.pos;\n                backtrackBufferLength = buffer.length();\n            }\n        }\n        if (backtrackBufferLength !== buffer.length()) {\n            var unwritten = Math.floor((buffer.length() / 3) * 2);\n            var curCodewordCount = Math.floor(context.getCodewordCount() + unwritten + 1); // +1 for the latch to C40\n            context.updateSymbolInfo(curCodewordCount);\n            var available = context.getSymbolInfo().getDataCapacity() - curCodewordCount;\n            var rest = Math.floor(buffer.length() % 3);\n            if ((rest === 2 && available !== 2) ||\n                (rest === 1 && (lastCharSize > 3 || available !== 1))) {\n                // buffer.setLength(backtrackBufferLength);\n                context.pos = backtrackStartPosition;\n            }\n        }\n        if (buffer.length() > 0) {\n            context.writeCodeword(LATCH_TO_C40);\n        }\n        this.handleEOD(context, buffer);\n    };\n    C40Encoder.prototype.encode = function (context) {\n        // step C\n        var buffer = new StringBuilder();\n        while (context.hasMoreCharacters()) {\n            var c = context.getCurrentChar();\n            context.pos++;\n            var lastCharSize = this.encodeChar(c, buffer);\n            var unwritten = Math.floor(buffer.length() / 3) * 2;\n            var curCodewordCount = context.getCodewordCount() + unwritten;\n            context.updateSymbolInfo(curCodewordCount);\n            var available = context.getSymbolInfo().getDataCapacity() - curCodewordCount;\n            if (!context.hasMoreCharacters()) {\n                // Avoid having a single C40 value in the last triplet\n                var removed = new StringBuilder();\n                if (buffer.length() % 3 === 2 && available !== 2) {\n                    lastCharSize = this.backtrackOneCharacter(context, buffer, removed, lastCharSize);\n                }\n                while (buffer.length() % 3 === 1 &&\n                    (lastCharSize > 3 || available !== 1)) {\n                    lastCharSize = this.backtrackOneCharacter(context, buffer, removed, lastCharSize);\n                }\n                break;\n            }\n            var count = buffer.length();\n            if (count % 3 === 0) {\n                var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n                if (newMode !== this.getEncodingMode()) {\n                    // Return to ASCII encodation, which will actually handle latch to new mode\n                    context.signalEncoderChange(ASCII_ENCODATION);\n                    break;\n                }\n            }\n        }\n        this.handleEOD(context, buffer);\n    };\n    C40Encoder.prototype.backtrackOneCharacter = function (context, buffer, removed, lastCharSize) {\n        var count = buffer.length();\n        var test = buffer.toString().substring(0, count - lastCharSize);\n        buffer.setLengthToZero();\n        buffer.append(test);\n        // buffer.delete(count - lastCharSize, count);\n        /*for (let i = count - lastCharSize; i < count; i++) {\n          buffer.deleteCharAt(i);\n        }*/\n        context.pos--;\n        var c = context.getCurrentChar();\n        lastCharSize = this.encodeChar(c, removed);\n        context.resetSymbolInfo(); // Deal with possible reduction in symbol size\n        return lastCharSize;\n    };\n    C40Encoder.prototype.writeNextTriplet = function (context, buffer) {\n        context.writeCodewords(this.encodeToCodewords(buffer.toString()));\n        var test = buffer.toString().substring(3);\n        buffer.setLengthToZero();\n        buffer.append(test);\n        // buffer.delete(0, 3);\n        /*for (let i = 0; i < 3; i++) {\n          buffer.deleteCharAt(i);\n        }*/\n    };\n    /**\n     * Handle \"end of data\" situations\n     *\n     * @param context the encoder context\n     * @param buffer  the buffer with the remaining encoded characters\n     */\n    C40Encoder.prototype.handleEOD = function (context, buffer) {\n        var unwritten = Math.floor((buffer.length() / 3) * 2);\n        var rest = buffer.length() % 3;\n        var curCodewordCount = context.getCodewordCount() + unwritten;\n        context.updateSymbolInfo(curCodewordCount);\n        var available = context.getSymbolInfo().getDataCapacity() - curCodewordCount;\n        if (rest === 2) {\n            buffer.append('\\0'); // Shift 1\n            while (buffer.length() >= 3) {\n                this.writeNextTriplet(context, buffer);\n            }\n            if (context.hasMoreCharacters()) {\n                context.writeCodeword(C40_UNLATCH);\n            }\n        }\n        else if (available === 1 && rest === 1) {\n            while (buffer.length() >= 3) {\n                this.writeNextTriplet(context, buffer);\n            }\n            if (context.hasMoreCharacters()) {\n                context.writeCodeword(C40_UNLATCH);\n            }\n            // else no unlatch\n            context.pos--;\n        }\n        else if (rest === 0) {\n            while (buffer.length() >= 3) {\n                this.writeNextTriplet(context, buffer);\n            }\n            if (available > 0 || context.hasMoreCharacters()) {\n                context.writeCodeword(C40_UNLATCH);\n            }\n        }\n        else {\n            throw new Error('Unexpected case. Please report!');\n        }\n        context.signalEncoderChange(ASCII_ENCODATION);\n    };\n    C40Encoder.prototype.encodeChar = function (c, sb) {\n        if (c === ' '.charCodeAt(0)) {\n            sb.append(3);\n            return 1;\n        }\n        if (c >= '0'.charCodeAt(0) && c <= '9'.charCodeAt(0)) {\n            sb.append(c - 48 + 4);\n            return 1;\n        }\n        if (c >= 'A'.charCodeAt(0) && c <= 'Z'.charCodeAt(0)) {\n            sb.append(c - 65 + 14);\n            return 1;\n        }\n        if (c < ' '.charCodeAt(0)) {\n            sb.append(0); // Shift 1 Set\n            sb.append(c);\n            return 2;\n        }\n        if (c <= '/'.charCodeAt(0)) {\n            sb.append(1); // Shift 2 Set\n            sb.append(c - 33);\n            return 2;\n        }\n        if (c <= '@'.charCodeAt(0)) {\n            sb.append(1); // Shift 2 Set\n            sb.append(c - 58 + 15);\n            return 2;\n        }\n        if (c <= '_'.charCodeAt(0)) {\n            sb.append(1); // Shift 2 Set\n            sb.append(c - 91 + 22);\n            return 2;\n        }\n        if (c <= 127) {\n            sb.append(2); // Shift 3 Set\n            sb.append(c - 96);\n            return 2;\n        }\n        sb.append(1 + \"\\u001E\"); // Shift 2, Upper Shift\n        var len = 2;\n        len += this.encodeChar(c - 128, sb);\n        return len;\n    };\n    C40Encoder.prototype.encodeToCodewords = function (sb) {\n        var v = 1600 * sb.charCodeAt(0) + 40 * sb.charCodeAt(1) + sb.charCodeAt(2) + 1;\n        var cw1 = v / 256;\n        var cw2 = v % 256;\n        var result = new StringBuilder();\n        result.append(cw1);\n        result.append(cw2);\n        return result.toString();\n    };\n    return C40Encoder;\n}());\nexport { C40Encoder };\n", "import StringUtils from '../../common/StringUtils';\nimport StringBuilder from '../../util/StringBuilder';\nimport { EDIFACT_ENCODATION, ASCII_ENCODATION } from './constants';\nimport HighLevelEncoder from './HighLevelEncoder';\nvar EdifactEncoder = /** @class */ (function () {\n    function EdifactEncoder() {\n    }\n    EdifactEncoder.prototype.getEncodingMode = function () {\n        return EDIFACT_ENCODATION;\n    };\n    EdifactEncoder.prototype.encode = function (context) {\n        // step F\n        var buffer = new StringBuilder();\n        while (context.hasMoreCharacters()) {\n            var c = context.getCurrentChar();\n            this.encodeChar(c, buffer);\n            context.pos++;\n            var count = buffer.length();\n            if (count >= 4) {\n                context.writeCodewords(this.encodeToCodewords(buffer.toString()));\n                var test_1 = buffer.toString().substring(4);\n                buffer.setLengthToZero();\n                buffer.append(test_1);\n                // buffer.delete(0, 4);\n                // for (let i = 0; i < 4; i++) {\n                //  buffer.deleteCharAt(i);\n                // }\n                var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n                if (newMode !== this.getEncodingMode()) {\n                    // Return to ASCII encodation, which will actually handle latch to new mode\n                    context.signalEncoderChange(ASCII_ENCODATION);\n                    break;\n                }\n            }\n        }\n        buffer.append(StringUtils.getCharAt(31)); // Unlatch\n        this.handleEOD(context, buffer);\n    };\n    /**\n     * Handle \"end of data\" situations\n     *\n     * @param context the encoder context\n     * @param buffer  the buffer with the remaining encoded characters\n     */\n    EdifactEncoder.prototype.handleEOD = function (context, buffer) {\n        try {\n            var count = buffer.length();\n            if (count === 0) {\n                return; // Already finished\n            }\n            if (count === 1) {\n                // Only an unlatch at the end\n                context.updateSymbolInfo();\n                var available = context.getSymbolInfo().getDataCapacity() -\n                    context.getCodewordCount();\n                var remaining = context.getRemainingCharacters();\n                // The following two lines are a hack inspired by the 'fix' from https://sourceforge.net/p/barcode4j/svn/221/\n                if (remaining > available) {\n                    context.updateSymbolInfo(context.getCodewordCount() + 1);\n                    available =\n                        context.getSymbolInfo().getDataCapacity() -\n                            context.getCodewordCount();\n                }\n                if (remaining <= available && available <= 2) {\n                    return; // No unlatch\n                }\n            }\n            if (count > 4) {\n                throw new Error('Count must not exceed 4');\n            }\n            var restChars = count - 1;\n            var encoded = this.encodeToCodewords(buffer.toString());\n            var endOfSymbolReached = !context.hasMoreCharacters();\n            var restInAscii = endOfSymbolReached && restChars <= 2;\n            if (restChars <= 2) {\n                context.updateSymbolInfo(context.getCodewordCount() + restChars);\n                var available = context.getSymbolInfo().getDataCapacity() -\n                    context.getCodewordCount();\n                if (available >= 3) {\n                    restInAscii = false;\n                    context.updateSymbolInfo(context.getCodewordCount() + encoded.length);\n                    // available = context.symbolInfo.dataCapacity - context.getCodewordCount();\n                }\n            }\n            if (restInAscii) {\n                context.resetSymbolInfo();\n                context.pos -= restChars;\n            }\n            else {\n                context.writeCodewords(encoded);\n            }\n        }\n        finally {\n            context.signalEncoderChange(ASCII_ENCODATION);\n        }\n    };\n    EdifactEncoder.prototype.encodeChar = function (c, sb) {\n        if (c >= ' '.charCodeAt(0) && c <= '?'.charCodeAt(0)) {\n            sb.append(c);\n        }\n        else if (c >= '@'.charCodeAt(0) && c <= '^'.charCodeAt(0)) {\n            sb.append(StringUtils.getCharAt(c - 64));\n        }\n        else {\n            HighLevelEncoder.illegalCharacter(StringUtils.getCharAt(c));\n        }\n    };\n    EdifactEncoder.prototype.encodeToCodewords = function (sb) {\n        var len = sb.length;\n        if (len === 0) {\n            throw new Error('StringBuilder must not be empty');\n        }\n        var c1 = sb.charAt(0).charCodeAt(0);\n        var c2 = len >= 2 ? sb.charAt(1).charCodeAt(0) : 0;\n        var c3 = len >= 3 ? sb.charAt(2).charCodeAt(0) : 0;\n        var c4 = len >= 4 ? sb.charAt(3).charCodeAt(0) : 0;\n        var v = (c1 << 18) + (c2 << 12) + (c3 << 6) + c4;\n        var cw1 = (v >> 16) & 255;\n        var cw2 = (v >> 8) & 255;\n        var cw3 = v & 255;\n        var res = new StringBuilder();\n        res.append(cw1);\n        if (len >= 2) {\n            res.append(cw2);\n        }\n        if (len >= 3) {\n            res.append(cw3);\n        }\n        return res.toString();\n    };\n    return EdifactEncoder;\n}());\nexport { EdifactEncoder };\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/**\n * Symbol info table for DataMatrix.\n */\nvar SymbolInfo = /** @class */ (function () {\n    function SymbolInfo(rectangular, dataCapacity, errorCodewords, matrixWidth, matrixHeight, dataRegions, rsBlockData, rsBlockError) {\n        if (rsBlockData === void 0) { rsBlockData = 0; }\n        if (rsBlockError === void 0) { rsBlockError = 0; }\n        this.rectangular = rectangular;\n        this.dataCapacity = dataCapacity;\n        this.errorCodewords = errorCodewords;\n        this.matrixWidth = matrixWidth;\n        this.matrixHeight = matrixHeight;\n        this.dataRegions = dataRegions;\n        this.rsBlockData = rsBlockData;\n        this.rsBlockError = rsBlockError;\n    }\n    SymbolInfo.lookup = function (dataCodewords, shape, minSize, maxSize, fail) {\n        var e_1, _a;\n        if (shape === void 0) { shape = 0 /* FORCE_NONE */; }\n        if (minSize === void 0) { minSize = null; }\n        if (maxSize === void 0) { maxSize = null; }\n        if (fail === void 0) { fail = true; }\n        try {\n            for (var PROD_SYMBOLS_1 = __values(PROD_SYMBOLS), PROD_SYMBOLS_1_1 = PROD_SYMBOLS_1.next(); !PROD_SYMBOLS_1_1.done; PROD_SYMBOLS_1_1 = PROD_SYMBOLS_1.next()) {\n                var symbol = PROD_SYMBOLS_1_1.value;\n                if (shape === 1 /* FORCE_SQUARE */ && symbol.rectangular) {\n                    continue;\n                }\n                if (shape === 2 /* FORCE_RECTANGLE */ && !symbol.rectangular) {\n                    continue;\n                }\n                if (minSize != null &&\n                    (symbol.getSymbolWidth() < minSize.getWidth() ||\n                        symbol.getSymbolHeight() < minSize.getHeight())) {\n                    continue;\n                }\n                if (maxSize != null &&\n                    (symbol.getSymbolWidth() > maxSize.getWidth() ||\n                        symbol.getSymbolHeight() > maxSize.getHeight())) {\n                    continue;\n                }\n                if (dataCodewords <= symbol.dataCapacity) {\n                    return symbol;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (PROD_SYMBOLS_1_1 && !PROD_SYMBOLS_1_1.done && (_a = PROD_SYMBOLS_1.return)) _a.call(PROD_SYMBOLS_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        if (fail) {\n            throw new Error(\"Can't find a symbol arrangement that matches the message. Data codewords: \" +\n                dataCodewords);\n        }\n        return null;\n    };\n    SymbolInfo.prototype.getHorizontalDataRegions = function () {\n        switch (this.dataRegions) {\n            case 1:\n                return 1;\n            case 2:\n            case 4:\n                return 2;\n            case 16:\n                return 4;\n            case 36:\n                return 6;\n            default:\n                throw new Error('Cannot handle this number of data regions');\n        }\n    };\n    SymbolInfo.prototype.getVerticalDataRegions = function () {\n        switch (this.dataRegions) {\n            case 1:\n            case 2:\n                return 1;\n            case 4:\n                return 2;\n            case 16:\n                return 4;\n            case 36:\n                return 6;\n            default:\n                throw new Error('Cannot handle this number of data regions');\n        }\n    };\n    SymbolInfo.prototype.getSymbolDataWidth = function () {\n        return this.getHorizontalDataRegions() * this.matrixWidth;\n    };\n    SymbolInfo.prototype.getSymbolDataHeight = function () {\n        return this.getVerticalDataRegions() * this.matrixHeight;\n    };\n    SymbolInfo.prototype.getSymbolWidth = function () {\n        return this.getSymbolDataWidth() + this.getHorizontalDataRegions() * 2;\n    };\n    SymbolInfo.prototype.getSymbolHeight = function () {\n        return this.getSymbolDataHeight() + this.getVerticalDataRegions() * 2;\n    };\n    SymbolInfo.prototype.getCodewordCount = function () {\n        return this.dataCapacity + this.errorCodewords;\n    };\n    SymbolInfo.prototype.getInterleavedBlockCount = function () {\n        if (!this.rsBlockData)\n            return 1;\n        return this.dataCapacity / this.rsBlockData;\n    };\n    SymbolInfo.prototype.getDataCapacity = function () {\n        return this.dataCapacity;\n    };\n    SymbolInfo.prototype.getErrorCodewords = function () {\n        return this.errorCodewords;\n    };\n    SymbolInfo.prototype.getDataLengthForInterleavedBlock = function (index) {\n        return this.rsBlockData;\n    };\n    SymbolInfo.prototype.getErrorLengthForInterleavedBlock = function (index) {\n        return this.rsBlockError;\n    };\n    return SymbolInfo;\n}());\nexport default SymbolInfo;\nvar DataMatrixSymbolInfo144 = /** @class */ (function (_super) {\n    __extends(DataMatrixSymbolInfo144, _super);\n    function DataMatrixSymbolInfo144() {\n        return _super.call(this, false, 1558, 620, 22, 22, 36, -1, 62) || this;\n    }\n    DataMatrixSymbolInfo144.prototype.getInterleavedBlockCount = function () {\n        return 10;\n    };\n    DataMatrixSymbolInfo144.prototype.getDataLengthForInterleavedBlock = function (index) {\n        return index <= 8 ? 156 : 155;\n    };\n    return DataMatrixSymbolInfo144;\n}(SymbolInfo));\nexport var PROD_SYMBOLS = [\n    new SymbolInfo(false, 3, 5, 8, 8, 1),\n    new SymbolInfo(false, 5, 7, 10, 10, 1),\n    /*rect*/ new SymbolInfo(true, 5, 7, 16, 6, 1),\n    new SymbolInfo(false, 8, 10, 12, 12, 1),\n    /*rect*/ new SymbolInfo(true, 10, 11, 14, 6, 2),\n    new SymbolInfo(false, 12, 12, 14, 14, 1),\n    /*rect*/ new SymbolInfo(true, 16, 14, 24, 10, 1),\n    new SymbolInfo(false, 18, 14, 16, 16, 1),\n    new SymbolInfo(false, 22, 18, 18, 18, 1),\n    /*rect*/ new SymbolInfo(true, 22, 18, 16, 10, 2),\n    new SymbolInfo(false, 30, 20, 20, 20, 1),\n    /*rect*/ new SymbolInfo(true, 32, 24, 16, 14, 2),\n    new SymbolInfo(false, 36, 24, 22, 22, 1),\n    new SymbolInfo(false, 44, 28, 24, 24, 1),\n    /*rect*/ new SymbolInfo(true, 49, 28, 22, 14, 2),\n    new SymbolInfo(false, 62, 36, 14, 14, 4),\n    new SymbolInfo(false, 86, 42, 16, 16, 4),\n    new SymbolInfo(false, 114, 48, 18, 18, 4),\n    new SymbolInfo(false, 144, 56, 20, 20, 4),\n    new SymbolInfo(false, 174, 68, 22, 22, 4),\n    new SymbolInfo(false, 204, 84, 24, 24, 4, 102, 42),\n    new SymbolInfo(false, 280, 112, 14, 14, 16, 140, 56),\n    new SymbolInfo(false, 368, 144, 16, 16, 16, 92, 36),\n    new SymbolInfo(false, 456, 192, 18, 18, 16, 114, 48),\n    new SymbolInfo(false, 576, 224, 20, 20, 16, 144, 56),\n    new SymbolInfo(false, 696, 272, 22, 22, 16, 174, 68),\n    new SymbolInfo(false, 816, 336, 24, 24, 16, 136, 56),\n    new SymbolInfo(false, 1050, 408, 18, 18, 36, 175, 68),\n    new SymbolInfo(false, 1304, 496, 20, 20, 36, 163, 62),\n    new DataMatrixSymbolInfo144(),\n];\n", "import StringBuilder from '../../util/StringBuilder';\nimport SymbolInfo from './SymbolInfo';\nvar EncoderContext = /** @class */ (function () {\n    function EncoderContext(msg) {\n        this.msg = msg;\n        this.pos = 0;\n        this.skipAtEnd = 0;\n        // From this point on Strings are not Unicode anymore!\n        var msgBinary = msg.split('').map(function (c) { return c.charCodeAt(0); });\n        var sb = new StringBuilder();\n        for (var i = 0, c = msgBinary.length; i < c; i++) {\n            var ch = String.fromCharCode(msgBinary[i] & 0xff);\n            if (ch === '?' && msg.charAt(i) !== '?') {\n                throw new Error('Message contains characters outside ISO-8859-1 encoding.');\n            }\n            sb.append(ch);\n        }\n        this.msg = sb.toString(); // Not Unicode here!\n        this.shape = 0 /* FORCE_NONE */;\n        this.codewords = new StringBuilder();\n        this.newEncoding = -1;\n    }\n    EncoderContext.prototype.setSymbolShape = function (shape) {\n        this.shape = shape;\n    };\n    EncoderContext.prototype.setSizeConstraints = function (minSize, maxSize) {\n        this.minSize = minSize;\n        this.maxSize = maxSize;\n    };\n    EncoderContext.prototype.getMessage = function () {\n        return this.msg;\n    };\n    EncoderContext.prototype.setSkipAtEnd = function (count) {\n        this.skipAtEnd = count;\n    };\n    EncoderContext.prototype.getCurrentChar = function () {\n        return this.msg.charCodeAt(this.pos);\n    };\n    EncoderContext.prototype.getCurrent = function () {\n        return this.msg.charCodeAt(this.pos);\n    };\n    EncoderContext.prototype.getCodewords = function () {\n        return this.codewords;\n    };\n    EncoderContext.prototype.writeCodewords = function (codewords) {\n        this.codewords.append(codewords);\n    };\n    EncoderContext.prototype.writeCodeword = function (codeword) {\n        this.codewords.append(codeword);\n    };\n    EncoderContext.prototype.getCodewordCount = function () {\n        return this.codewords.length();\n    };\n    EncoderContext.prototype.getNewEncoding = function () {\n        return this.newEncoding;\n    };\n    EncoderContext.prototype.signalEncoderChange = function (encoding) {\n        this.newEncoding = encoding;\n    };\n    EncoderContext.prototype.resetEncoderSignal = function () {\n        this.newEncoding = -1;\n    };\n    EncoderContext.prototype.hasMoreCharacters = function () {\n        return this.pos < this.getTotalMessageCharCount();\n    };\n    EncoderContext.prototype.getTotalMessageCharCount = function () {\n        return this.msg.length - this.skipAtEnd;\n    };\n    EncoderContext.prototype.getRemainingCharacters = function () {\n        return this.getTotalMessageCharCount() - this.pos;\n    };\n    EncoderContext.prototype.getSymbolInfo = function () {\n        return this.symbolInfo;\n    };\n    EncoderContext.prototype.updateSymbolInfo = function (len) {\n        if (len === void 0) { len = this.getCodewordCount(); }\n        if (this.symbolInfo == null || len > this.symbolInfo.getDataCapacity()) {\n            this.symbolInfo = SymbolInfo.lookup(len, this.shape, this.minSize, this.maxSize, true);\n        }\n    };\n    EncoderContext.prototype.resetSymbolInfo = function () {\n        this.symbolInfo = null;\n    };\n    return EncoderContext;\n}());\nexport { EncoderContext };\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport StringUtils from '../../common/StringUtils';\nimport StringBuilder from '../../util/StringBuilder';\nimport { C40Encoder } from './C40Encoder';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { X12_ENCODATION, ASCII_ENCODATION, X12_UNLATCH } from './constants';\nvar X12Encoder = /** @class */ (function (_super) {\n    __extends(X12Encoder, _super);\n    function X12Encoder() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    X12Encoder.prototype.getEncodingMode = function () {\n        return X12_ENCODATION;\n    };\n    X12Encoder.prototype.encode = function (context) {\n        // step C\n        var buffer = new StringBuilder();\n        while (context.hasMoreCharacters()) {\n            var c = context.getCurrentChar();\n            context.pos++;\n            this.encodeChar(c, buffer);\n            var count = buffer.length();\n            if (count % 3 === 0) {\n                this.writeNextTriplet(context, buffer);\n                var newMode = HighLevelEncoder.lookAheadTest(context.getMessage(), context.pos, this.getEncodingMode());\n                if (newMode !== this.getEncodingMode()) {\n                    // Return to ASCII encodation, which will actually handle latch to new mode\n                    context.signalEncoderChange(ASCII_ENCODATION);\n                    break;\n                }\n            }\n        }\n        this.handleEOD(context, buffer);\n    };\n    X12Encoder.prototype.encodeChar = function (c, sb) {\n        switch (c) {\n            case 13: // CR (Carriage return)\n                sb.append(0);\n                break;\n            case '*'.charCodeAt(0):\n                sb.append(1);\n                break;\n            case '>'.charCodeAt(0):\n                sb.append(2);\n                break;\n            case ' '.charCodeAt(0):\n                sb.append(3);\n                break;\n            default:\n                if (c >= '0'.charCodeAt(0) && c <= '9'.charCodeAt(0)) {\n                    sb.append(c - 48 + 4);\n                }\n                else if (c >= 'A'.charCodeAt(0) && c <= 'Z'.charCodeAt(0)) {\n                    sb.append(c - 65 + 14);\n                }\n                else {\n                    HighLevelEncoder.illegalCharacter(StringUtils.getCharAt(c));\n                }\n                break;\n        }\n        return 1;\n    };\n    X12Encoder.prototype.handleEOD = function (context, buffer) {\n        context.updateSymbolInfo();\n        var available = context.getSymbolInfo().getDataCapacity() - context.getCodewordCount();\n        var count = buffer.length();\n        context.pos -= count;\n        if (context.getRemainingCharacters() > 1 ||\n            available > 1 ||\n            context.getRemainingCharacters() !== available) {\n            context.writeCodeword(X12_UNLATCH);\n        }\n        if (context.getNewEncoding() < 0) {\n            context.signalEncoderChange(ASCII_ENCODATION);\n        }\n    };\n    return X12Encoder;\n}(C40Encoder));\nexport { X12Encoder };\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport { C40Encoder } from './C40Encoder';\nimport { TEXT_ENCODATION } from './constants';\nvar TextEncoder = /** @class */ (function (_super) {\n    __extends(TextEncoder, _super);\n    function TextEncoder() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    TextEncoder.prototype.getEncodingMode = function () {\n        return TEXT_ENCODATION;\n    };\n    TextEncoder.prototype.encodeChar = function (c, sb) {\n        if (c === ' '.charCodeAt(0)) {\n            sb.append(3);\n            return 1;\n        }\n        if (c >= '0'.charCodeAt(0) && c <= '9'.charCodeAt(0)) {\n            sb.append(c - 48 + 4);\n            return 1;\n        }\n        if (c >= 'a'.charCodeAt(0) && c <= 'z'.charCodeAt(0)) {\n            sb.append(c - 97 + 14);\n            return 1;\n        }\n        if (c < ' '.charCodeAt(0)) {\n            sb.append(0); // Shift 1 Set\n            sb.append(c);\n            return 2;\n        }\n        if (c <= '/'.charCodeAt(0)) {\n            sb.append(1); // Shift 2 Set\n            sb.append(c - 33);\n            return 2;\n        }\n        if (c <= '@'.charCodeAt(0)) {\n            sb.append(1); // Shift 2 Set\n            sb.append(c - 58 + 15);\n            return 2;\n        }\n        if (c >= '['.charCodeAt(0) && c <= '_'.charCodeAt(0)) {\n            sb.append(1); // Shift 2 Set\n            sb.append(c - 91 + 22);\n            return 2;\n        }\n        if (c === '`'.charCodeAt(0)) {\n            sb.append(2); // Shift 3 Set\n            sb.append(0); // '`' - 96 == 0\n            return 2;\n        }\n        if (c <= 'Z'.charCodeAt(0)) {\n            sb.append(2); // Shift 3 Set\n            sb.append(c - 65 + 1);\n            return 2;\n        }\n        if (c <= 127) {\n            sb.append(2); // Shift 3 Set\n            sb.append(c - 123 + 27);\n            return 2;\n        }\n        sb.append(1 + \"\\u001E\"); // Shift 2, Upper Shift\n        var len = 2;\n        len += this.encodeChar(c - 128, sb);\n        return len;\n    };\n    return TextEncoder;\n}(C40Encoder));\nexport { TextEncoder };\n", "// tslint:disable-next-line:no-circular-imports\nimport { ASCIIEncoder } from './ASCIIEncoder';\n// tslint:disable-next-line:no-circular-imports\nimport { Base256Encoder } from './Base256Encoder';\n// tslint:disable-next-line:no-circular-imports\nimport { C40Encoder } from './C40Encoder';\nimport { ASCII_ENCODATION, BASE256_ENCODATION, C40_ENCODATION, EDIFACT_ENCODATION, MACRO_05, MACRO_05_HEADER, MACRO_06, MACRO_06_HEADER, MACRO_TRAILER, PAD, TEXT_ENCODATION, X12_ENCODATION, } from './constants';\n// tslint:disable-next-line:no-circular-imports\nimport { EdifactEncoder } from './EdifactEncoder';\nimport { EncoderContext } from './EncoderContext';\n// tslint:disable-next-line:no-circular-imports\nimport { X12Encoder } from './X12Encoder';\n// tslint:disable-next-line:no-circular-imports\nimport { TextEncoder } from './TextEncoder';\nimport Arrays from '../../util/Arrays';\nimport Integer from '../../util/Integer';\n/**\n * DataMatrix ECC 200 data encoder following the algorithm described in ISO/IEC 16022:200(E) in\n * annex S.\n */\nvar HighLevelEncoder = /** @class */ (function () {\n    function HighLevelEncoder() {\n    }\n    HighLevelEncoder.randomize253State = function (codewordPosition) {\n        var pseudoRandom = ((149 * codewordPosition) % 253) + 1;\n        var tempVariable = PAD + pseudoRandom;\n        return tempVariable <= 254 ? tempVariable : tempVariable - 254;\n    };\n    /**\n     * Performs message encoding of a DataMatrix message using the algorithm described in annex P\n     * of ISO/IEC 16022:2000(E).\n     *\n     * @param msg     the message\n     * @param shape   requested shape. May be {@code SymbolShapeHint.FORCE_NONE},\n     *                {@code SymbolShapeHint.FORCE_SQUARE} or {@code SymbolShapeHint.FORCE_RECTANGLE}.\n     * @param minSize the minimum symbol size constraint or null for no constraint\n     * @param maxSize the maximum symbol size constraint or null for no constraint\n     * @param forceC40 enforce C40 encoding\n     * @return the encoded message (the char values range from 0 to 255)\n     */\n    HighLevelEncoder.encodeHighLevel = function (msg, shape, minSize, maxSize, forceC40) {\n        if (shape === void 0) { shape = 0 /* FORCE_NONE */; }\n        if (minSize === void 0) { minSize = null; }\n        if (maxSize === void 0) { maxSize = null; }\n        if (forceC40 === void 0) { forceC40 = false; }\n        // the codewords 0..255 are encoded as Unicode characters\n        var c40Encoder = new C40Encoder();\n        var encoders = [\n            new ASCIIEncoder(),\n            c40Encoder,\n            new TextEncoder(),\n            new X12Encoder(),\n            new EdifactEncoder(),\n            new Base256Encoder(),\n        ];\n        var context = new EncoderContext(msg);\n        context.setSymbolShape(shape);\n        context.setSizeConstraints(minSize, maxSize);\n        if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {\n            context.writeCodeword(MACRO_05);\n            context.setSkipAtEnd(2);\n            context.pos += MACRO_05_HEADER.length;\n        }\n        else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {\n            context.writeCodeword(MACRO_06);\n            context.setSkipAtEnd(2);\n            context.pos += MACRO_06_HEADER.length;\n        }\n        var encodingMode = ASCII_ENCODATION; // Default mode\n        if (forceC40) {\n            c40Encoder.encodeMaximal(context);\n            encodingMode = context.getNewEncoding();\n            context.resetEncoderSignal();\n        }\n        while (context.hasMoreCharacters()) {\n            encoders[encodingMode].encode(context);\n            if (context.getNewEncoding() >= 0) {\n                encodingMode = context.getNewEncoding();\n                context.resetEncoderSignal();\n            }\n        }\n        var len = context.getCodewordCount();\n        context.updateSymbolInfo();\n        var capacity = context.getSymbolInfo().getDataCapacity();\n        if (len < capacity &&\n            encodingMode !== ASCII_ENCODATION &&\n            encodingMode !== BASE256_ENCODATION &&\n            encodingMode !== EDIFACT_ENCODATION) {\n            context.writeCodeword('\\u00fe'); // Unlatch (254)\n        }\n        // Padding\n        var codewords = context.getCodewords();\n        if (codewords.length() < capacity) {\n            codewords.append(PAD);\n        }\n        while (codewords.length() < capacity) {\n            codewords.append(this.randomize253State(codewords.length() + 1));\n        }\n        return context.getCodewords().toString();\n    };\n    HighLevelEncoder.lookAheadTest = function (msg, startpos, currentMode) {\n        var newMode = this.lookAheadTestIntern(msg, startpos, currentMode);\n        if (currentMode === X12_ENCODATION && newMode === X12_ENCODATION) {\n            var endpos = Math.min(startpos + 3, msg.length);\n            for (var i = startpos; i < endpos; i++) {\n                if (!this.isNativeX12(msg.charCodeAt(i))) {\n                    return ASCII_ENCODATION;\n                }\n            }\n        }\n        else if (currentMode === EDIFACT_ENCODATION &&\n            newMode === EDIFACT_ENCODATION) {\n            var endpos = Math.min(startpos + 4, msg.length);\n            for (var i = startpos; i < endpos; i++) {\n                if (!this.isNativeEDIFACT(msg.charCodeAt(i))) {\n                    return ASCII_ENCODATION;\n                }\n            }\n        }\n        return newMode;\n    };\n    HighLevelEncoder.lookAheadTestIntern = function (msg, startpos, currentMode) {\n        if (startpos >= msg.length) {\n            return currentMode;\n        }\n        var charCounts;\n        // step J\n        if (currentMode === ASCII_ENCODATION) {\n            charCounts = [0, 1, 1, 1, 1, 1.25];\n        }\n        else {\n            charCounts = [1, 2, 2, 2, 2, 2.25];\n            charCounts[currentMode] = 0;\n        }\n        var charsProcessed = 0;\n        var mins = new Uint8Array(6);\n        var intCharCounts = [];\n        while (true) {\n            // step K\n            if (startpos + charsProcessed === msg.length) {\n                Arrays.fill(mins, 0);\n                Arrays.fill(intCharCounts, 0);\n                var min = this.findMinimums(charCounts, intCharCounts, Integer.MAX_VALUE, mins);\n                var minCount = this.getMinimumCount(mins);\n                if (intCharCounts[ASCII_ENCODATION] === min) {\n                    return ASCII_ENCODATION;\n                }\n                if (minCount === 1) {\n                    if (mins[BASE256_ENCODATION] > 0) {\n                        return BASE256_ENCODATION;\n                    }\n                    if (mins[EDIFACT_ENCODATION] > 0) {\n                        return EDIFACT_ENCODATION;\n                    }\n                    if (mins[TEXT_ENCODATION] > 0) {\n                        return TEXT_ENCODATION;\n                    }\n                    if (mins[X12_ENCODATION] > 0) {\n                        return X12_ENCODATION;\n                    }\n                }\n                return C40_ENCODATION;\n            }\n            var c = msg.charCodeAt(startpos + charsProcessed);\n            charsProcessed++;\n            // step L\n            if (this.isDigit(c)) {\n                charCounts[ASCII_ENCODATION] += 0.5;\n            }\n            else if (this.isExtendedASCII(c)) {\n                charCounts[ASCII_ENCODATION] = Math.ceil(charCounts[ASCII_ENCODATION]);\n                charCounts[ASCII_ENCODATION] += 2.0;\n            }\n            else {\n                charCounts[ASCII_ENCODATION] = Math.ceil(charCounts[ASCII_ENCODATION]);\n                charCounts[ASCII_ENCODATION]++;\n            }\n            // step M\n            if (this.isNativeC40(c)) {\n                charCounts[C40_ENCODATION] += 2.0 / 3.0;\n            }\n            else if (this.isExtendedASCII(c)) {\n                charCounts[C40_ENCODATION] += 8.0 / 3.0;\n            }\n            else {\n                charCounts[C40_ENCODATION] += 4.0 / 3.0;\n            }\n            // step N\n            if (this.isNativeText(c)) {\n                charCounts[TEXT_ENCODATION] += 2.0 / 3.0;\n            }\n            else if (this.isExtendedASCII(c)) {\n                charCounts[TEXT_ENCODATION] += 8.0 / 3.0;\n            }\n            else {\n                charCounts[TEXT_ENCODATION] += 4.0 / 3.0;\n            }\n            // step O\n            if (this.isNativeX12(c)) {\n                charCounts[X12_ENCODATION] += 2.0 / 3.0;\n            }\n            else if (this.isExtendedASCII(c)) {\n                charCounts[X12_ENCODATION] += 13.0 / 3.0;\n            }\n            else {\n                charCounts[X12_ENCODATION] += 10.0 / 3.0;\n            }\n            // step P\n            if (this.isNativeEDIFACT(c)) {\n                charCounts[EDIFACT_ENCODATION] += 3.0 / 4.0;\n            }\n            else if (this.isExtendedASCII(c)) {\n                charCounts[EDIFACT_ENCODATION] += 17.0 / 4.0;\n            }\n            else {\n                charCounts[EDIFACT_ENCODATION] += 13.0 / 4.0;\n            }\n            // step Q\n            if (this.isSpecialB256(c)) {\n                charCounts[BASE256_ENCODATION] += 4.0;\n            }\n            else {\n                charCounts[BASE256_ENCODATION]++;\n            }\n            // step R\n            if (charsProcessed >= 4) {\n                Arrays.fill(mins, 0);\n                Arrays.fill(intCharCounts, 0);\n                this.findMinimums(charCounts, intCharCounts, Integer.MAX_VALUE, mins);\n                if (intCharCounts[ASCII_ENCODATION] <\n                    this.min(intCharCounts[BASE256_ENCODATION], intCharCounts[C40_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[EDIFACT_ENCODATION])) {\n                    return ASCII_ENCODATION;\n                }\n                if (intCharCounts[BASE256_ENCODATION] < intCharCounts[ASCII_ENCODATION] ||\n                    intCharCounts[BASE256_ENCODATION] + 1 <\n                        this.min(intCharCounts[C40_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[EDIFACT_ENCODATION])) {\n                    return BASE256_ENCODATION;\n                }\n                if (intCharCounts[EDIFACT_ENCODATION] + 1 <\n                    this.min(intCharCounts[BASE256_ENCODATION], intCharCounts[C40_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[ASCII_ENCODATION])) {\n                    return EDIFACT_ENCODATION;\n                }\n                if (intCharCounts[TEXT_ENCODATION] + 1 <\n                    this.min(intCharCounts[BASE256_ENCODATION], intCharCounts[C40_ENCODATION], intCharCounts[EDIFACT_ENCODATION], intCharCounts[X12_ENCODATION], intCharCounts[ASCII_ENCODATION])) {\n                    return TEXT_ENCODATION;\n                }\n                if (intCharCounts[X12_ENCODATION] + 1 <\n                    this.min(intCharCounts[BASE256_ENCODATION], intCharCounts[C40_ENCODATION], intCharCounts[EDIFACT_ENCODATION], intCharCounts[TEXT_ENCODATION], intCharCounts[ASCII_ENCODATION])) {\n                    return X12_ENCODATION;\n                }\n                if (intCharCounts[C40_ENCODATION] + 1 <\n                    this.min(intCharCounts[ASCII_ENCODATION], intCharCounts[BASE256_ENCODATION], intCharCounts[EDIFACT_ENCODATION], intCharCounts[TEXT_ENCODATION])) {\n                    if (intCharCounts[C40_ENCODATION] < intCharCounts[X12_ENCODATION]) {\n                        return C40_ENCODATION;\n                    }\n                    if (intCharCounts[C40_ENCODATION] === intCharCounts[X12_ENCODATION]) {\n                        var p = startpos + charsProcessed + 1;\n                        while (p < msg.length) {\n                            var tc = msg.charCodeAt(p);\n                            if (this.isX12TermSep(tc)) {\n                                return X12_ENCODATION;\n                            }\n                            if (!this.isNativeX12(tc)) {\n                                break;\n                            }\n                            p++;\n                        }\n                        return C40_ENCODATION;\n                    }\n                }\n            }\n        }\n    };\n    HighLevelEncoder.min = function (f1, f2, f3, f4, f5) {\n        var val = Math.min(f1, Math.min(f2, Math.min(f3, f4)));\n        if (f5 === undefined) {\n            return val;\n        }\n        else {\n            return Math.min(val, f5);\n        }\n    };\n    HighLevelEncoder.findMinimums = function (charCounts, intCharCounts, min, mins) {\n        for (var i = 0; i < 6; i++) {\n            var current = (intCharCounts[i] = Math.ceil(charCounts[i]));\n            if (min > current) {\n                min = current;\n                Arrays.fill(mins, 0);\n            }\n            if (min === current) {\n                mins[i] = mins[i] + 1;\n            }\n        }\n        return min;\n    };\n    HighLevelEncoder.getMinimumCount = function (mins) {\n        var minCount = 0;\n        for (var i = 0; i < 6; i++) {\n            minCount += mins[i];\n        }\n        return minCount || 0;\n    };\n    HighLevelEncoder.isDigit = function (ch) {\n        return ch >= '0'.charCodeAt(0) && ch <= '9'.charCodeAt(0);\n    };\n    HighLevelEncoder.isExtendedASCII = function (ch) {\n        return ch >= 128 && ch <= 255;\n    };\n    HighLevelEncoder.isNativeC40 = function (ch) {\n        return (ch === ' '.charCodeAt(0) ||\n            (ch >= '0'.charCodeAt(0) && ch <= '9'.charCodeAt(0)) ||\n            (ch >= 'A'.charCodeAt(0) && ch <= 'Z'.charCodeAt(0)));\n    };\n    HighLevelEncoder.isNativeText = function (ch) {\n        return (ch === ' '.charCodeAt(0) ||\n            (ch >= '0'.charCodeAt(0) && ch <= '9'.charCodeAt(0)) ||\n            (ch >= 'a'.charCodeAt(0) && ch <= 'z'.charCodeAt(0)));\n    };\n    HighLevelEncoder.isNativeX12 = function (ch) {\n        return (this.isX12TermSep(ch) ||\n            ch === ' '.charCodeAt(0) ||\n            (ch >= '0'.charCodeAt(0) && ch <= '9'.charCodeAt(0)) ||\n            (ch >= 'A'.charCodeAt(0) && ch <= 'Z'.charCodeAt(0)));\n    };\n    HighLevelEncoder.isX12TermSep = function (ch) {\n        return (ch === 13 || // CR\n            ch === '*'.charCodeAt(0) ||\n            ch === '>'.charCodeAt(0));\n    };\n    HighLevelEncoder.isNativeEDIFACT = function (ch) {\n        return ch >= ' '.charCodeAt(0) && ch <= '^'.charCodeAt(0);\n    };\n    HighLevelEncoder.isSpecialB256 = function (ch) {\n        return false; // TODO NOT IMPLEMENTED YET!!!\n    };\n    /**\n     * Determines the number of consecutive characters that are encodable using numeric compaction.\n     *\n     * @param msg      the message\n     * @param startpos the start position within the message\n     * @return the requested character count\n     */\n    HighLevelEncoder.determineConsecutiveDigitCount = function (msg, startpos) {\n        if (startpos === void 0) { startpos = 0; }\n        var len = msg.length;\n        var idx = startpos;\n        while (idx < len && this.isDigit(msg.charCodeAt(idx))) {\n            idx++;\n        }\n        return idx - startpos;\n    };\n    HighLevelEncoder.illegalCharacter = function (singleCharacter) {\n        var hex = Integer.toHexString(singleCharacter.charCodeAt(0));\n        hex = '0000'.substring(0, 4 - hex.length) + hex;\n        throw new Error('Illegal character: ' + singleCharacter + ' (0x' + hex + ')');\n    };\n    return HighLevelEncoder;\n}());\nexport default HighLevelEncoder;\n", "/**\n * Set of CharsetEncoders for a given input string\n *\n * Invariants:\n * - The list contains only encoders from CharacterSetECI (list is shorter then the list of encoders available on\n *   the platform for which ECI values are defined).\n * - The list contains encoders at least one encoder for every character in the input.\n * - The first encoder in the list is always the ISO-8859-1 encoder even of no character in the input can be encoded\n *       by it.\n * - If the input contains a character that is not in ISO-8859-1 then the last two entries in the list will be the\n *   UTF-8 encoder and the UTF-16BE encoder.\n *\n * @author Alex Geller\n */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport Charset from '../util/Charset';\nimport StandardCharsets from '../util/StandardCharsets';\nimport StringEncoding from '../util/StringEncoding';\nimport StringUtils from './StringUtils';\nvar CharsetEncoder = /** @class */ (function () {\n    function CharsetEncoder(charset) {\n        this.charset = charset;\n        this.name = charset.name;\n    }\n    CharsetEncoder.prototype.canEncode = function (c) {\n        try {\n            return StringEncoding.encode(c, this.charset) != null;\n        }\n        catch (ex) {\n            return false;\n        }\n    };\n    return CharsetEncoder;\n}());\nvar ECIEncoderSet = /** @class */ (function () {\n    /**\n     * Constructs an encoder set\n     *\n     * @param stringToEncode the string that needs to be encoded\n     * @param priorityCharset The preferred {@link Charset} or null.\n     * @param fnc1 fnc1 denotes the character in the input that represents the FNC1 character or -1 for a non-GS1 bar\n     * code. When specified, it is considered an error to pass it as argument to the methods canEncode() or encode().\n     */\n    function ECIEncoderSet(stringToEncode, priorityCharset, fnc1) {\n        var e_1, _a, e_2, _b, e_3, _c;\n        this.ENCODERS = [\n            'IBM437',\n            'ISO-8859-2',\n            'ISO-8859-3',\n            'ISO-8859-4',\n            'ISO-8859-5',\n            'ISO-8859-6',\n            'ISO-8859-7',\n            'ISO-8859-8',\n            'ISO-8859-9',\n            'ISO-8859-10',\n            'ISO-8859-11',\n            'ISO-8859-13',\n            'ISO-8859-14',\n            'ISO-8859-15',\n            'ISO-8859-16',\n            'windows-1250',\n            'windows-1251',\n            'windows-1252',\n            'windows-1256',\n            'Shift_JIS',\n        ].map(function (name) { return new CharsetEncoder(Charset.forName(name)); });\n        this.encoders = [];\n        var neededEncoders = [];\n        // we always need the ISO-8859-1 encoder. It is the default encoding\n        neededEncoders.push(new CharsetEncoder(StandardCharsets.ISO_8859_1));\n        var needUnicodeEncoder = priorityCharset != null && priorityCharset.name.startsWith('UTF');\n        // Walk over the input string and see if all characters can be encoded with the list of encoders\n        for (var i = 0; i < stringToEncode.length; i++) {\n            var canEncode = false;\n            try {\n                for (var neededEncoders_1 = (e_1 = void 0, __values(neededEncoders)), neededEncoders_1_1 = neededEncoders_1.next(); !neededEncoders_1_1.done; neededEncoders_1_1 = neededEncoders_1.next()) {\n                    var encoder = neededEncoders_1_1.value;\n                    var singleCharacter = stringToEncode.charAt(i);\n                    var c = singleCharacter.charCodeAt(0);\n                    if (c === fnc1 || encoder.canEncode(singleCharacter)) {\n                        canEncode = true;\n                        break;\n                    }\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (neededEncoders_1_1 && !neededEncoders_1_1.done && (_a = neededEncoders_1.return)) _a.call(neededEncoders_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n            if (!canEncode) {\n                try {\n                    // for the character at position i we don't yet have an encoder in the list\n                    for (var _d = (e_2 = void 0, __values(this.ENCODERS)), _e = _d.next(); !_e.done; _e = _d.next()) {\n                        var encoder = _e.value;\n                        if (encoder.canEncode(stringToEncode.charAt(i))) {\n                            // Good, we found an encoder that can encode the character. We add him to the list and continue scanning\n                            // the input\n                            neededEncoders.push(encoder);\n                            canEncode = true;\n                            break;\n                        }\n                    }\n                }\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                finally {\n                    try {\n                        if (_e && !_e.done && (_b = _d.return)) _b.call(_d);\n                    }\n                    finally { if (e_2) throw e_2.error; }\n                }\n            }\n            if (!canEncode) {\n                // The character is not encodeable by any of the single byte encoders so we remember that we will need a\n                // Unicode encoder.\n                needUnicodeEncoder = true;\n            }\n        }\n        if (neededEncoders.length === 1 && !needUnicodeEncoder) {\n            // the entire input can be encoded by the ISO-8859-1 encoder\n            this.encoders = [neededEncoders[0]];\n        }\n        else {\n            // we need more than one single byte encoder or we need a Unicode encoder.\n            // In this case we append a UTF-8 and UTF-16 encoder to the list\n            this.encoders = [];\n            var index = 0;\n            try {\n                for (var neededEncoders_2 = __values(neededEncoders), neededEncoders_2_1 = neededEncoders_2.next(); !neededEncoders_2_1.done; neededEncoders_2_1 = neededEncoders_2.next()) {\n                    var encoder = neededEncoders_2_1.value;\n                    this.encoders[index++] = encoder;\n                }\n            }\n            catch (e_3_1) { e_3 = { error: e_3_1 }; }\n            finally {\n                try {\n                    if (neededEncoders_2_1 && !neededEncoders_2_1.done && (_c = neededEncoders_2.return)) _c.call(neededEncoders_2);\n                }\n                finally { if (e_3) throw e_3.error; }\n            }\n            // this.encoders[index] = new CharsetEncoder(StandardCharsets.UTF_8);\n            // this.encoders[index + 1] = new CharsetEncoder(StandardCharsets.UTF_16BE);\n        }\n        // Compute priorityEncoderIndex by looking up priorityCharset in encoders\n        var priorityEncoderIndexValue = -1;\n        if (priorityCharset != null) {\n            for (var i = 0; i < this.encoders.length; i++) {\n                if (this.encoders[i] != null &&\n                    priorityCharset.name === this.encoders[i].name) {\n                    priorityEncoderIndexValue = i;\n                    break;\n                }\n            }\n        }\n        this.priorityEncoderIndex = priorityEncoderIndexValue;\n        // invariants\n        // if(this?.encoders?.[0].name !== StandardCharsets.ISO_8859_1)){\n        // throw new Error(\"ISO-8859-1 must be the first encoder\");\n        // }\n    }\n    ECIEncoderSet.prototype.length = function () {\n        return this.encoders.length;\n    };\n    ECIEncoderSet.prototype.getCharsetName = function (index) {\n        if (!(index < this.length())) {\n            throw new Error('index must be less than length');\n        }\n        return this.encoders[index].name;\n    };\n    ECIEncoderSet.prototype.getCharset = function (index) {\n        if (!(index < this.length())) {\n            throw new Error('index must be less than length');\n        }\n        return this.encoders[index].charset;\n    };\n    ECIEncoderSet.prototype.getECIValue = function (encoderIndex) {\n        return this.encoders[encoderIndex].charset.getValueIdentifier();\n    };\n    /*\n     *  returns -1 if no priority charset was defined\n     */\n    ECIEncoderSet.prototype.getPriorityEncoderIndex = function () {\n        return this.priorityEncoderIndex;\n    };\n    ECIEncoderSet.prototype.canEncode = function (c, encoderIndex) {\n        if (!(encoderIndex < this.length())) {\n            throw new Error('index must be less than length');\n        }\n        return true;\n    };\n    ECIEncoderSet.prototype.encode = function (c, encoderIndex) {\n        if (!(encoderIndex < this.length())) {\n            throw new Error('index must be less than length');\n        }\n        return StringEncoding.encode(StringUtils.getCharAt(c), this.encoders[encoderIndex].name);\n    };\n    return ECIEncoderSet;\n}());\nexport { ECIEncoderSet };\n", "import { ECIEncoderSet } from './ECIEncoderSet';\nimport Integer from '../util/Integer';\nimport StringBuilder from '../util/StringBuilder';\nvar COST_PER_ECI = 3; // approximated (latch + 2 codewords)\nvar MinimalECIInput = /** @class */ (function () {\n    /**\n     * Constructs a minimal input\n     *\n     * @param stringToEncode the character string to encode\n     * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm\n     *   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority\n     *   charset to encode any character in the input that can be encoded by it if the charset is among the\n     *   supported charsets.\n     * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not GS1\n     *   input.\n     */\n    function MinimalECIInput(stringToEncode, priorityCharset, fnc1) {\n        this.fnc1 = fnc1;\n        var encoderSet = new ECIEncoderSet(stringToEncode, priorityCharset, fnc1);\n        if (encoderSet.length() === 1) {\n            // optimization for the case when all can be encoded without ECI in ISO-8859-1\n            for (var i = 0; i < this.bytes.length; i++) {\n                var c = stringToEncode.charAt(i).charCodeAt(0);\n                this.bytes[i] = c === fnc1 ? 1000 : c;\n            }\n        }\n        else {\n            this.bytes = this.encodeMinimally(stringToEncode, encoderSet, fnc1);\n        }\n    }\n    MinimalECIInput.prototype.getFNC1Character = function () {\n        return this.fnc1;\n    };\n    /**\n     * Returns the length of this input.  The length is the number\n     * of {@code byte}s, FNC1 characters or ECIs in the sequence.\n     *\n     * @return  the number of {@code char}s in this sequence\n     */\n    MinimalECIInput.prototype.length = function () {\n        return this.bytes.length;\n    };\n    MinimalECIInput.prototype.haveNCharacters = function (index, n) {\n        if (index + n - 1 >= this.bytes.length) {\n            return false;\n        }\n        for (var i = 0; i < n; i++) {\n            if (this.isECI(index + i)) {\n                return false;\n            }\n        }\n        return true;\n    };\n    /**\n     * Returns the {@code byte} value at the specified index.  An index ranges from zero\n     * to {@code length() - 1}.  The first {@code byte} value of the sequence is at\n     * index zero, the next at index one, and so on, as for array\n     * indexing.\n     *\n     * @param   index the index of the {@code byte} value to be returned\n     *\n     * @return  the specified {@code byte} value as character or the FNC1 character\n     *\n     * @throws  IndexOutOfBoundsException\n     *          if the {@code index} argument is negative or not less than\n     *          {@code length()}\n     * @throws  IllegalArgumentException\n     *          if the value at the {@code index} argument is an ECI (@see #isECI)\n     */\n    MinimalECIInput.prototype.charAt = function (index) {\n        if (index < 0 || index >= this.length()) {\n            throw new Error('' + index);\n        }\n        if (this.isECI(index)) {\n            throw new Error('value at ' + index + ' is not a character but an ECI');\n        }\n        return this.isFNC1(index) ? this.fnc1 : this.bytes[index];\n    };\n    /**\n     * Returns a {@code CharSequence} that is a subsequence of this sequence.\n     * The subsequence starts with the {@code char} value at the specified index and\n     * ends with the {@code char} value at index {@code end - 1}.  The length\n     * (in {@code char}s) of the\n     * returned sequence is {@code end - start}, so if {@code start == end}\n     * then an empty sequence is returned.\n     *\n     * @param   start   the start index, inclusive\n     * @param   end     the end index, exclusive\n     *\n     * @return  the specified subsequence\n     *\n     * @throws  IndexOutOfBoundsException\n     *          if {@code start} or {@code end} are negative,\n     *          if {@code end} is greater than {@code length()},\n     *          or if {@code start} is greater than {@code end}\n     * @throws  IllegalArgumentException\n     *          if a value in the range {@code start}-{@code end} is an ECI (@see #isECI)\n     */\n    MinimalECIInput.prototype.subSequence = function (start, end) {\n        if (start < 0 || start > end || end > this.length()) {\n            throw new Error('' + start);\n        }\n        var result = new StringBuilder();\n        for (var i = start; i < end; i++) {\n            if (this.isECI(i)) {\n                throw new Error('value at ' + i + ' is not a character but an ECI');\n            }\n            result.append(this.charAt(i));\n        }\n        return result.toString();\n    };\n    /**\n     * Determines if a value is an ECI\n     *\n     * @param   index the index of the value\n     *\n     * @return  true if the value at position {@code index} is an ECI\n     *\n     * @throws  IndexOutOfBoundsException\n     *          if the {@code index} argument is negative or not less than\n     *          {@code length()}\n     */\n    MinimalECIInput.prototype.isECI = function (index) {\n        if (index < 0 || index >= this.length()) {\n            throw new Error('' + index);\n        }\n        return this.bytes[index] > 255 && this.bytes[index] <= 999;\n    };\n    /**\n     * Determines if a value is the FNC1 character\n     *\n     * @param   index the index of the value\n     *\n     * @return  true if the value at position {@code index} is the FNC1 character\n     *\n     * @throws  IndexOutOfBoundsException\n     *          if the {@code index} argument is negative or not less than\n     *          {@code length()}\n     */\n    MinimalECIInput.prototype.isFNC1 = function (index) {\n        if (index < 0 || index >= this.length()) {\n            throw new Error('' + index);\n        }\n        return this.bytes[index] === 1000;\n    };\n    /**\n     * Returns the {@code int} ECI value at the specified index.  An index ranges from zero\n     * to {@code length() - 1}.  The first {@code byte} value of the sequence is at\n     * index zero, the next at index one, and so on, as for array\n     * indexing.\n     *\n     * @param   index the index of the {@code int} value to be returned\n     *\n     * @return  the specified {@code int} ECI value.\n     *          The ECI specified the encoding of all bytes with a higher index until the\n     *          next ECI or until the end of the input if no other ECI follows.\n     *\n     * @throws  IndexOutOfBoundsException\n     *          if the {@code index} argument is negative or not less than\n     *          {@code length()}\n     * @throws  IllegalArgumentException\n     *          if the value at the {@code index} argument is not an ECI (@see #isECI)\n     */\n    MinimalECIInput.prototype.getECIValue = function (index) {\n        if (index < 0 || index >= this.length()) {\n            throw new Error('' + index);\n        }\n        if (!this.isECI(index)) {\n            throw new Error('value at ' + index + ' is not an ECI but a character');\n        }\n        return this.bytes[index] - 256;\n    };\n    MinimalECIInput.prototype.addEdge = function (edges, to, edge) {\n        if (edges[to][edge.encoderIndex] == null ||\n            edges[to][edge.encoderIndex].cachedTotalSize > edge.cachedTotalSize) {\n            edges[to][edge.encoderIndex] = edge;\n        }\n    };\n    MinimalECIInput.prototype.addEdges = function (stringToEncode, encoderSet, edges, from, previous, fnc1) {\n        var ch = stringToEncode.charAt(from).charCodeAt(0);\n        var start = 0;\n        var end = encoderSet.length();\n        if (encoderSet.getPriorityEncoderIndex() >= 0 &&\n            (ch === fnc1 ||\n                encoderSet.canEncode(ch, encoderSet.getPriorityEncoderIndex()))) {\n            start = encoderSet.getPriorityEncoderIndex();\n            end = start + 1;\n        }\n        for (var i = start; i < end; i++) {\n            if (ch === fnc1 || encoderSet.canEncode(ch, i)) {\n                this.addEdge(edges, from + 1, new InputEdge(ch, encoderSet, i, previous, fnc1));\n            }\n        }\n    };\n    MinimalECIInput.prototype.encodeMinimally = function (stringToEncode, encoderSet, fnc1) {\n        var inputLength = stringToEncode.length;\n        // Array that represents vertices. There is a vertex for every character and encoding.\n        var edges = new InputEdge[inputLength + 1][encoderSet.length()]();\n        this.addEdges(stringToEncode, encoderSet, edges, 0, null, fnc1);\n        for (var i = 1; i <= inputLength; i++) {\n            for (var j = 0; j < encoderSet.length(); j++) {\n                if (edges[i][j] != null && i < inputLength) {\n                    this.addEdges(stringToEncode, encoderSet, edges, i, edges[i][j], fnc1);\n                }\n            }\n            // optimize memory by removing edges that have been passed.\n            for (var j = 0; j < encoderSet.length(); j++) {\n                edges[i - 1][j] = null;\n            }\n        }\n        var minimalJ = -1;\n        var minimalSize = Integer.MAX_VALUE;\n        for (var j = 0; j < encoderSet.length(); j++) {\n            if (edges[inputLength][j] != null) {\n                var edge = edges[inputLength][j];\n                if (edge.cachedTotalSize < minimalSize) {\n                    minimalSize = edge.cachedTotalSize;\n                    minimalJ = j;\n                }\n            }\n        }\n        if (minimalJ < 0) {\n            throw new Error('Failed to encode \"' + stringToEncode + '\"');\n        }\n        var intsAL = [];\n        var current = edges[inputLength][minimalJ];\n        while (current != null) {\n            if (current.isFNC1()) {\n                intsAL.unshift(1000);\n            }\n            else {\n                var bytes = encoderSet.encode(current.c, current.encoderIndex);\n                for (var i = bytes.length - 1; i >= 0; i--) {\n                    intsAL.unshift(bytes[i] & 0xff);\n                }\n            }\n            var previousEncoderIndex = current.previous === null ? 0 : current.previous.encoderIndex;\n            if (previousEncoderIndex !== current.encoderIndex) {\n                intsAL.unshift(256 + encoderSet.getECIValue(current.encoderIndex));\n            }\n            current = current.previous;\n        }\n        var ints = [];\n        for (var i = 0; i < ints.length; i++) {\n            ints[i] = intsAL[i];\n        }\n        return ints;\n    };\n    return MinimalECIInput;\n}());\nexport { MinimalECIInput };\nvar InputEdge = /** @class */ (function () {\n    function InputEdge(c, encoderSet, encoderIndex, previous, fnc1) {\n        this.c = c;\n        this.encoderSet = encoderSet;\n        this.encoderIndex = encoderIndex;\n        this.previous = previous;\n        this.fnc1 = fnc1;\n        this.c = c === fnc1 ? 1000 : c;\n        var size = this.isFNC1() ? 1 : encoderSet.encode(c, encoderIndex).length;\n        var previousEncoderIndex = previous === null ? 0 : previous.encoderIndex;\n        if (previousEncoderIndex !== encoderIndex) {\n            size += COST_PER_ECI;\n        }\n        if (previous != null) {\n            size += previous.cachedTotalSize;\n        }\n        this.cachedTotalSize = size;\n    }\n    InputEdge.prototype.isFNC1 = function () {\n        return this.c === 1000;\n    };\n    return InputEdge;\n}());\n", "var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n    return ar;\n};\nimport { MACRO_05_HEADER, MACRO_06_HEADER, MACRO_TRAILER, } from './constants';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { MinimalECIInput } from '../../common/MinimalECIInput';\nimport Integer from '../../util/Integer';\nvar Mode;\n(function (Mode) {\n    Mode[Mode[\"ASCII\"] = 0] = \"ASCII\";\n    Mode[Mode[\"C40\"] = 1] = \"C40\";\n    Mode[Mode[\"TEXT\"] = 2] = \"TEXT\";\n    Mode[Mode[\"X12\"] = 3] = \"X12\";\n    Mode[Mode[\"EDF\"] = 4] = \"EDF\";\n    Mode[Mode[\"B256\"] = 5] = \"B256\";\n})(Mode || (Mode = {}));\nvar C40_SHIFT2_CHARS = [\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    '_',\n];\nvar MinimalEncoder = /** @class */ (function () {\n    function MinimalEncoder() {\n    }\n    MinimalEncoder.isExtendedASCII = function (ch, fnc1) {\n        return ch !== fnc1 && ch >= 128 && ch <= 255;\n    };\n    MinimalEncoder.isInC40Shift1Set = function (ch) {\n        return ch <= 31;\n    };\n    MinimalEncoder.isInC40Shift2Set = function (ch, fnc1) {\n        var e_1, _a;\n        try {\n            for (var C40_SHIFT2_CHARS_1 = __values(C40_SHIFT2_CHARS), C40_SHIFT2_CHARS_1_1 = C40_SHIFT2_CHARS_1.next(); !C40_SHIFT2_CHARS_1_1.done; C40_SHIFT2_CHARS_1_1 = C40_SHIFT2_CHARS_1.next()) {\n                var c40Shift2Char = C40_SHIFT2_CHARS_1_1.value;\n                if (c40Shift2Char.charCodeAt(0) === ch) {\n                    return true;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (C40_SHIFT2_CHARS_1_1 && !C40_SHIFT2_CHARS_1_1.done && (_a = C40_SHIFT2_CHARS_1.return)) _a.call(C40_SHIFT2_CHARS_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return ch === fnc1;\n    };\n    MinimalEncoder.isInTextShift1Set = function (ch) {\n        return this.isInC40Shift1Set(ch);\n    };\n    MinimalEncoder.isInTextShift2Set = function (ch, fnc1) {\n        return this.isInC40Shift2Set(ch, fnc1);\n    };\n    /**\n     * Performs message encoding of a DataMatrix message\n     *\n     * @param msg the message\n     * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm\n     *   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority\n     *   charset to encode any character in the input that can be encoded by it if the charset is among the\n     *   supported charsets.\n     * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not a GS1\n     *   bar code. If the value is not -1 then a FNC1 is also prepended.\n     * @param shape requested shape.\n     * @return the encoded message (the char values range from 0 to 255)\n     */\n    MinimalEncoder.encodeHighLevel = function (msg, priorityCharset, fnc1, shape) {\n        if (priorityCharset === void 0) { priorityCharset = null; }\n        if (fnc1 === void 0) { fnc1 = -1; }\n        if (shape === void 0) { shape = 0 /* FORCE_NONE */; }\n        var macroId = 0;\n        if (msg.startsWith(MACRO_05_HEADER) && msg.endsWith(MACRO_TRAILER)) {\n            macroId = 5;\n            msg = msg.substring(MACRO_05_HEADER.length, msg.length - 2);\n        }\n        else if (msg.startsWith(MACRO_06_HEADER) && msg.endsWith(MACRO_TRAILER)) {\n            macroId = 6;\n            msg = msg.substring(MACRO_06_HEADER.length, msg.length - 2);\n        }\n        return decodeURIComponent(escape(String.fromCharCode.apply(String, __spread(this.encode(msg, priorityCharset, fnc1, shape, macroId)))));\n    };\n    /**\n     * Encodes input minimally and returns an array of the codewords\n     *\n     * @param input The string to encode\n     * @param priorityCharset The preferred {@link Charset}. When the value of the argument is null, the algorithm\n     *   chooses charsets that leads to a minimal representation. Otherwise the algorithm will use the priority\n     *   charset to encode any character in the input that can be encoded by it if the charset is among the\n     *   supported charsets.\n     * @param fnc1 denotes the character in the input that represents the FNC1 character or -1 if this is not a GS1\n     *   bar code. If the value is not -1 then a FNC1 is also prepended.\n     * @param shape requested shape.\n     * @param macroId Prepends the specified macro function in case that a value of 5 or 6 is specified.\n     * @return An array of bytes representing the codewords of a minimal encoding.\n     */\n    MinimalEncoder.encode = function (input, priorityCharset, fnc1, shape, macroId) {\n        return this.encodeMinimally(new Input(input, priorityCharset, fnc1, shape, macroId)).getBytes();\n    };\n    MinimalEncoder.addEdge = function (edges, edge) {\n        var vertexIndex = edge.fromPosition + edge.characterLength;\n        if (edges[vertexIndex][edge.getEndMode()] === null ||\n            edges[vertexIndex][edge.getEndMode()].cachedTotalSize >\n                edge.cachedTotalSize) {\n            edges[vertexIndex][edge.getEndMode()] = edge;\n        }\n    };\n    /** @return the number of words in which the string starting at from can be encoded in c40 or text mode.\n     *  The number of characters encoded is returned in characterLength.\n     *  The number of characters encoded is also minimal in the sense that the algorithm stops as soon\n     *  as a character encoding fills a C40 word competely (three C40 values). An exception is at the\n     *  end of the string where two C40 values are allowed (according to the spec the third c40 value\n     *  is filled  with 0 (Shift 1) in this case).\n     */\n    MinimalEncoder.getNumberOfC40Words = function (input, from, c40, characterLength) {\n        var thirdsCount = 0;\n        for (var i = from; i < input.length(); i++) {\n            if (input.isECI(i)) {\n                characterLength[0] = 0;\n                return 0;\n            }\n            var ci = input.charAt(i);\n            if ((c40 && HighLevelEncoder.isNativeC40(ci)) ||\n                (!c40 && HighLevelEncoder.isNativeText(ci))) {\n                thirdsCount++; // native\n            }\n            else if (!MinimalEncoder.isExtendedASCII(ci, input.getFNC1Character())) {\n                thirdsCount += 2; // shift\n            }\n            else {\n                var asciiValue = ci & 0xff;\n                if (asciiValue >= 128 &&\n                    ((c40 && HighLevelEncoder.isNativeC40(asciiValue - 128)) ||\n                        (!c40 && HighLevelEncoder.isNativeText(asciiValue - 128)))) {\n                    thirdsCount += 3; // shift, Upper shift\n                }\n                else {\n                    thirdsCount += 4; // shift, Upper shift, shift\n                }\n            }\n            if (thirdsCount % 3 === 0 ||\n                ((thirdsCount - 2) % 3 === 0 && i + 1 === input.length())) {\n                characterLength[0] = i - from + 1;\n                return Math.ceil(thirdsCount / 3.0);\n            }\n        }\n        characterLength[0] = 0;\n        return 0;\n    };\n    MinimalEncoder.addEdges = function (input, edges, from, previous) {\n        var e_2, _a;\n        if (input.isECI(from)) {\n            this.addEdge(edges, new Edge(input, Mode.ASCII, from, 1, previous));\n            return;\n        }\n        var ch = input.charAt(from);\n        if (previous === null || previous.getEndMode() !== Mode.EDF) {\n            // not possible to unlatch a full EDF edge to something\n            // else\n            if (HighLevelEncoder.isDigit(ch) &&\n                input.haveNCharacters(from, 2) &&\n                HighLevelEncoder.isDigit(input.charAt(from + 1))) {\n                // two digits ASCII encoded\n                this.addEdge(edges, new Edge(input, Mode.ASCII, from, 2, previous));\n            }\n            else {\n                // one ASCII encoded character or an extended character via Upper Shift\n                this.addEdge(edges, new Edge(input, Mode.ASCII, from, 1, previous));\n            }\n            var modes = [Mode.C40, Mode.TEXT];\n            try {\n                for (var modes_1 = __values(modes), modes_1_1 = modes_1.next(); !modes_1_1.done; modes_1_1 = modes_1.next()) {\n                    var mode = modes_1_1.value;\n                    var characterLength = [];\n                    if (MinimalEncoder.getNumberOfC40Words(input, from, mode === Mode.C40, characterLength) > 0) {\n                        this.addEdge(edges, new Edge(input, mode, from, characterLength[0], previous));\n                    }\n                }\n            }\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n            finally {\n                try {\n                    if (modes_1_1 && !modes_1_1.done && (_a = modes_1.return)) _a.call(modes_1);\n                }\n                finally { if (e_2) throw e_2.error; }\n            }\n            if (input.haveNCharacters(from, 3) &&\n                HighLevelEncoder.isNativeX12(input.charAt(from)) &&\n                HighLevelEncoder.isNativeX12(input.charAt(from + 1)) &&\n                HighLevelEncoder.isNativeX12(input.charAt(from + 2))) {\n                this.addEdge(edges, new Edge(input, Mode.X12, from, 3, previous));\n            }\n            this.addEdge(edges, new Edge(input, Mode.B256, from, 1, previous));\n        }\n        // We create 4 EDF edges,  with 1, 2 3 or 4 characters length. The fourth normally doesn't have a latch to ASCII\n        // unless it is 2 characters away from the end of the input.\n        var i;\n        for (i = 0; i < 3; i++) {\n            var pos = from + i;\n            if (input.haveNCharacters(pos, 1) &&\n                HighLevelEncoder.isNativeEDIFACT(input.charAt(pos))) {\n                this.addEdge(edges, new Edge(input, Mode.EDF, from, i + 1, previous));\n            }\n            else {\n                break;\n            }\n        }\n        if (i === 3 &&\n            input.haveNCharacters(from, 4) &&\n            HighLevelEncoder.isNativeEDIFACT(input.charAt(from + 3))) {\n            this.addEdge(edges, new Edge(input, Mode.EDF, from, 4, previous));\n        }\n    };\n    MinimalEncoder.encodeMinimally = function (input) {\n        /* The minimal encoding is computed by Dijkstra. The acyclic graph is modeled as follows:\n         * A vertex represents a combination of a position in the input and an encoding mode where position 0\n         * denotes the position left of the first character, 1 the position left of the second character and so on.\n         * Likewise the end vertices are located after the last character at position input.length().\n         * For any position there might be up to six vertices, one for each of the encoding types ASCII, C40, TEXT, X12,\n         * EDF and B256.\n         *\n         * As an example consider the input string \"ABC123\" then at position 0 there is only one vertex with the default\n         * ASCII encodation. At position 3 there might be vertices for the types ASCII, C40, X12, EDF and B256.\n         *\n         * An edge leading to such a vertex encodes one or more of the characters left of the position that the vertex\n         * represents. It encodes the characters in the encoding mode of the vertex that it ends on. In other words,\n         * all edges leading to a particular vertex encode the same characters (the length of the suffix can vary) using the same\n         * encoding mode.\n         * As an example consider the input string \"ABC123\" and the vertex (4,EDF). Possible edges leading to this vertex\n         * are:\n         *   (0,ASCII)  --EDF(ABC1)--> (4,EDF)\n         *   (1,ASCII)  --EDF(BC1)-->  (4,EDF)\n         *   (1,B256)   --EDF(BC1)-->  (4,EDF)\n         *   (1,EDF)    --EDF(BC1)-->  (4,EDF)\n         *   (2,ASCII)  --EDF(C1)-->   (4,EDF)\n         *   (2,B256)   --EDF(C1)-->   (4,EDF)\n         *   (2,EDF)    --EDF(C1)-->   (4,EDF)\n         *   (3,ASCII)  --EDF(1)-->    (4,EDF)\n         *   (3,B256)   --EDF(1)-->    (4,EDF)\n         *   (3,EDF)    --EDF(1)-->    (4,EDF)\n         *   (3,C40)    --EDF(1)-->    (4,EDF)\n         *   (3,X12)    --EDF(1)-->    (4,EDF)\n         *\n         * The edges leading to a vertex are stored in such a way that there is a fast way to enumerate the edges ending\n         * on a particular vertex.\n         *\n         * The algorithm processes the vertices in order of their position thereby performing the following:\n         *\n         * For every vertex at position i the algorithm enumerates the edges ending on the vertex and removes all but the\n         * shortest from that list.\n         * Then it processes the vertices for the position i+1. If i+1 == input.length() then the algorithm ends\n         * and chooses the the edge with the smallest size from any of the edges leading to vertices at this position.\n         * Otherwise the algorithm computes all possible outgoing edges for the vertices at the position i+1\n         *\n         * Examples:\n         * The process is illustrated by showing the graph (edges) after each iteration from left to right over the input:\n         * An edge is drawn as follows \"(\" + fromVertex + \") -- \" + encodingMode + \"(\" + encodedInput + \") (\" +\n         * accumulatedSize + \") --> (\" + toVertex + \")\"\n         *\n         * Example 1 encoding the string \"ABCDEFG\":\n         *\n         *\n         * Situation after adding edges to the start vertex (0,ASCII)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII)\n         * (0,ASCII) B256(A) (3) --> (1,B256)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF)\n         * (0,ASCII) C40(ABC) (3) --> (3,C40)\n         * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)\n         * (0,ASCII) X12(ABC) (3) --> (3,X12)\n         * (0,ASCII) EDF(ABC) (4) --> (3,EDF)\n         * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)\n         *\n         * Situation after adding edges to vertices at position 1\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII)\n         * (0,ASCII) B256(A) (3) --> (1,B256)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF)\n         * (0,ASCII) C40(ABC) (3) --> (3,C40)\n         * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)\n         * (0,ASCII) X12(ABC) (3) --> (3,X12)\n         * (0,ASCII) EDF(ABC) (4) --> (3,EDF)\n         * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) B256(B) (4) --> (2,B256)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BC) (5) --> (3,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCD) (5) --> (4,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) ASCII(B) (4) --> (2,ASCII)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)\n         * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BC) (6) --> (3,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) C40(BCD) (5) --> (4,C40)\n         * (0,ASCII) B256(A) (3) --> (1,B256) TEXT(BCD) (7) --> (4,TEXT)\n         * (0,ASCII) B256(A) (3) --> (1,B256) X12(BCD) (5) --> (4,X12)\n         * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCD) (6) --> (4,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCDE) (6) --> (5,EDF)\n         *\n         * Edge \"(1,ASCII) ASCII(B) (2) --> (2,ASCII)\" is minimal for the vertex (2,ASCII) so that edge \"(1,B256) ASCII(B) (4) --> (2,ASCII)\" is removed.\n         * Edge \"(1,B256) B256(B) (3) --> (2,B256)\" is minimal for the vertext (2,B256) so that the edge \"(1,ASCII) B256(B) (4) --> (2,B256)\" is removed.\n         *\n         * Situation after adding edges to vertices at position 2\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII)\n         * (0,ASCII) B256(A) (3) --> (1,B256)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF)\n         * (0,ASCII) C40(ABC) (3) --> (3,C40)\n         * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)\n         * (0,ASCII) X12(ABC) (3) --> (3,X12)\n         * (0,ASCII) EDF(ABC) (4) --> (3,EDF)\n         * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BC) (5) --> (3,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCD) (5) --> (4,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)\n         * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BC) (6) --> (3,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) C40(BCD) (5) --> (4,C40)\n         * (0,ASCII) B256(A) (3) --> (1,B256) TEXT(BCD) (7) --> (4,TEXT)\n         * (0,ASCII) B256(A) (3) --> (1,B256) X12(BCD) (5) --> (4,X12)\n         * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCD) (6) --> (4,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) EDF(BCDE) (6) --> (5,EDF)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF) ASCII(C) (5) --> (3,ASCII)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF) B256(C) (6) --> (3,B256)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CD) (7) --> (4,EDF)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF) C40(CDE) (6) --> (5,C40)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF) TEXT(CDE) (8) --> (5,TEXT)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF) X12(CDE) (6) --> (5,X12)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CDE) (7) --> (5,EDF)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF) EDF(CDEF) (7) --> (6,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) B256(C) (5) --> (3,B256)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CD) (6) --> (4,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) C40(CDE) (5) --> (5,C40)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) TEXT(CDE) (7) --> (5,TEXT)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) X12(CDE) (5) --> (5,X12)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDE) (6) --> (5,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDEF) (6) --> (6,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) ASCII(C) (4) --> (3,ASCII)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CD) (6) --> (4,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) C40(CDE) (5) --> (5,C40)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) TEXT(CDE) (7) --> (5,TEXT)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) X12(CDE) (5) --> (5,X12)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CDE) (6) --> (5,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) EDF(CDEF) (6) --> (6,EDF)\n         *\n         * Edge \"(2,ASCII) ASCII(C) (3) --> (3,ASCII)\" is minimal for the vertex (3,ASCII) so that edges \"(2,EDF) ASCII(C) (5) --> (3,ASCII)\"\n         * and \"(2,B256) ASCII(C) (4) --> (3,ASCII)\" can be removed.\n         * Edge \"(0,ASCII) EDF(ABC) (4) --> (3,EDF)\" is minimal for the vertex (3,EDF) so that edges \"(1,ASCII) EDF(BC) (5) --> (3,EDF)\"\n         * and \"(1,B256) EDF(BC) (6) --> (3,EDF)\" can be removed.\n         * Edge \"(2,B256) B256(C) (4) --> (3,B256)\" is minimal for the vertex (3,B256) so that edges \"(2,ASCII) B256(C) (5) --> (3,B256)\"\n         * and \"(2,EDF) B256(C) (6) --> (3,B256)\" can be removed.\n         *\n         * This continues for vertices 3 thru 7\n         *\n         * Situation after adding edges to vertices at position 7\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII)\n         * (0,ASCII) B256(A) (3) --> (1,B256)\n         * (0,ASCII) EDF(AB) (4) --> (2,EDF)\n         * (0,ASCII) C40(ABC) (3) --> (3,C40)\n         * (0,ASCII) TEXT(ABC) (5) --> (3,TEXT)\n         * (0,ASCII) X12(ABC) (3) --> (3,X12)\n         * (0,ASCII) EDF(ABC) (4) --> (3,EDF)\n         * (0,ASCII) EDF(ABCD) (4) --> (4,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) TEXT(BCD) (6) --> (4,TEXT)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) EDF(BCDE) (5) --> (5,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256)\n         * (0,ASCII) C40(ABC) (3) --> (3,C40) C40(DEF) (5) --> (6,C40)\n         * (0,ASCII) X12(ABC) (3) --> (3,X12) X12(DEF) (5) --> (6,X12)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) C40(CDE) (5) --> (5,C40)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) TEXT(CDE) (7) --> (5,TEXT)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) X12(CDE) (5) --> (5,X12)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) EDF(CDEF) (6) --> (6,EDF)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) C40(BCD) (4) --> (4,C40) C40(EFG) (6) --> (7,C40)    //Solution 1\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) X12(BCD) (4) --> (4,X12) X12(EFG) (6) --> (7,X12)    //Solution 2\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) TEXT(DEF) (8) --> (6,TEXT)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) EDF(DEFG) (7) --> (7,EDF)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) TEXT(EFG) (9) --> (7,TEXT)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII) ASCII(F) (6) --> (6,ASCII)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256) B256(F) (7) --> (6,B256)\n         * (0,ASCII) ASCII(A) (1) --> (1,ASCII) ASCII(B) (2) --> (2,ASCII) ASCII(C) (3) --> (3,ASCII) ASCII(D) (4) --> (4,ASCII) ASCII(E) (5) --> (5,ASCII) ASCII(F) (6) --> (6,ASCII) ASCII(G) (7) --> (7,ASCII)\n         * (0,ASCII) B256(A) (3) --> (1,B256) B256(B) (3) --> (2,B256) B256(C) (4) --> (3,B256) B256(D) (5) --> (4,B256) B256(E) (6) --> (5,B256) B256(F) (7) --> (6,B256) B256(G) (8) --> (7,B256)\n         *\n         * Hence a minimal encoding of \"ABCDEFG\" is either ASCII(A),C40(BCDEFG) or ASCII(A), X12(BCDEFG) with a size of 5 bytes.\n         */\n        var inputLength = input.length();\n        // Array that represents vertices. There is a vertex for every character and mode.\n        // The last dimension in the array below encodes the 6 modes ASCII, C40, TEXT, X12, EDF and B256\n        var edges = Array(inputLength + 1)\n            .fill(null)\n            .map(function () { return Array(6).fill(0); });\n        this.addEdges(input, edges, 0, null);\n        for (var i = 1; i <= inputLength; i++) {\n            for (var j = 0; j < 6; j++) {\n                if (edges[i][j] !== null && i < inputLength) {\n                    this.addEdges(input, edges, i, edges[i][j]);\n                }\n            }\n            // optimize memory by removing edges that have been passed.\n            for (var j = 0; j < 6; j++) {\n                edges[i - 1][j] = null;\n            }\n        }\n        var minimalJ = -1;\n        var minimalSize = Integer.MAX_VALUE;\n        for (var j = 0; j < 6; j++) {\n            if (edges[inputLength][j] !== null) {\n                var edge = edges[inputLength][j];\n                var size = j >= 1 && j <= 3 ? edge.cachedTotalSize + 1 : edge.cachedTotalSize; // C40, TEXT and X12 need an\n                // extra unlatch at the end\n                if (size < minimalSize) {\n                    minimalSize = size;\n                    minimalJ = j;\n                }\n            }\n        }\n        if (minimalJ < 0) {\n            throw new Error('Failed to encode \"' + input + '\"');\n        }\n        return new Result(edges[inputLength][minimalJ]);\n    };\n    return MinimalEncoder;\n}());\nexport { MinimalEncoder };\nvar Result = /** @class */ (function () {\n    function Result(solution) {\n        var input = solution.input;\n        var size = 0;\n        var bytesAL = [];\n        var randomizePostfixLength = [];\n        var randomizeLengths = [];\n        if ((solution.mode === Mode.C40 ||\n            solution.mode === Mode.TEXT ||\n            solution.mode === Mode.X12) &&\n            solution.getEndMode() !== Mode.ASCII) {\n            size += this.prepend(Edge.getBytes(254), bytesAL);\n        }\n        var current = solution;\n        while (current !== null) {\n            size += this.prepend(current.getDataBytes(), bytesAL);\n            if (current.previous === null ||\n                current.getPreviousStartMode() !== current.getMode()) {\n                if (current.getMode() === Mode.B256) {\n                    if (size <= 249) {\n                        bytesAL.unshift(size);\n                        size++;\n                    }\n                    else {\n                        bytesAL.unshift(size % 250);\n                        bytesAL.unshift(size / 250 + 249);\n                        size += 2;\n                    }\n                    randomizePostfixLength.push(bytesAL.length);\n                    randomizeLengths.push(size);\n                }\n                this.prepend(current.getLatchBytes(), bytesAL);\n                size = 0;\n            }\n            current = current.previous;\n        }\n        if (input.getMacroId() === 5) {\n            size += this.prepend(Edge.getBytes(236), bytesAL);\n        }\n        else if (input.getMacroId() === 6) {\n            size += this.prepend(Edge.getBytes(237), bytesAL);\n        }\n        if (input.getFNC1Character() > 0) {\n            size += this.prepend(Edge.getBytes(232), bytesAL);\n        }\n        for (var i = 0; i < randomizePostfixLength.length; i++) {\n            this.applyRandomPattern(bytesAL, bytesAL.length - randomizePostfixLength[i], randomizeLengths[i]);\n        }\n        // add padding\n        var capacity = solution.getMinSymbolSize(bytesAL.length);\n        if (bytesAL.length < capacity) {\n            bytesAL.push(129);\n        }\n        while (bytesAL.length < capacity) {\n            bytesAL.push(this.randomize253State(bytesAL.length + 1));\n        }\n        this.bytes = new Uint8Array(bytesAL.length);\n        for (var i = 0; i < this.bytes.length; i++) {\n            this.bytes[i] = bytesAL[i];\n        }\n    }\n    Result.prototype.prepend = function (bytes, into) {\n        for (var i = bytes.length - 1; i >= 0; i--) {\n            into.unshift(bytes[i]);\n        }\n        return bytes.length;\n    };\n    Result.prototype.randomize253State = function (codewordPosition) {\n        var pseudoRandom = ((149 * codewordPosition) % 253) + 1;\n        var tempVariable = 129 + pseudoRandom;\n        return tempVariable <= 254 ? tempVariable : tempVariable - 254;\n    };\n    Result.prototype.applyRandomPattern = function (bytesAL, startPosition, length) {\n        for (var i = 0; i < length; i++) {\n            // See \"B.1 253-state algorithm\n            var Pad_codeword_position = startPosition + i;\n            var Pad_codeword_value = bytesAL[Pad_codeword_position] & 0xff;\n            var pseudo_random_number = ((149 * (Pad_codeword_position + 1)) % 255) + 1;\n            var temp_variable = Pad_codeword_value + pseudo_random_number;\n            bytesAL[Pad_codeword_position] =\n                temp_variable <= 255 ? temp_variable : temp_variable - 256;\n        }\n    };\n    Result.prototype.getBytes = function () {\n        return this.bytes;\n    };\n    return Result;\n}());\nvar Edge = /** @class */ (function () {\n    function Edge(input, mode, fromPosition, characterLength, previous) {\n        this.input = input;\n        this.mode = mode;\n        this.fromPosition = fromPosition;\n        this.characterLength = characterLength;\n        this.previous = previous;\n        this.allCodewordCapacities = [\n            3, 5, 8, 10, 12, 16, 18, 22, 30, 32, 36, 44, 49, 62, 86, 114, 144, 174, 204,\n            280, 368, 456, 576, 696, 816, 1050, 1304, 1558,\n        ];\n        this.squareCodewordCapacities = [\n            3, 5, 8, 12, 18, 22, 30, 36, 44, 62, 86, 114, 144, 174, 204, 280, 368, 456,\n            576, 696, 816, 1050, 1304, 1558,\n        ];\n        this.rectangularCodewordCapacities = [5, 10, 16, 33, 32, 49];\n        if (!(fromPosition + characterLength <= input.length())) {\n            throw new Error('Invalid edge');\n        }\n        var size = previous !== null ? previous.cachedTotalSize : 0;\n        var previousMode = this.getPreviousMode();\n        /*\n         * Switching modes\n         * ASCII -> C40: latch 230\n         * ASCII -> TEXT: latch 239\n         * ASCII -> X12: latch 238\n         * ASCII -> EDF: latch 240\n         * ASCII -> B256: latch 231\n         * C40 -> ASCII: word(c1,c2,c3), 254\n         * TEXT -> ASCII: word(c1,c2,c3), 254\n         * X12 -> ASCII: word(c1,c2,c3), 254\n         * EDIFACT -> ASCII: Unlatch character,0,0,0 or c1,Unlatch character,0,0 or c1,c2,Unlatch character,0 or\n         * c1,c2,c3,Unlatch character\n         * B256 -> ASCII: without latch after n bytes\n         */\n        switch (mode) {\n            case Mode.ASCII:\n                size++;\n                if (input.isECI(fromPosition) ||\n                    MinimalEncoder.isExtendedASCII(input.charAt(fromPosition), input.getFNC1Character())) {\n                    size++;\n                }\n                if (previousMode === Mode.C40 ||\n                    previousMode === Mode.TEXT ||\n                    previousMode === Mode.X12) {\n                    size++; // unlatch 254 to ASCII\n                }\n                break;\n            case Mode.B256:\n                size++;\n                if (previousMode !== Mode.B256) {\n                    size++; // byte count\n                }\n                else if (this.getB256Size() === 250) {\n                    size++; // extra byte count\n                }\n                if (previousMode === Mode.ASCII) {\n                    size++; // latch to B256\n                }\n                else if (previousMode === Mode.C40 ||\n                    previousMode === Mode.TEXT ||\n                    previousMode === Mode.X12) {\n                    size += 2; // unlatch to ASCII, latch to B256\n                }\n                break;\n            case Mode.C40:\n            case Mode.TEXT:\n            case Mode.X12:\n                if (mode === Mode.X12) {\n                    size += 2;\n                }\n                else {\n                    var charLen = [];\n                    size +=\n                        MinimalEncoder.getNumberOfC40Words(input, fromPosition, mode === Mode.C40, charLen) * 2;\n                }\n                if (previousMode === Mode.ASCII || previousMode === Mode.B256) {\n                    size++; // additional byte for latch from ASCII to this mode\n                }\n                else if (previousMode !== mode &&\n                    (previousMode === Mode.C40 ||\n                        previousMode === Mode.TEXT ||\n                        previousMode === Mode.X12)) {\n                    size += 2; // unlatch 254 to ASCII followed by latch to this mode\n                }\n                break;\n            case Mode.EDF:\n                size += 3;\n                if (previousMode === Mode.ASCII || previousMode === Mode.B256) {\n                    size++; // additional byte for latch from ASCII to this mode\n                }\n                else if (previousMode === Mode.C40 ||\n                    previousMode === Mode.TEXT ||\n                    previousMode === Mode.X12) {\n                    size += 2; // unlatch 254 to ASCII followed by latch to this mode\n                }\n                break;\n        }\n        this.cachedTotalSize = size;\n    }\n    // does not count beyond 250\n    Edge.prototype.getB256Size = function () {\n        var cnt = 0;\n        var current = this;\n        while (current !== null && current.mode === Mode.B256 && cnt <= 250) {\n            cnt++;\n            current = current.previous;\n        }\n        return cnt;\n    };\n    Edge.prototype.getPreviousStartMode = function () {\n        return this.previous === null ? Mode.ASCII : this.previous.mode;\n    };\n    Edge.prototype.getPreviousMode = function () {\n        return this.previous === null ? Mode.ASCII : this.previous.getEndMode();\n    };\n    /** Returns Mode.ASCII in case that:\n     *  - Mode is EDIFACT and characterLength is less than 4 or the remaining characters can be encoded in at most 2\n     *    ASCII bytes.\n     *  - Mode is C40, TEXT or X12 and the remaining characters can be encoded in at most 1 ASCII byte.\n     *  Returns mode in all other cases.\n     * */\n    Edge.prototype.getEndMode = function () {\n        if (this.mode === Mode.EDF) {\n            if (this.characterLength < 4) {\n                return Mode.ASCII;\n            }\n            var lastASCII = this.getLastASCII(); // see 5.2.8.2 EDIFACT encodation Rules\n            if (lastASCII > 0 &&\n                this.getCodewordsRemaining(this.cachedTotalSize + lastASCII) <=\n                    2 - lastASCII) {\n                return Mode.ASCII;\n            }\n        }\n        if (this.mode === Mode.C40 ||\n            this.mode === Mode.TEXT ||\n            this.mode === Mode.X12) {\n            // see 5.2.5.2 C40 encodation rules and 5.2.7.2 ANSI X12 encodation rules\n            if (this.fromPosition + this.characterLength >= this.input.length() &&\n                this.getCodewordsRemaining(this.cachedTotalSize) === 0) {\n                return Mode.ASCII;\n            }\n            var lastASCII = this.getLastASCII();\n            if (lastASCII === 1 &&\n                this.getCodewordsRemaining(this.cachedTotalSize + 1) === 0) {\n                return Mode.ASCII;\n            }\n        }\n        return this.mode;\n    };\n    Edge.prototype.getMode = function () {\n        return this.mode;\n    };\n    /** Peeks ahead and returns 1 if the postfix consists of exactly two digits, 2 if the postfix consists of exactly\n     *  two consecutive digits and a non extended character or of 4 digits.\n     *  Returns 0 in any other case\n     **/\n    Edge.prototype.getLastASCII = function () {\n        var length = this.input.length();\n        var from = this.fromPosition + this.characterLength;\n        if (length - from > 4 || from >= length) {\n            return 0;\n        }\n        if (length - from === 1) {\n            if (MinimalEncoder.isExtendedASCII(this.input.charAt(from), this.input.getFNC1Character())) {\n                return 0;\n            }\n            return 1;\n        }\n        if (length - from === 2) {\n            if (MinimalEncoder.isExtendedASCII(this.input.charAt(from), this.input.getFNC1Character()) ||\n                MinimalEncoder.isExtendedASCII(this.input.charAt(from + 1), this.input.getFNC1Character())) {\n                return 0;\n            }\n            if (HighLevelEncoder.isDigit(this.input.charAt(from)) &&\n                HighLevelEncoder.isDigit(this.input.charAt(from + 1))) {\n                return 1;\n            }\n            return 2;\n        }\n        if (length - from === 3) {\n            if (HighLevelEncoder.isDigit(this.input.charAt(from)) &&\n                HighLevelEncoder.isDigit(this.input.charAt(from + 1)) &&\n                !MinimalEncoder.isExtendedASCII(this.input.charAt(from + 2), this.input.getFNC1Character())) {\n                return 2;\n            }\n            if (HighLevelEncoder.isDigit(this.input.charAt(from + 1)) &&\n                HighLevelEncoder.isDigit(this.input.charAt(from + 2)) &&\n                !MinimalEncoder.isExtendedASCII(this.input.charAt(from), this.input.getFNC1Character())) {\n                return 2;\n            }\n            return 0;\n        }\n        if (HighLevelEncoder.isDigit(this.input.charAt(from)) &&\n            HighLevelEncoder.isDigit(this.input.charAt(from + 1)) &&\n            HighLevelEncoder.isDigit(this.input.charAt(from + 2)) &&\n            HighLevelEncoder.isDigit(this.input.charAt(from + 3))) {\n            return 2;\n        }\n        return 0;\n    };\n    /** Returns the capacity in codewords of the smallest symbol that has enough capacity to fit the given minimal\n     * number of codewords.\n     **/\n    Edge.prototype.getMinSymbolSize = function (minimum) {\n        var e_3, _a, e_4, _b, e_5, _c;\n        switch (this.input.getShapeHint()) {\n            case 1 /* FORCE_SQUARE */:\n                try {\n                    for (var _d = __values(this.squareCodewordCapacities), _e = _d.next(); !_e.done; _e = _d.next()) {\n                        var capacity = _e.value;\n                        if (capacity >= minimum) {\n                            return capacity;\n                        }\n                    }\n                }\n                catch (e_3_1) { e_3 = { error: e_3_1 }; }\n                finally {\n                    try {\n                        if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n                    }\n                    finally { if (e_3) throw e_3.error; }\n                }\n                break;\n            case 2 /* FORCE_RECTANGLE */:\n                try {\n                    for (var _f = __values(this.rectangularCodewordCapacities), _g = _f.next(); !_g.done; _g = _f.next()) {\n                        var capacity = _g.value;\n                        if (capacity >= minimum) {\n                            return capacity;\n                        }\n                    }\n                }\n                catch (e_4_1) { e_4 = { error: e_4_1 }; }\n                finally {\n                    try {\n                        if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n                    }\n                    finally { if (e_4) throw e_4.error; }\n                }\n                break;\n        }\n        try {\n            for (var _h = __values(this.allCodewordCapacities), _j = _h.next(); !_j.done; _j = _h.next()) {\n                var capacity = _j.value;\n                if (capacity >= minimum) {\n                    return capacity;\n                }\n            }\n        }\n        catch (e_5_1) { e_5 = { error: e_5_1 }; }\n        finally {\n            try {\n                if (_j && !_j.done && (_c = _h.return)) _c.call(_h);\n            }\n            finally { if (e_5) throw e_5.error; }\n        }\n        return this.allCodewordCapacities[this.allCodewordCapacities.length - 1];\n    };\n    /** Returns the remaining capacity in codewords of the smallest symbol that has enough capacity to fit the given\n     * minimal number of codewords.\n     **/\n    Edge.prototype.getCodewordsRemaining = function (minimum) {\n        return this.getMinSymbolSize(minimum) - minimum;\n    };\n    Edge.getBytes = function (c1, c2) {\n        var result = new Uint8Array(c2 ? 2 : 1);\n        result[0] = c1;\n        if (c2) {\n            result[1] = c2;\n        }\n        return result;\n    };\n    Edge.prototype.setC40Word = function (bytes, offset, c1, c2, c3) {\n        var val16 = 1600 * (c1 & 0xff) + 40 * (c2 & 0xff) + (c3 & 0xff) + 1;\n        bytes[offset] = val16 / 256;\n        bytes[offset + 1] = val16 % 256;\n    };\n    Edge.prototype.getX12Value = function (c) {\n        return c === 13\n            ? 0\n            : c === 42\n                ? 1\n                : c === 62\n                    ? 2\n                    : c === 32\n                        ? 3\n                        : c >= 48 && c <= 57\n                            ? c - 44\n                            : c >= 65 && c <= 90\n                                ? c - 51\n                                : c;\n    };\n    Edge.prototype.getX12Words = function () {\n        if (!(this.characterLength % 3 === 0)) {\n            throw new Error('X12 words must be a multiple of 3');\n        }\n        var result = new Uint8Array((this.characterLength / 3) * 2);\n        for (var i = 0; i < result.length; i += 2) {\n            this.setC40Word(result, i, this.getX12Value(this.input.charAt(this.fromPosition + (i / 2) * 3)), this.getX12Value(this.input.charAt(this.fromPosition + (i / 2) * 3 + 1)), this.getX12Value(this.input.charAt(this.fromPosition + (i / 2) * 3 + 2)));\n        }\n        return result;\n    };\n    Edge.prototype.getShiftValue = function (c, c40, fnc1) {\n        return (c40 && MinimalEncoder.isInC40Shift1Set(c)) ||\n            (!c40 && MinimalEncoder.isInTextShift1Set(c))\n            ? 0\n            : (c40 && MinimalEncoder.isInC40Shift2Set(c, fnc1)) ||\n                (!c40 && MinimalEncoder.isInTextShift2Set(c, fnc1))\n                ? 1\n                : 2;\n    };\n    Edge.prototype.getC40Value = function (c40, setIndex, c, fnc1) {\n        if (c === fnc1) {\n            if (!(setIndex === 2)) {\n                throw new Error('FNC1 cannot be used in C40 shift 2');\n            }\n            return 27;\n        }\n        if (c40) {\n            return c <= 31\n                ? c\n                : c === 32\n                    ? 3\n                    : c <= 47\n                        ? c - 33\n                        : c <= 57\n                            ? c - 44\n                            : c <= 64\n                                ? c - 43\n                                : c <= 90\n                                    ? c - 51\n                                    : c <= 95\n                                        ? c - 69\n                                        : c <= 127\n                                            ? c - 96\n                                            : c;\n        }\n        else {\n            return c === 0\n                ? 0\n                : setIndex === 0 && c <= 3\n                    ? c - 1 // is this a bug in the spec?\n                    : setIndex === 1 && c <= 31\n                        ? c\n                        : c === 32\n                            ? 3\n                            : c >= 33 && c <= 47\n                                ? c - 33\n                                : c >= 48 && c <= 57\n                                    ? c - 44\n                                    : c >= 58 && c <= 64\n                                        ? c - 43\n                                        : c >= 65 && c <= 90\n                                            ? c - 64\n                                            : c >= 91 && c <= 95\n                                                ? c - 69\n                                                : c === 96\n                                                    ? 0\n                                                    : c >= 97 && c <= 122\n                                                        ? c - 83\n                                                        : c >= 123 && c <= 127\n                                                            ? c - 96\n                                                            : c;\n        }\n    };\n    Edge.prototype.getC40Words = function (c40, fnc1) {\n        var c40Values = [];\n        for (var i = 0; i < this.characterLength; i++) {\n            var ci = this.input.charAt(this.fromPosition + i);\n            if ((c40 && HighLevelEncoder.isNativeC40(ci)) ||\n                (!c40 && HighLevelEncoder.isNativeText(ci))) {\n                c40Values.push(this.getC40Value(c40, 0, ci, fnc1));\n            }\n            else if (!MinimalEncoder.isExtendedASCII(ci, fnc1)) {\n                var shiftValue = this.getShiftValue(ci, c40, fnc1);\n                c40Values.push(shiftValue); // Shift[123]\n                c40Values.push(this.getC40Value(c40, shiftValue, ci, fnc1));\n            }\n            else {\n                var asciiValue = (ci & 0xff) - 128;\n                if ((c40 && HighLevelEncoder.isNativeC40(asciiValue)) ||\n                    (!c40 && HighLevelEncoder.isNativeText(asciiValue))) {\n                    c40Values.push(1); // Shift 2\n                    c40Values.push(30); // Upper Shift\n                    c40Values.push(this.getC40Value(c40, 0, asciiValue, fnc1));\n                }\n                else {\n                    c40Values.push(1); // Shift 2\n                    c40Values.push(30); // Upper Shift\n                    var shiftValue = this.getShiftValue(asciiValue, c40, fnc1);\n                    c40Values.push(shiftValue); // Shift[123]\n                    c40Values.push(this.getC40Value(c40, shiftValue, asciiValue, fnc1));\n                }\n            }\n        }\n        if (c40Values.length % 3 !== 0) {\n            if (!((c40Values.length - 2) % 3 === 0 &&\n                this.fromPosition + this.characterLength === this.input.length())) {\n                throw new Error('C40 words must be a multiple of 3');\n            }\n            c40Values.push(0); // pad with 0 (Shift 1)\n        }\n        var result = new Uint8Array((c40Values.length / 3) * 2);\n        var byteIndex = 0;\n        for (var i = 0; i < c40Values.length; i += 3) {\n            this.setC40Word(result, byteIndex, c40Values[i] & 0xff, c40Values[i + 1] & 0xff, c40Values[i + 2] & 0xff);\n            byteIndex += 2;\n        }\n        return result;\n    };\n    Edge.prototype.getEDFBytes = function () {\n        var numberOfThirds = Math.ceil(this.characterLength / 4.0);\n        var result = new Uint8Array(numberOfThirds * 3);\n        var pos = this.fromPosition;\n        var endPos = Math.min(this.fromPosition + this.characterLength - 1, this.input.length() - 1);\n        for (var i = 0; i < numberOfThirds; i += 3) {\n            var edfValues = [];\n            for (var j = 0; j < 4; j++) {\n                if (pos <= endPos) {\n                    edfValues[j] = this.input.charAt(pos++) & 0x3f;\n                }\n                else {\n                    edfValues[j] = pos === endPos + 1 ? 0x1f : 0;\n                }\n            }\n            var val24 = edfValues[0] << 18;\n            val24 |= edfValues[1] << 12;\n            val24 |= edfValues[2] << 6;\n            val24 |= edfValues[3];\n            result[i] = (val24 >> 16) & 0xff;\n            result[i + 1] = (val24 >> 8) & 0xff;\n            result[i + 2] = val24 & 0xff;\n        }\n        return result;\n    };\n    Edge.prototype.getLatchBytes = function () {\n        switch (this.getPreviousMode()) {\n            case Mode.ASCII:\n            case Mode.B256: // after B256 ends (via length) we are back to ASCII\n                switch (this.mode) {\n                    case Mode.B256:\n                        return Edge.getBytes(231);\n                    case Mode.C40:\n                        return Edge.getBytes(230);\n                    case Mode.TEXT:\n                        return Edge.getBytes(239);\n                    case Mode.X12:\n                        return Edge.getBytes(238);\n                    case Mode.EDF:\n                        return Edge.getBytes(240);\n                }\n                break;\n            case Mode.C40:\n            case Mode.TEXT:\n            case Mode.X12:\n                if (this.mode !== this.getPreviousMode()) {\n                    switch (this.mode) {\n                        case Mode.ASCII:\n                            return Edge.getBytes(254);\n                        case Mode.B256:\n                            return Edge.getBytes(254, 231);\n                        case Mode.C40:\n                            return Edge.getBytes(254, 230);\n                        case Mode.TEXT:\n                            return Edge.getBytes(254, 239);\n                        case Mode.X12:\n                            return Edge.getBytes(254, 238);\n                        case Mode.EDF:\n                            return Edge.getBytes(254, 240);\n                    }\n                }\n                break;\n            case Mode.EDF:\n                // The rightmost EDIFACT edge always contains an unlatch character\n                if (this.mode !== Mode.EDF) {\n                    throw new Error('Cannot switch from EDF to ' + this.mode);\n                }\n                break;\n        }\n        return new Uint8Array(0);\n    };\n    // Important: The function does not return the length bytes (one or two) in case of B256 encoding\n    Edge.prototype.getDataBytes = function () {\n        switch (this.mode) {\n            case Mode.ASCII:\n                if (this.input.isECI(this.fromPosition)) {\n                    return Edge.getBytes(241, this.input.getECIValue(this.fromPosition) + 1);\n                }\n                else if (MinimalEncoder.isExtendedASCII(this.input.charAt(this.fromPosition), this.input.getFNC1Character())) {\n                    return Edge.getBytes(235, this.input.charAt(this.fromPosition) - 127);\n                }\n                else if (this.characterLength === 2) {\n                    return Edge.getBytes(this.input.charAt(this.fromPosition) * 10 +\n                        this.input.charAt(this.fromPosition + 1) +\n                        130);\n                }\n                else if (this.input.isFNC1(this.fromPosition)) {\n                    return Edge.getBytes(232);\n                }\n                else {\n                    return Edge.getBytes(this.input.charAt(this.fromPosition) + 1);\n                }\n            case Mode.B256:\n                return Edge.getBytes(this.input.charAt(this.fromPosition));\n            case Mode.C40:\n                return this.getC40Words(true, this.input.getFNC1Character());\n            case Mode.TEXT:\n                return this.getC40Words(false, this.input.getFNC1Character());\n            case Mode.X12:\n                return this.getX12Words();\n            case Mode.EDF:\n                return this.getEDFBytes();\n        }\n    };\n    return Edge;\n}());\nvar Input = /** @class */ (function (_super) {\n    __extends(Input, _super);\n    function Input(stringToEncode, priorityCharset, fnc1, shape, macroId) {\n        var _this = _super.call(this, stringToEncode, priorityCharset, fnc1) || this;\n        _this.shape = shape;\n        _this.macroId = macroId;\n        return _this;\n    }\n    Input.prototype.getMacroId = function () {\n        return this.macroId;\n    };\n    Input.prototype.getShapeHint = function () {\n        return this.shape;\n    };\n    return Input;\n}(MinimalECIInput));\n", "import { ASCIIEncoder } from './ASCIIEncoder';\nimport { Base256Encoder } from './Base256Encoder';\nimport { C40Encoder } from './C40Encoder';\nimport DefaultPlacement from './DefaultPlacement';\nimport { EdifactEncoder } from './EdifactEncoder';\nimport { EncoderContext } from './EncoderContext';\nimport ErrorCorrection from './ErrorCorrection';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport { MinimalEncoder } from './MinimalEncoder';\nimport SymbolInfo from './SymbolInfo';\nimport { TextEncoder } from './TextEncoder';\nimport { X12Encoder } from './X12Encoder';\nexport { ASCIIEncoder, Base256Encoder, C40Encoder, EdifactEncoder, EncoderContext, ErrorCorrection, DefaultPlacement, HighLevelEncoder, MinimalEncoder, SymbolInfo, TextEncoder, X12Encoder, };\n", "import BarcodeFormat from '../BarcodeFormat';\nimport BitMatrix from '../common/BitMatrix';\nimport EncodeHintType from '../EncodeHintType';\nimport ByteMatrix from '../qrcode/encoder/ByteMatrix';\nimport Charset from '../util/Charset';\nimport { DefaultPlacement, ErrorCorrection, HighLevelEncoder, MinimalEncoder, SymbolInfo, } from './encoder';\nvar DataMatrixWriter = /** @class */ (function () {\n    function DataMatrixWriter() {\n    }\n    DataMatrixWriter.prototype.encode = function (contents, format, width, height, hints) {\n        if (hints === void 0) { hints = null; }\n        if (contents.trim() === '') {\n            throw new Error('Found empty contents');\n        }\n        if (format !== BarcodeFormat.DATA_MATRIX) {\n            throw new Error('Can only encode DATA_MATRIX, but got ' + format);\n        }\n        if (width < 0 || height < 0) {\n            throw new Error('Requested dimensions can\\'t be negative: ' + width + 'x' + height);\n        }\n        // Try to get force shape & min / max size\n        var shape = 0 /* FORCE_NONE */;\n        var minSize = null;\n        var maxSize = null;\n        if (hints != null) {\n            var requestedShape = hints.get(EncodeHintType.DATA_MATRIX_SHAPE);\n            if (requestedShape != null) {\n                shape = requestedShape;\n            }\n            var requestedMinSize = hints.get(EncodeHintType.MIN_SIZE);\n            if (requestedMinSize != null) {\n                minSize = requestedMinSize;\n            }\n            var requestedMaxSize = hints.get(EncodeHintType.MAX_SIZE);\n            if (requestedMaxSize != null) {\n                maxSize = requestedMaxSize;\n            }\n        }\n        // 1. step: Data encodation\n        var encoded;\n        var hasCompactionHint = hints != null &&\n            hints.has(EncodeHintType.DATA_MATRIX_COMPACT) &&\n            Boolean(hints.get(EncodeHintType.DATA_MATRIX_COMPACT).toString());\n        if (hasCompactionHint) {\n            var hasGS1FormatHint = hints.has(EncodeHintType.GS1_FORMAT) &&\n                Boolean(hints.get(EncodeHintType.GS1_FORMAT).toString());\n            var charset = null;\n            var hasEncodingHint = hints.has(EncodeHintType.CHARACTER_SET);\n            if (hasEncodingHint) {\n                charset = Charset.forName(hints.get(EncodeHintType.CHARACTER_SET).toString());\n            }\n            encoded = MinimalEncoder.encodeHighLevel(contents, charset, hasGS1FormatHint ? 0x1d : -1, shape);\n        }\n        else {\n            var hasForceC40Hint = hints != null &&\n                hints.has(EncodeHintType.FORCE_C40) &&\n                Boolean(hints.get(EncodeHintType.FORCE_C40).toString());\n            encoded = HighLevelEncoder.encodeHighLevel(contents, shape, minSize, maxSize, hasForceC40Hint);\n        }\n        var symbolInfo = SymbolInfo.lookup(encoded.length, shape, minSize, maxSize, true);\n        // 2. step: ECC generation\n        var codewords = ErrorCorrection.encodeECC200(encoded, symbolInfo);\n        // 3. step: Module placement in Matrix\n        var placement = new DefaultPlacement(codewords, symbolInfo.getSymbolDataWidth(), symbolInfo.getSymbolDataHeight());\n        placement.place();\n        // 4. step: low-level encoding\n        return this.encodeLowLevel(placement, symbolInfo, width, height);\n    };\n    /**\n     * Encode the given symbol info to a bit matrix.\n     *\n     * @param placement  The DataMatrix placement.\n     * @param symbolInfo The symbol info to encode.\n     * @return The bit matrix generated.\n     */\n    DataMatrixWriter.prototype.encodeLowLevel = function (placement, symbolInfo, width, height) {\n        var symbolWidth = symbolInfo.getSymbolDataWidth();\n        var symbolHeight = symbolInfo.getSymbolDataHeight();\n        var matrix = new ByteMatrix(symbolInfo.getSymbolWidth(), symbolInfo.getSymbolHeight());\n        var matrixY = 0;\n        for (var y = 0; y < symbolHeight; y++) {\n            // Fill the top edge with alternate 0 / 1\n            var matrixX = void 0;\n            if (y % symbolInfo.matrixHeight === 0) {\n                matrixX = 0;\n                for (var x = 0; x < symbolInfo.getSymbolWidth(); x++) {\n                    matrix.setBoolean(matrixX, matrixY, x % 2 === 0);\n                    matrixX++;\n                }\n                matrixY++;\n            }\n            matrixX = 0;\n            for (var x = 0; x < symbolWidth; x++) {\n                // Fill the right edge with full 1\n                if (x % symbolInfo.matrixWidth === 0) {\n                    matrix.setBoolean(matrixX, matrixY, true);\n                    matrixX++;\n                }\n                matrix.setBoolean(matrixX, matrixY, placement.getBit(x, y));\n                matrixX++;\n                // Fill the right edge with alternate 0 / 1\n                if (x % symbolInfo.matrixWidth === symbolInfo.matrixWidth - 1) {\n                    matrix.setBoolean(matrixX, matrixY, y % 2 === 0);\n                    matrixX++;\n                }\n            }\n            matrixY++;\n            // Fill the bottom edge with full 1\n            if (y % symbolInfo.matrixHeight === symbolInfo.matrixHeight - 1) {\n                matrixX = 0;\n                for (var x = 0; x < symbolInfo.getSymbolWidth(); x++) {\n                    matrix.setBoolean(matrixX, matrixY, true);\n                    matrixX++;\n                }\n                matrixY++;\n            }\n        }\n        return this.convertByteMatrixToBitMatrix(matrix, width, height);\n    };\n    /**\n     * Convert the ByteMatrix to BitMatrix.\n     *\n     * @param reqHeight The requested height of the image (in pixels) with the Datamatrix code\n     * @param reqWidth The requested width of the image (in pixels) with the Datamatrix code\n     * @param matrix The input matrix.\n     * @return The output matrix.\n     */\n    DataMatrixWriter.prototype.convertByteMatrixToBitMatrix = function (matrix, reqWidth, reqHeight) {\n        var matrixWidth = matrix.getWidth();\n        var matrixHeight = matrix.getHeight();\n        var outputWidth = Math.max(reqWidth, matrixWidth);\n        var outputHeight = Math.max(reqHeight, matrixHeight);\n        var multiple = Math.min(outputWidth / matrixWidth, outputHeight / matrixHeight);\n        var leftPadding = (outputWidth - matrixWidth * multiple) / 2;\n        var topPadding = (outputHeight - matrixHeight * multiple) / 2;\n        var output;\n        // remove padding if requested width and height are too small\n        if (reqHeight < matrixHeight || reqWidth < matrixWidth) {\n            leftPadding = 0;\n            topPadding = 0;\n            output = new BitMatrix(matrixWidth, matrixHeight);\n        }\n        else {\n            output = new BitMatrix(reqWidth, reqHeight);\n        }\n        output.clear();\n        for (var inputY = 0, outputY = topPadding; inputY < matrixHeight; inputY++, outputY += multiple) {\n            // Write the contents of this row of the bytematrix\n            for (var inputX = 0, outputX = leftPadding; inputX < matrixWidth; inputX++, outputX += multiple) {\n                if (matrix.get(inputX, inputY) === 1) {\n                    output.setRegion(outputX, outputY, multiple, multiple);\n                }\n            }\n        }\n        return output;\n    };\n    return DataMatrixWriter;\n}());\nexport default DataMatrixWriter;\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 */\nvar AztecCode = /** @class */ (function () {\n    function AztecCode() {\n    }\n    /**\n     * @return {@code true} if compact instead of full mode\n     */\n    AztecCode.prototype.isCompact = function () {\n        return this.compact;\n    };\n    AztecCode.prototype.setCompact = function (compact) {\n        this.compact = compact;\n    };\n    /**\n     * @return size in pixels (width and height)\n     */\n    AztecCode.prototype.getSize = function () {\n        return this.size;\n    };\n    AztecCode.prototype.setSize = function (size) {\n        this.size = size;\n    };\n    /**\n     * @return number of levels\n     */\n    AztecCode.prototype.getLayers = function () {\n        return this.layers;\n    };\n    AztecCode.prototype.setLayers = function (layers) {\n        this.layers = layers;\n    };\n    /**\n     * @return number of data codewords\n     */\n    AztecCode.prototype.getCodeWords = function () {\n        return this.codeWords;\n    };\n    AztecCode.prototype.setCodeWords = function (codeWords) {\n        this.codeWords = codeWords;\n    };\n    /**\n     * @return the symbol image\n     */\n    AztecCode.prototype.getMatrix = function () {\n        return this.matrix;\n    };\n    AztecCode.prototype.setMatrix = function (matrix) {\n        this.matrix = matrix;\n    };\n    return AztecCode;\n}());\nexport default AztecCode;\n", "var Collections = /** @class */ (function () {\n    function Collections() {\n    }\n    /**\n     * The singletonList(T) method is used to return an immutable list containing only the specified object.\n     */\n    Collections.singletonList = function (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    Collections.min = function (collection, comparator) {\n        return collection.sort(comparator)[0];\n    };\n    return Collections;\n}());\nexport default Collections;\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*/\nvar Token = /** @class */ (function () {\n    function Token(previous) {\n        this.previous = previous;\n    }\n    Token.prototype.getPrevious = function () {\n        return this.previous;\n    };\n    return Token;\n}());\nexport default Token;\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*/\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport Token from './Token';\nimport Integer from '../../util/Integer';\nvar SimpleToken = /** @class */ (function (_super) {\n    __extends(SimpleToken, _super);\n    function SimpleToken(previous, value, bitCount) {\n        var _this = _super.call(this, previous) || this;\n        _this.value = value;\n        _this.bitCount = bitCount;\n        return _this;\n    }\n    /**\n     * @Override\n     */\n    SimpleToken.prototype.appendTo = function (bitArray, text) {\n        bitArray.appendBits(this.value, this.bitCount);\n    };\n    SimpleToken.prototype.add = function (value, bitCount) {\n        return new SimpleToken(this, value, bitCount);\n    };\n    SimpleToken.prototype.addBinaryShift = function (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    SimpleToken.prototype.toString = function () {\n        var value = this.value & ((1 << this.bitCount) - 1);\n        value |= 1 << this.bitCount;\n        return '<' + Integer.toBinaryString(value | (1 << this.bitCount)).substring(1) + '>';\n    };\n    return SimpleToken;\n}(Token));\nexport default SimpleToken;\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*/\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        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        return extendStatics(d, b);\n    };\n    return function (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})();\nimport SimpleToken from './SimpleToken';\nvar BinaryShiftToken = /** @class */ (function (_super) {\n    __extends(BinaryShiftToken, _super);\n    function BinaryShiftToken(previous, binaryShiftStart, binaryShiftByteCount) {\n        var _this = _super.call(this, previous, 0, 0) || this;\n        _this.binaryShiftStart = binaryShiftStart;\n        _this.binaryShiftByteCount = binaryShiftByteCount;\n        return _this;\n    }\n    /**\n     * @Override\n     */\n    BinaryShiftToken.prototype.appendTo = function (bitArray, text) {\n        for (var 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    BinaryShiftToken.prototype.addBinaryShift = function (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    BinaryShiftToken.prototype.toString = function () {\n        return '<' + this.binaryShiftStart + '::' + (this.binaryShiftStart + this.binaryShiftByteCount - 1) + '>';\n    };\n    return BinaryShiftToken;\n}(SimpleToken));\nexport default BinaryShiftToken;\n", "import SimpleToken from './SimpleToken';\nimport BinaryShiftToken from './BinaryShiftToken';\nexport 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}\nexport function add(token, value, bitCount) {\n    return new SimpleToken(token, value, bitCount);\n}\n", "import SimpleToken from './SimpleToken';\nexport var /*final*/ MODE_NAMES = [\n    'UPPER',\n    'LOWER',\n    'DIGIT',\n    'MIXED',\n    'PUNCT'\n];\nexport var /*final*/ MODE_UPPER = 0; // 5 bits\nexport var /*final*/ MODE_LOWER = 1; // 5 bits\nexport var /*final*/ MODE_DIGIT = 2; // 4 bits\nexport var /*final*/ MODE_MIXED = 3; // 5 bits\nexport var /*final*/ MODE_PUNCT = 4; // 5 bits\nexport var EMPTY_TOKEN = new SimpleToken(null, 0, 0);\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\nexport var 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", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport Arrays from '../../util/Arrays';\nimport * as C from './EncoderConstants';\nexport function static_SHIFT_TABLE(SHIFT_TABLE) {\n    var e_1, _a;\n    try {\n        for (var SHIFT_TABLE_1 = __values(SHIFT_TABLE), SHIFT_TABLE_1_1 = SHIFT_TABLE_1.next(); !SHIFT_TABLE_1_1.done; SHIFT_TABLE_1_1 = SHIFT_TABLE_1.next()) {\n            var table = SHIFT_TABLE_1_1.value /*Int32Array*/;\n            Arrays.fill(table, -1);\n        }\n    }\n    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n    finally {\n        try {\n            if (SHIFT_TABLE_1_1 && !SHIFT_TABLE_1_1.done && (_a = SHIFT_TABLE_1.return)) _a.call(SHIFT_TABLE_1);\n        }\n        finally { if (e_1) throw e_1.error; }\n    }\n    SHIFT_TABLE[C.MODE_UPPER][C.MODE_PUNCT] = 0;\n    SHIFT_TABLE[C.MODE_LOWER][C.MODE_PUNCT] = 0;\n    SHIFT_TABLE[C.MODE_LOWER][C.MODE_UPPER] = 28;\n    SHIFT_TABLE[C.MODE_MIXED][C.MODE_PUNCT] = 0;\n    SHIFT_TABLE[C.MODE_DIGIT][C.MODE_PUNCT] = 0;\n    SHIFT_TABLE[C.MODE_DIGIT][C.MODE_UPPER] = 15;\n    return SHIFT_TABLE;\n}\nexport var /*final*/ SHIFT_TABLE = static_SHIFT_TABLE(Arrays.createInt32Array(6, 6)); // mode shift codes, per table\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// package com.google.zxing.aztec.encoder;\n// import java.util.Deque;\n// import java.util.LinkedList;\n// import com.google.zxing.common.BitArray;\nimport BitArray from '../../common/BitArray';\nimport * as TokenHelpers from './TokenHelpers';\nimport * as C from './EncoderConstants';\nimport * as LatchTable from './LatchTable';\nimport * as ShiftTable from './ShiftTable';\nimport StringUtils from '../../common/StringUtils';\n/**\n * State represents all information about a sequence necessary to generate the current output.\n * Note that a state is immutable.\n */\nvar State = /** @class */ (function () {\n    function State(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    State.prototype.getMode = function () {\n        return this.mode;\n    };\n    State.prototype.getToken = function () {\n        return this.token;\n    };\n    State.prototype.getBinaryShiftByteCount = function () {\n        return this.binaryShiftByteCount;\n    };\n    State.prototype.getBitCount = function () {\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    State.prototype.latchAndAppend = function (mode, value) {\n        // assert binaryShiftByteCount === 0;\n        var bitCount = this.bitCount;\n        var token = this.token;\n        if (mode !== this.mode) {\n            var latch = LatchTable.LATCH_TABLE[this.mode][mode];\n            token = TokenHelpers.add(token, latch & 0xffff, latch >> 16);\n            bitCount += latch >> 16;\n        }\n        var latchModeBitCount = mode === C.MODE_DIGIT ? 4 : 5;\n        token = TokenHelpers.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    State.prototype.shiftAndAppend = function (mode, value) {\n        // assert binaryShiftByteCount === 0 && this.mode !== mode;\n        var token = this.token;\n        var thisModeBitCount = this.mode === C.MODE_DIGIT ? 4 : 5;\n        // Shifts exist only to UPPER and PUNCT, both with tokens size 5.\n        token = TokenHelpers.add(token, ShiftTable.SHIFT_TABLE[this.mode][mode], thisModeBitCount);\n        token = TokenHelpers.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    State.prototype.addBinaryShiftChar = function (index) {\n        var token = this.token;\n        var mode = this.mode;\n        var bitCount = this.bitCount;\n        if (this.mode === C.MODE_PUNCT || this.mode === C.MODE_DIGIT) {\n            // assert binaryShiftByteCount === 0;\n            var latch = LatchTable.LATCH_TABLE[mode][C.MODE_UPPER];\n            token = TokenHelpers.add(token, latch & 0xffff, latch >> 16);\n            bitCount += latch >> 16;\n            mode = C.MODE_UPPER;\n        }\n        var deltaBitCount = this.binaryShiftByteCount === 0 || this.binaryShiftByteCount === 31\n            ? 18\n            : this.binaryShiftByteCount === 62\n                ? 9\n                : 8;\n        var 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    State.prototype.endBinaryShift = function (index) {\n        if (this.binaryShiftByteCount === 0) {\n            return this;\n        }\n        var token = this.token;\n        token = TokenHelpers.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    State.prototype.isBetterThanOrEqualTo = function (other) {\n        var newModeBitCount = this.bitCount + (LatchTable.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    State.prototype.toBitArray = function (text) {\n        var e_1, _a;\n        // Reverse the tokens, so that they are in the order that they should\n        // be output\n        var symbols = [];\n        for (var token = this.endBinaryShift(text.length).token; token !== null; token = token.getPrevious()) {\n            symbols.unshift(token);\n        }\n        var bitArray = new BitArray();\n        try {\n            // Add each token to the result.\n            for (var symbols_1 = __values(symbols), symbols_1_1 = symbols_1.next(); !symbols_1_1.done; symbols_1_1 = symbols_1.next()) {\n                var symbol = symbols_1_1.value;\n                symbol.appendTo(bitArray, text);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (symbols_1_1 && !symbols_1_1.done && (_a = symbols_1.return)) _a.call(symbols_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        // assert bitArray.getSize() === this.bitCount;\n        return bitArray;\n    };\n    /**\n     * @Override\n     */\n    State.prototype.toString = function () {\n        return StringUtils.format('%s bits=%d bytes=%d', C.MODE_NAMES[this.mode], this.bitCount, this.binaryShiftByteCount);\n    };\n    State.calculateBinaryShiftCost = function (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    State.INITIAL_STATE = new State(C.EMPTY_TOKEN, C.MODE_UPPER, 0, 0);\n    return State;\n}());\nexport default State;\n", "import * as C from './EncoderConstants';\nimport Arrays from '../../util/Arrays';\nimport StringUtils from '../../common/StringUtils';\nexport function static_CHAR_MAP(CHAR_MAP) {\n    var spaceCharCode = StringUtils.getCharCode(' ');\n    var pointCharCode = StringUtils.getCharCode('.');\n    var commaCharCode = StringUtils.getCharCode(',');\n    CHAR_MAP[C.MODE_UPPER][spaceCharCode] = 1;\n    var zUpperCharCode = StringUtils.getCharCode('Z');\n    var aUpperCharCode = StringUtils.getCharCode('A');\n    for (var c = aUpperCharCode; c <= zUpperCharCode; c++) {\n        CHAR_MAP[C.MODE_UPPER][c] = c - aUpperCharCode + 2;\n    }\n    CHAR_MAP[C.MODE_LOWER][spaceCharCode] = 1;\n    var zLowerCharCode = StringUtils.getCharCode('z');\n    var aLowerCharCode = StringUtils.getCharCode('a');\n    for (var c = aLowerCharCode; c <= zLowerCharCode; c++) {\n        CHAR_MAP[C.MODE_LOWER][c] = c - aLowerCharCode + 2;\n    }\n    CHAR_MAP[C.MODE_DIGIT][spaceCharCode] = 1;\n    var nineCharCode = StringUtils.getCharCode('9');\n    var zeroCharCode = StringUtils.getCharCode('0');\n    for (var c = zeroCharCode; c <= nineCharCode; c++) {\n        CHAR_MAP[C.MODE_DIGIT][c] = c - zeroCharCode + 2;\n    }\n    CHAR_MAP[C.MODE_DIGIT][commaCharCode] = 12;\n    CHAR_MAP[C.MODE_DIGIT][pointCharCode] = 13;\n    var 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 (var i = 0; i < mixedTable.length; i++) {\n        CHAR_MAP[C.MODE_MIXED][StringUtils.getCharCode(mixedTable[i])] = i;\n    }\n    var 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 (var i = 0; i < punctTable.length; i++) {\n        if (StringUtils.getCharCode(punctTable[i]) > 0) {\n            CHAR_MAP[C.MODE_PUNCT][StringUtils.getCharCode(punctTable[i])] = i;\n        }\n    }\n    return CHAR_MAP;\n}\nexport var CHAR_MAP = static_CHAR_MAP(Arrays.createInt32Array(5, 256));\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 */\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n// import java.util.Collection;\n// import java.util.Collections;\nimport Collections from '../../util/Collections';\n// import java.util.Comparator;\n// import java.util.Iterator;\n// import java.util.LinkedList;\nimport State from './State';\nimport * as C from './EncoderConstants';\nimport * as CharMap from './CharMap';\nimport * as ShiftTable from './ShiftTable';\nimport StringUtils from '../../common/StringUtils';\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 */\nvar HighLevelEncoder = /** @class */ (function () {\n    function HighLevelEncoder(text) {\n        this.text = text;\n    }\n    /**\n     * @return text represented by this encoder encoded as a {@link BitArray}\n     */\n    HighLevelEncoder.prototype.encode = function () {\n        var spaceCharCode = StringUtils.getCharCode(' ');\n        var lineBreakCharCode = StringUtils.getCharCode('\\n');\n        var states = Collections.singletonList(State.INITIAL_STATE);\n        for (var index = 0; index < this.text.length; index++) {\n            var pairCode = void 0;\n            var 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        var minState = Collections.min(states, function (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    HighLevelEncoder.prototype.updateStateListForChar = function (states, index) {\n        var e_1, _a;\n        var result = [];\n        try {\n            for (var states_1 = __values(states), states_1_1 = states_1.next(); !states_1_1.done; states_1_1 = states_1.next()) {\n                var state = states_1_1.value /*State*/;\n                this.updateStateForChar(state, index, result);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (states_1_1 && !states_1_1.done && (_a = states_1.return)) _a.call(states_1);\n            }\n            finally { if (e_1) throw e_1.error; }\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    HighLevelEncoder.prototype.updateStateForChar = function (state, index, result) {\n        var ch = (this.text[index] & 0xff);\n        var charInCurrentTable = CharMap.CHAR_MAP[state.getMode()][ch] > 0;\n        var stateNoBinary = null;\n        for (var mode /*int*/ = 0; mode <= C.MODE_PUNCT; mode++) {\n            var charInMode = CharMap.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 === C.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                    var latchState = stateNoBinary.latchAndAppend(mode, charInMode);\n                    result.push(latchState);\n                }\n                // Try generating the character by switching to its mode.\n                if (!charInCurrentTable &&\n                    ShiftTable.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                    var shiftState = stateNoBinary.shiftAndAppend(mode, charInMode);\n                    result.push(shiftState);\n                }\n            }\n        }\n        if (state.getBinaryShiftByteCount() > 0 ||\n            CharMap.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            var binaryState = state.addBinaryShiftChar(index);\n            result.push(binaryState);\n        }\n    };\n    HighLevelEncoder.updateStateListForPair = function (states, index, pairCode) {\n        var e_2, _a;\n        var result = [];\n        try {\n            for (var states_2 = __values(states), states_2_1 = states_2.next(); !states_2_1.done; states_2_1 = states_2.next()) {\n                var state = states_2_1.value /*State*/;\n                this.updateStateForPair(state, index, pairCode, result);\n            }\n        }\n        catch (e_2_1) { e_2 = { error: e_2_1 }; }\n        finally {\n            try {\n                if (states_2_1 && !states_2_1.done && (_a = states_2.return)) _a.call(states_2);\n            }\n            finally { if (e_2) throw e_2.error; }\n        }\n        return this.simplifyStates(result);\n    };\n    HighLevelEncoder.updateStateForPair = function (state, index, pairCode, result) {\n        var stateNoBinary = state.endBinaryShift(index);\n        // Possibility 1.  Latch to C.MODE_PUNCT, and then append this code\n        result.push(stateNoBinary.latchAndAppend(C.MODE_PUNCT, pairCode));\n        if (state.getMode() !== C.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(C.MODE_PUNCT, pairCode));\n        }\n        if (pairCode === 3 || pairCode === 4) {\n            // both characters are in DIGITS.  Sometimes better to just add two digits\n            var digitState = stateNoBinary\n                .latchAndAppend(C.MODE_DIGIT, 16 - pairCode) // period or comma in DIGIT\n                .latchAndAppend(C.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            var binaryState = state\n                .addBinaryShiftChar(index)\n                .addBinaryShiftChar(index + 1);\n            result.push(binaryState);\n        }\n    };\n    HighLevelEncoder.simplifyStates = function (states) {\n        var e_3, _a, e_4, _b;\n        var result = [];\n        try {\n            for (var states_3 = __values(states), states_3_1 = states_3.next(); !states_3_1.done; states_3_1 = states_3.next()) {\n                var newState = states_3_1.value;\n                var add = true;\n                var _loop_1 = function (oldState) {\n                    if (oldState.isBetterThanOrEqualTo(newState)) {\n                        add = false;\n                        return \"break\";\n                    }\n                    if (newState.isBetterThanOrEqualTo(oldState)) {\n                        // iterator.remove();\n                        result = result.filter(function (x) { return x !== oldState; }); // remove old state\n                    }\n                };\n                try {\n                    for (var result_1 = (e_4 = void 0, __values(result)), result_1_1 = result_1.next(); !result_1_1.done; result_1_1 = result_1.next()) {\n                        var oldState = result_1_1.value;\n                        var state_1 = _loop_1(oldState);\n                        if (state_1 === \"break\")\n                            break;\n                    }\n                }\n                catch (e_4_1) { e_4 = { error: e_4_1 }; }\n                finally {\n                    try {\n                        if (result_1_1 && !result_1_1.done && (_b = result_1.return)) _b.call(result_1);\n                    }\n                    finally { if (e_4) throw e_4.error; }\n                }\n                if (add) {\n                    result.push(newState);\n                }\n            }\n        }\n        catch (e_3_1) { e_3 = { error: e_3_1 }; }\n        finally {\n            try {\n                if (states_3_1 && !states_3_1.done && (_a = states_3.return)) _a.call(states_3);\n            }\n            finally { if (e_3) throw e_3.error; }\n        }\n        return result;\n    };\n    return HighLevelEncoder;\n}());\nexport default HighLevelEncoder;\n", "var __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nimport BitArray from '../../common/BitArray';\nimport IllegalArgumentException from '../../IllegalArgumentException';\nimport StringUtils from '../../common/StringUtils';\nimport BitMatrix from '../../common/BitMatrix';\nimport AztecCode from './AztecCode';\nimport ReedSolomonEncoder from '../../common/reedsolomon/ReedSolomonEncoder';\nimport GenericGF from '../../common/reedsolomon/GenericGF';\nimport HighLevelEncoder from './HighLevelEncoder';\nimport Integer from '../../util/Integer';\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 */\nvar Encoder = /** @class */ (function () {\n    function Encoder() {\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    Encoder.encodeBytes = function (data) {\n        return Encoder.encode(data, Encoder.DEFAULT_EC_PERCENT, Encoder.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    Encoder.encode = function (data, minECCPercent, userSpecifiedLayers) {\n        // High-level encode\n        var bits = new HighLevelEncoder(data).encode();\n        // stuff bits and choose symbol size\n        var eccBits = Integer.truncDivision((bits.getSize() * minECCPercent), 100) + 11;\n        var totalSizeBits = bits.getSize() + eccBits;\n        var compact;\n        var layers;\n        var totalBitsInLayer;\n        var wordSize;\n        var stuffedBits;\n        if (userSpecifiedLayers !== Encoder.DEFAULT_AZTEC_LAYERS) {\n            compact = userSpecifiedLayers < 0;\n            layers = Math.abs(userSpecifiedLayers);\n            if (layers > (compact ? Encoder.MAX_NB_BITS_COMPACT : Encoder.MAX_NB_BITS)) {\n                throw new IllegalArgumentException(StringUtils.format('Illegal value %s for layers', userSpecifiedLayers));\n            }\n            totalBitsInLayer = Encoder.totalBitsInLayer(layers, compact);\n            wordSize = Encoder.WORD_SIZE[layers];\n            var usableBitsInLayers = totalBitsInLayer - (totalBitsInLayer % wordSize);\n            stuffedBits = Encoder.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 (var i /*int*/ = 0;; i++) {\n                if (i > Encoder.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.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.WORD_SIZE[layers]) {\n                    wordSize = Encoder.WORD_SIZE[layers];\n                    stuffedBits = Encoder.stuffBits(bits, wordSize);\n                }\n                var 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        var messageBits = Encoder.generateCheckWords(stuffedBits, totalBitsInLayer, wordSize);\n        // generate mode message\n        var messageSizeInWords = stuffedBits.getSize() / wordSize;\n        var modeMessage = Encoder.generateModeMessage(compact, layers, messageSizeInWords);\n        // allocate symbol\n        var baseMatrixSize = (compact ? 11 : 14) + layers * 4; // not including alignment lines\n        var alignmentMap = new Int32Array(baseMatrixSize);\n        var matrixSize;\n        if (compact) {\n            // no alignment marks in compact mode, alignmentMap is a no-op\n            matrixSize = baseMatrixSize;\n            for (var 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            var origCenter = Integer.truncDivision(baseMatrixSize, 2);\n            var center = Integer.truncDivision(matrixSize, 2);\n            for (var i /*int*/ = 0; i < origCenter; i++) {\n                var newOffset = i + Integer.truncDivision(i, 15);\n                alignmentMap[origCenter - i - 1] = center - newOffset - 1;\n                alignmentMap[origCenter + i] = center + newOffset + 1;\n            }\n        }\n        var matrix = new BitMatrix(matrixSize);\n        // draw data bits\n        for (var i /*int*/ = 0, rowOffset = 0; i < layers; i++) {\n            var rowSize = (layers - i) * 4 + (compact ? 9 : 12);\n            for (var j /*int*/ = 0; j < rowSize; j++) {\n                var columnOffset = j * 2;\n                for (var 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.drawModeMessage(matrix, compact, matrixSize, modeMessage);\n        // draw alignment marks\n        if (compact) {\n            Encoder.drawBullsEye(matrix, Integer.truncDivision(matrixSize, 2), 5);\n        }\n        else {\n            Encoder.drawBullsEye(matrix, Integer.truncDivision(matrixSize, 2), 7);\n            for (var i /*int*/ = 0, j = 0; i < Integer.truncDivision(baseMatrixSize, 2) - 1; i += 15, j += 16) {\n                for (var 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        var 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    Encoder.drawBullsEye = function (matrix, center, size) {\n        for (var i /*int*/ = 0; i < size; i += 2) {\n            for (var 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    Encoder.generateModeMessage = function (compact, layers, messageSizeInWords) {\n        var modeMessage = new BitArray();\n        if (compact) {\n            modeMessage.appendBits(layers - 1, 2);\n            modeMessage.appendBits(messageSizeInWords - 1, 6);\n            modeMessage = Encoder.generateCheckWords(modeMessage, 28, 4);\n        }\n        else {\n            modeMessage.appendBits(layers - 1, 5);\n            modeMessage.appendBits(messageSizeInWords - 1, 11);\n            modeMessage = Encoder.generateCheckWords(modeMessage, 40, 4);\n        }\n        return modeMessage;\n    };\n    Encoder.drawModeMessage = function (matrix, compact, matrixSize, modeMessage) {\n        var center = Integer.truncDivision(matrixSize, 2);\n        if (compact) {\n            for (var i /*int*/ = 0; i < 7; i++) {\n                var 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 (var i /*int*/ = 0; i < 10; i++) {\n                var 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    Encoder.generateCheckWords = function (bitArray, totalBits, wordSize) {\n        var e_1, _a;\n        // bitArray is guaranteed to be a multiple of the wordSize, so no padding needed\n        var messageSizeInWords = bitArray.getSize() / wordSize;\n        var rs = new ReedSolomonEncoder(Encoder.getGF(wordSize));\n        var totalWords = Integer.truncDivision(totalBits, wordSize);\n        var messageWords = Encoder.bitsToWords(bitArray, wordSize, totalWords);\n        rs.encode(messageWords, totalWords - messageSizeInWords);\n        var startPad = totalBits % wordSize;\n        var messageBits = new BitArray();\n        messageBits.appendBits(0, startPad);\n        try {\n            for (var _b = __values(Array.from(messageWords)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var messageWord = _c.value /*: int*/;\n                messageBits.appendBits(messageWord, wordSize);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return messageBits;\n    };\n    Encoder.bitsToWords = function (stuffedBits, wordSize, totalWords) {\n        var message = new Int32Array(totalWords);\n        var i;\n        var n;\n        for (i = 0, n = stuffedBits.getSize() / wordSize; i < n; i++) {\n            var value = 0;\n            for (var 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    Encoder.getGF = function (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    Encoder.stuffBits = function (bits, wordSize) {\n        var out = new BitArray();\n        var n = bits.getSize();\n        var mask = (1 << wordSize) - 2;\n        for (var i /*int*/ = 0; i < n; i += wordSize) {\n            var word = 0;\n            for (var 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    Encoder.totalBitsInLayer = function (layers, compact) {\n        return ((compact ? 88 : 112) + 16 * layers) * layers;\n    };\n    Encoder.DEFAULT_EC_PERCENT = 33; // default minimal percentage of error check words\n    Encoder.DEFAULT_AZTEC_LAYERS = 0;\n    Encoder.MAX_NB_BITS = 32;\n    Encoder.MAX_NB_BITS_COMPACT = 4;\n    Encoder.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    return Encoder;\n}());\nexport default Encoder;\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;\n// import com.google.zxing.BarcodeFormat;\nimport BarcodeFormat from '../BarcodeFormat';\n// import com.google.zxing.EncodeHintType;\nimport EncodeHintType from '../EncodeHintType';\n// import com.google.zxing.aztec.encoder.Encoder;\nimport Encoder from './encoder/Encoder';\n// import com.google.zxing.common.BitMatrix;\nimport BitMatrix from '../common/BitMatrix';\n// import java.nio.charset.Charset;\nimport Charset from '../util/Charset';\n// import java.nio.charset.StandardCharsets;\nimport StandardCharsets from '../util/StandardCharsets';\n// import java.util.Map;\nimport Integer from '../util/Integer';\nimport IllegalStateException from '../IllegalStateException';\nimport IllegalArgumentException from '../IllegalArgumentException';\nimport StringUtils from '../common/StringUtils';\n/**\n * Renders an Aztec code as a {@link BitMatrix}.\n */\nvar AztecWriter = /** @class */ (function () {\n    function AztecWriter() {\n    }\n    // @Override\n    AztecWriter.prototype.encode = function (contents, format, width, height) {\n        return this.encodeWithHints(contents, format, width, height, null);\n    };\n    // @Override\n    AztecWriter.prototype.encodeWithHints = function (contents, format, width, height, hints) {\n        var charset = StandardCharsets.ISO_8859_1;\n        var eccPercent = Encoder.DEFAULT_EC_PERCENT;\n        var layers = Encoder.DEFAULT_AZTEC_LAYERS;\n        if (hints != null) {\n            if (hints.has(EncodeHintType.CHARACTER_SET)) {\n                charset = Charset.forName(hints.get(EncodeHintType.CHARACTER_SET).toString());\n            }\n            if (hints.has(EncodeHintType.ERROR_CORRECTION)) {\n                eccPercent = Integer.parseInt(hints.get(EncodeHintType.ERROR_CORRECTION).toString());\n            }\n            if (hints.has(EncodeHintType.AZTEC_LAYERS)) {\n                layers = Integer.parseInt(hints.get(EncodeHintType.AZTEC_LAYERS).toString());\n            }\n        }\n        return AztecWriter.encodeLayers(contents, format, width, height, charset, eccPercent, layers);\n    };\n    AztecWriter.encodeLayers = function (contents, format, width, height, charset, eccPercent, layers) {\n        if (format !== BarcodeFormat.AZTEC) {\n            throw new IllegalArgumentException('Can only encode AZTEC, but got ' + format);\n        }\n        var aztec = Encoder.encode(StringUtils.getBytes(contents, charset), eccPercent, layers);\n        return AztecWriter.renderResult(aztec, width, height);\n    };\n    AztecWriter.renderResult = function (code, width, height) {\n        var input = code.getMatrix();\n        if (input == null) {\n            throw new IllegalStateException();\n        }\n        var inputWidth = input.getWidth();\n        var inputHeight = input.getHeight();\n        var outputWidth = Math.max(width, inputWidth);\n        var outputHeight = Math.max(height, inputHeight);\n        var multiple = Math.min(outputWidth / inputWidth, outputHeight / inputHeight);\n        var leftPadding = (outputWidth - (inputWidth * multiple)) / 2;\n        var topPadding = (outputHeight - (inputHeight * multiple)) / 2;\n        var output = new BitMatrix(outputWidth, outputHeight);\n        for (var inputY /*int*/ = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple) {\n            // Write the contents of this row of the barcode\n            for (var 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    return AztecWriter;\n}());\nexport default AztecWriter;\n", "export * from './browser';\n// Exceptions\nexport { default as ArgumentException } from './core/ArgumentException';\nexport { default as ArithmeticException } from './core/ArithmeticException';\nexport { default as ChecksumException } from './core/ChecksumException';\nexport { default as Exception } from './core/Exception';\nexport { default as FormatException } from './core/FormatException';\nexport { default as IllegalArgumentException } from './core/IllegalArgumentException';\nexport { default as IllegalStateException } from './core/IllegalStateException';\nexport { default as NotFoundException } from './core/NotFoundException';\nexport { default as ReaderException } from './core/ReaderException';\nexport { default as ReedSolomonException } from './core/ReedSolomonException';\nexport { default as UnsupportedOperationException } from './core/UnsupportedOperationException';\nexport { default as WriterException } from './core/WriterException';\n// core\nexport { default as BarcodeFormat } from './core/BarcodeFormat';\nexport { default as Binarizer } from './core/Binarizer';\nexport { default as BinaryBitmap } from './core/BinaryBitmap';\nexport { default as DecodeHintType } from './core/DecodeHintType';\nexport { default as InvertedLuminanceSource } from './core/InvertedLuminanceSource';\nexport { default as LuminanceSource } from './core/LuminanceSource';\nexport { default as MultiFormatReader } from './core/MultiFormatReader';\nexport { default as MultiFormatWriter } from './core/MultiFormatWriter';\nexport { default as PlanarYUVLuminanceSource } from './core/PlanarYUVLuminanceSource';\nexport { default as Result } from './core/Result';\nexport { default as ResultMetadataType } from './core/ResultMetadataType';\nexport { default as RGBLuminanceSource } from './core/RGBLuminanceSource';\nexport { default as ResultPoint } from './core/ResultPoint';\n// core/util\nexport { default as ZXingSystem } from './core/util/System';\nexport { default as ZXingStringBuilder } from './core/util/StringBuilder';\nexport { default as ZXingStringEncoding } from './core/util/StringEncoding';\nexport { default as ZXingCharset } from './core/util/Charset';\nexport { default as ZXingArrays } from './core/util/Arrays';\nexport { default as ZXingStandardCharsets } from './core/util/StandardCharsets';\nexport { default as ZXingInteger } from './core/util/Integer';\n// core/common\nexport { default as BitArray } from './core/common/BitArray';\nexport { default as BitMatrix } from './core/common/BitMatrix';\nexport { default as BitSource } from './core/common/BitSource';\nexport { default as CharacterSetECI } from './core/common/CharacterSetECI';\nexport { default as DecoderResult } from './core/common/DecoderResult';\nexport { default as DefaultGridSampler } from './core/common/DefaultGridSampler';\nexport { default as DetectorResult } from './core/common/DetectorResult';\nexport { default as EncodeHintType } from './core/EncodeHintType';\nexport { default as GlobalHistogramBinarizer } from './core/common/GlobalHistogramBinarizer';\nexport { default as GridSampler } from './core/common/GridSampler';\nexport { default as GridSamplerInstance } from './core/common/GridSamplerInstance';\nexport { default as HybridBinarizer } from './core/common/HybridBinarizer';\nexport { default as PerspectiveTransform } from './core/common/PerspectiveTransform';\nexport { default as StringUtils } from './core/common/StringUtils';\n// core/common/detector\nexport { default as MathUtils } from './core/common/detector/MathUtils';\n// export { default as MonochromeRectangleDetector } from './core/common/detector/MonochromeRectangleDetector';\nexport { default as WhiteRectangleDetector } from './core/common/detector/WhiteRectangleDetector';\n// core/common/reedsolomon\nexport { default as GenericGF } from './core/common/reedsolomon/GenericGF';\nexport { default as GenericGFPoly } from './core/common/reedsolomon/GenericGFPoly';\nexport { default as ReedSolomonDecoder } from './core/common/reedsolomon/ReedSolomonDecoder';\nexport { default as ReedSolomonEncoder } from './core/common/reedsolomon/ReedSolomonEncoder';\n// core/datamatrix\nexport { default as DataMatrixReader } from './core/datamatrix/DataMatrixReader';\nexport { default as DataMatrixDecodedBitStreamParser } from './core/datamatrix/decoder/DecodedBitStreamParser';\nexport { default as DataMatrixDefaultPlacement } from './core/datamatrix/encoder/DefaultPlacement';\nexport { default as DataMatrixErrorCorrection } from './core/datamatrix/encoder/ErrorCorrection';\nexport { default as DataMatrixHighLevelEncoder } from './core/datamatrix/encoder/HighLevelEncoder';\nexport { default as DataMatrixSymbolInfo } from './core/datamatrix/encoder/SymbolInfo';\nexport { SymbolShapeHint as DataMatrixSymbolShapeHint } from './core/datamatrix/encoder/constants';\nexport { default as DataMatrixWriter } from './core/datamatrix/DataMatrixWriter';\n// core/pdf417\nexport { default as PDF417Reader } from './core/pdf417/PDF417Reader';\nexport { default as PDF417ResultMetadata } from './core/pdf417/PDF417ResultMetadata';\nexport { default as PDF417DecodedBitStreamParser } from './core/pdf417/decoder/DecodedBitStreamParser';\nexport { default as PDF417DecoderErrorCorrection } from './core/pdf417/decoder/ec/ErrorCorrection';\n// core/twod/qrcode\nexport { default as QRCodeReader } from './core/qrcode/QRCodeReader';\nexport { default as QRCodeWriter } from './core/qrcode/QRCodeWriter';\nexport { default as QRCodeDecoderErrorCorrectionLevel } from './core/qrcode/decoder/ErrorCorrectionLevel';\nexport { default as QRCodeDecoderFormatInformation } from './core/qrcode/decoder/FormatInformation';\nexport { default as QRCodeVersion } from './core/qrcode/decoder/Version';\nexport { default as QRCodeMode } from './core/qrcode/decoder/Mode';\nexport { default as QRCodeDecodedBitStreamParser } from './core/qrcode/decoder/DecodedBitStreamParser';\nexport { default as QRCodeDataMask } from './core/qrcode/decoder/DataMask';\nexport { default as QRCodeEncoder } from './core/qrcode/encoder/Encoder';\nexport { default as QRCodeEncoderQRCode } from './core/qrcode/encoder/QRCode';\nexport { default as QRCodeMatrixUtil } from './core/qrcode/encoder/MatrixUtil';\nexport { default as QRCodeByteMatrix } from './core/qrcode/encoder/ByteMatrix';\nexport { default as QRCodeMaskUtil } from './core/qrcode/encoder/MaskUtil';\n// core/twod/aztec\nexport { default as AztecCodeReader } from './core/aztec/AztecReader';\nexport { default as AztecCodeWriter } from './core/aztec/AztecWriter';\nexport { default as AztecDetectorResult } from './core/aztec/AztecDetectorResult';\nexport { default as AztecEncoder } from './core/aztec/encoder/Encoder';\nexport { default as AztecHighLevelEncoder } from './core/aztec/encoder/HighLevelEncoder';\nexport { default as AztecCode } from './core/aztec/encoder/AztecCode';\nexport { default as AztecDecoder } from './core/aztec/decoder/Decoder';\nexport { default as AztecDetector } from './core/aztec/detector/Detector';\nexport { Point as AztecPoint } from './core/aztec/detector/Detector';\n// core/oned\nexport { default as OneDReader } from './core/oned/OneDReader';\nexport { default as EAN13Reader } from './core/oned/EAN13Reader';\nexport { default as Code128Reader } from './core/oned/Code128Reader';\nexport { default as ITFReader } from './core/oned/ITFReader';\nexport { default as Code39Reader } from './core/oned/Code39Reader';\nexport { default as Code93Reader } from './core/oned/Code93Reader';\nexport { default as RSS14Reader } from './core/oned/rss/RSS14Reader';\nexport { default as RSSExpandedReader } from './core/oned/rss/expanded/RSSExpandedReader';\nexport { default as AbstractExpandedDecoder } from './core/oned/rss/expanded/decoders/AbstractExpandedDecoder';\nexport { createDecoder as createAbstractExpandedDecoder } from './core/oned/rss/expanded/decoders/AbstractExpandedDecoderComplement';\nexport { default as MultiFormatOneDReader } from './core/oned/MultiFormatOneDReader';\nexport { default as CodaBarReader } from './core/oned/CodaBarReader';\n", "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));", "!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));", "(function() {\n  if (window.Reflect === undefined || window.customElements === undefined || 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 = wrapperForTheName[\"HTMLElement\"];\n  HTMLElement.prototype = BuiltInHTMLElement.prototype;\n  HTMLElement.prototype.constructor = HTMLElement;\n  Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return;\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  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  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;\n\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}\n\nfunction clickCaptured(event) {\n  const submitter = findSubmitterFromClickTarget(event.target);\n  if (submitter && submitter.form) {\n    submittersByForm.set(submitter.form, submitter);\n  }\n}\n\n(function() {\n  if (\"submitter\" in Event.prototype) return;\n  let prototype = window.Event.prototype;\n  if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n    prototype = window.SubmitEvent.prototype;\n  } else if (\"SubmitEvent\" in window) {\n    return;\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\n(function(FrameLoadingStyle) {\n  FrameLoadingStyle[\"eager\"] = \"eager\";\n  FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\n\nclass FrameElement extends HTMLElement {\n  static get observedAttributes() {\n    return [ \"disabled\", \"complete\", \"loading\", \"src\" ];\n  }\n  constructor() {\n    super();\n    this.loaded = Promise.resolve();\n    this.delegate = new FrameElement.delegateConstructor(this);\n  }\n  connectedCallback() {\n    this.delegate.connect();\n  }\n  disconnectedCallback() {\n    this.delegate.disconnect();\n  }\n  reload() {\n    return this.delegate.sourceURLReloaded();\n  }\n  attributeChangedCallback(name) {\n    if (name == \"loading\") {\n      this.delegate.loadingStyleChanged();\n    } else if (name == \"complete\") {\n      this.delegate.completeChanged();\n    } else if (name == \"src\") {\n      this.delegate.sourceURLChanged();\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    } 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    } 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    } 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    } 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}\n\nfunction frameLoadingStyleFromString(style) {\n  switch (style.toLowerCase()) {\n   case \"lazy\":\n    return FrameLoadingStyle.lazy;\n\n   default:\n    return FrameLoadingStyle.eager;\n  }\n}\n\nfunction expandURL(locatable) {\n  return new URL(locatable.toString(), document.baseURI);\n}\n\nfunction getAnchor(url) {\n  let anchorMatch;\n  if (url.hash) {\n    return url.hash.slice(1);\n  } else if (anchorMatch = url.href.match(/#(.*)$/)) {\n    return anchorMatch[1];\n  }\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}\n\nfunction getExtension(url) {\n  return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\n\nfunction isHTML(url) {\n  return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\n\nfunction isPrefixedBy(baseURL, url) {\n  const prefix = getPrefix(url);\n  return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n  return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\n\nfunction getRequestURL(url) {\n  const anchor = getAnchor(url);\n  return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\n\nfunction toCacheKey(url) {\n  return getRequestURL(url);\n}\n\nfunction urlsAreEqual(left, right) {\n  return expandURL(left).href == expandURL(right).href;\n}\n\nfunction getPathComponents(url) {\n  return url.pathname.split(\"/\").slice(1);\n}\n\nfunction getLastPathComponent(url) {\n  return getPathComponents(url).slice(-1)[0];\n}\n\nfunction getPrefix(url) {\n  return addTrailingSlash(url.origin + url.pathname);\n}\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    } else {\n      return Promise.resolve(undefined);\n    }\n  }\n  header(name) {\n    return this.response.headers.get(name);\n  }\n}\n\nfunction activateScriptElement(element) {\n  if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n    return element;\n  } else {\n    const createdScriptElement = document.createElement(\"script\");\n    const cspNonce = getMetaContent(\"csp-nonce\");\n    if (cspNonce) {\n      createdScriptElement.nonce = cspNonce;\n    }\n    createdScriptElement.textContent = element.textContent;\n    createdScriptElement.async = false;\n    copyElementAttributes(createdScriptElement, element);\n    return createdScriptElement;\n  }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n  for (const {name: name, value: value} of sourceElement.attributes) {\n    destinationElement.setAttribute(name, value);\n  }\n}\n\nfunction createDocumentFragment(html) {\n  const template = document.createElement(\"template\");\n  template.innerHTML = html;\n  return template.content;\n}\n\nfunction dispatch(eventName, {target: target, cancelable: cancelable, detail: detail} = {}) {\n  const event = new CustomEvent(eventName, {\n    cancelable: cancelable,\n    bubbles: true,\n    composed: true,\n    detail: detail\n  });\n  if (target && target.isConnected) {\n    target.dispatchEvent(event);\n  } else {\n    document.documentElement.dispatchEvent(event);\n  }\n  return event;\n}\n\nfunction nextAnimationFrame() {\n  return new Promise((resolve => requestAnimationFrame((() => resolve()))));\n}\n\nfunction nextEventLoopTick() {\n  return new Promise((resolve => setTimeout((() => resolve()), 0)));\n}\n\nfunction nextMicrotask() {\n  return Promise.resolve();\n}\n\nfunction parseHTMLDocument(html = \"\") {\n  return (new DOMParser).parseFromString(html, \"text/html\");\n}\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}\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}\n\nfunction uuid() {\n  return Array.from({\n    length: 36\n  }).map(((_, i) => {\n    if (i == 8 || i == 13 || i == 18 || i == 23) {\n      return \"-\";\n    } else if (i == 14) {\n      return \"4\";\n    } else if (i == 19) {\n      return (Math.floor(Math.random() * 4) + 8).toString(16);\n    } else {\n      return Math.floor(Math.random() * 15).toString(16);\n    }\n  })).join(\"\");\n}\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\") return value;\n  }\n  return null;\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n  return elements.some((element => element && element.hasAttribute(attributeName)));\n}\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}\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\nfunction waitForLoad(element, timeoutInMilliseconds = 2e3) {\n  return new Promise((resolve => {\n    const onComplete = () => {\n      element.removeEventListener(\"error\", onComplete);\n      element.removeEventListener(\"load\", onComplete);\n      resolve();\n    };\n    element.addEventListener(\"load\", onComplete, {\n      once: true\n    });\n    element.addEventListener(\"error\", onComplete, {\n      once: true\n    });\n    setTimeout(resolve, timeoutInMilliseconds);\n  }));\n}\n\nfunction getHistoryMethodForAction(action) {\n  switch (action) {\n   case \"replace\":\n    return history.replaceState;\n\n   case \"advance\":\n   case \"restore\":\n    return history.pushState;\n  }\n}\n\nfunction isAction(action) {\n  return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\n\nfunction getVisitAction(...elements) {\n  const action = getAttribute(\"data-turbo-action\", ...elements);\n  return isAction(action) ? action : null;\n}\n\nfunction getMetaElement(name) {\n  return document.querySelector(`meta[name=\"${name}\"]`);\n}\n\nfunction getMetaContent(name) {\n  const element = getMetaElement(name);\n  return element && element.content;\n}\n\nfunction setMetaContent(name, content) {\n  let element = getMetaElement(name);\n  if (!element) {\n    element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", name);\n    document.head.appendChild(element);\n  }\n  element.setAttribute(\"content\", content);\n  return element;\n}\n\nfunction findClosestRecursively(element, selector) {\n  var _a;\n  if (element instanceof Element) {\n    return element.closest(selector) || findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector);\n  }\n}\n\nvar FetchMethod;\n\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 = {}));\n\nfunction fetchMethodFromString(method) {\n  switch (method.toLowerCase()) {\n   case \"get\":\n    return FetchMethod.get;\n\n   case \"post\":\n    return FetchMethod.post;\n\n   case \"put\":\n    return FetchMethod.put;\n\n   case \"patch\":\n    return FetchMethod.patch;\n\n   case \"delete\":\n    return FetchMethod.delete;\n  }\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    const {fetchOptions: fetchOptions} = this;\n    this.delegate.prepareRequest(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    } catch (error) {\n      if (error.name !== \"AbortError\") {\n        if (this.willDelegateErrorHandling(error)) {\n          this.delegate.requestErrored(this, error);\n        }\n        throw error;\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\", {\n      cancelable: true,\n      detail: {\n        fetchResponse: fetchResponse\n      },\n      target: this.target\n    });\n    if (event.defaultPrevented) {\n      this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n    } else if (fetchResponse.succeeded) {\n      this.delegate.requestSucceededWithResponse(this, fetchResponse);\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.isSafe ? 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 isSafe() {\n    return this.method === FetchMethod.get;\n  }\n  get abortSignal() {\n    return this.abortController.signal;\n  }\n  acceptResponseType(mimeType) {\n    this.headers[\"Accept\"] = [ mimeType, this.headers[\"Accept\"] ].join(\", \");\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: fetchOptions,\n        url: this.url,\n        resume: this.resolveRequestPromise\n      },\n      target: this.target\n    });\n    if (event.defaultPrevented) await requestInterception;\n  }\n  willDelegateErrorHandling(error) {\n    const event = dispatch(\"turbo:fetch-request-error\", {\n      target: this.target,\n      cancelable: true,\n      detail: {\n        request: this,\n        error: error\n      }\n    });\n    return !event.defaultPrevented;\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  static wrap(message) {\n    if (typeof message == \"string\") {\n      return new this(createDocumentFragment(message));\n    } else {\n      return message;\n    }\n  }\n  constructor(fragment) {\n    this.fragment = importStreamElements(fragment);\n  }\n}\n\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\n\nfunction importStreamElements(fragment) {\n  for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n    const streamElement = document.importNode(element, true);\n    for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n      inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n    }\n    element.replaceWith(streamElement);\n  }\n  return fragment;\n}\n\nvar FormSubmissionState;\n\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 = {}));\n\nvar FormEnctype;\n\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 = {}));\n\nfunction formEnctypeFromString(encoding) {\n  switch (encoding.toLowerCase()) {\n   case FormEnctype.multipart:\n    return FormEnctype.multipart;\n\n   case FormEnctype.plain:\n    return FormEnctype.plain;\n\n   default:\n    return FormEnctype.urlEncoded;\n  }\n}\n\nclass FormSubmission {\n  static confirmMethod(message, _element, _submitter) {\n    return Promise.resolve(confirm(message));\n  }\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  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    if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n      return this.submitter.getAttribute(\"formaction\") || \"\";\n    } else {\n      return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n    }\n  }\n  get body() {\n    if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n      return new URLSearchParams(this.stringFormData);\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 isSafe() {\n    return this.fetchRequest.isSafe;\n  }\n  get stringFormData() {\n    return [ ...this.formData ].reduce(((entries, [name, value]) => entries.concat(typeof value == \"string\" ? [ [ name, value ] ] : [])), []);\n  }\n  async start() {\n    const {initialized: initialized, requesting: requesting} = FormSubmissionState;\n    const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n    if (typeof confirmationMessage === \"string\") {\n      const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\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: stopping, stopped: stopped} = FormSubmissionState;\n    if (this.state != stopping && this.state != stopped) {\n      this.state = stopping;\n      this.fetchRequest.cancel();\n      return true;\n    }\n  }\n  prepareRequest(request) {\n    if (!request.isSafe) {\n      const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n      if (token) {\n        request.headers[\"X-CSRF-Token\"] = token;\n      }\n    }\n    if (this.requestAcceptsTurboStreamResponse(request)) {\n      request.acceptResponseType(StreamMessage.contentType);\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    this.setSubmitsWith();\n    dispatch(\"turbo:submit-start\", {\n      target: this.formElement,\n      detail: {\n        formSubmission: this\n      }\n    });\n    this.delegate.formSubmissionStarted(this);\n  }\n  requestPreventedHandlingResponse(request, response) {\n    this.result = {\n      success: response.succeeded,\n      fetchResponse: response\n    };\n  }\n  requestSucceededWithResponse(request, response) {\n    if (response.clientError || response.serverError) {\n      this.delegate.formSubmissionFailedWithResponse(this, response);\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    } else {\n      this.state = FormSubmissionState.receiving;\n      this.result = {\n        success: true,\n        fetchResponse: response\n      };\n      this.delegate.formSubmissionSucceededWithResponse(this, response);\n    }\n  }\n  requestFailedWithResponse(request, response) {\n    this.result = {\n      success: false,\n      fetchResponse: response\n    };\n    this.delegate.formSubmissionFailedWithResponse(this, response);\n  }\n  requestErrored(request, error) {\n    this.result = {\n      success: false,\n      error: error\n    };\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    this.resetSubmitterText();\n    dispatch(\"turbo:submit-end\", {\n      target: this.formElement,\n      detail: Object.assign({\n        formSubmission: this\n      }, this.result)\n    });\n    this.delegate.formSubmissionFinished(this);\n  }\n  setSubmitsWith() {\n    if (!this.submitter || !this.submitsWith) return;\n    if (this.submitter.matches(\"button\")) {\n      this.originalSubmitText = this.submitter.innerHTML;\n      this.submitter.innerHTML = this.submitsWith;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      this.originalSubmitText = input.value;\n      input.value = this.submitsWith;\n    }\n  }\n  resetSubmitterText() {\n    if (!this.submitter || !this.originalSubmitText) return;\n    if (this.submitter.matches(\"button\")) {\n      this.submitter.innerHTML = this.originalSubmitText;\n    } else if (this.submitter.matches(\"input\")) {\n      const input = this.submitter;\n      input.value = this.originalSubmitText;\n    }\n  }\n  requestMustRedirect(request) {\n    return !request.isSafe && this.mustRedirect;\n  }\n  requestAcceptsTurboStreamResponse(request) {\n    return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n  }\n  get submitsWith() {\n    var _a;\n    return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n  }\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) {\n    formData.append(name, value || \"\");\n  }\n  return formData;\n}\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}\n\nfunction responseSucceededWithoutRedirect(response) {\n  return response.statusCode == 200 && !response.redirected;\n}\n\nfunction mergeFormDataEntries(url, entries) {\n  const searchParams = new URLSearchParams;\n  for (const [name, value] of entries) {\n    if (value instanceof File) 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 activeElement() {\n    return this.element.ownerDocument.activeElement;\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    const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n    for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n      if (element.closest(inertDisabledOrHidden) == null) return element; else continue;\n    }\n    return null;\n  }\n  get permanentElements() {\n    return queryPermanentElementsAll(this.element);\n  }\n  getPermanentElementById(id) {\n    return getPermanentElementById(this.element, id);\n  }\n  getPermanentElementMapForSnapshot(snapshot) {\n    const permanentElementMap = {};\n    for (const currentPermanentElement of this.permanentElements) {\n      const {id: id} = currentPermanentElement;\n      const newPermanentElement = snapshot.getPermanentElementById(id);\n      if (newPermanentElement) {\n        permanentElementMap[id] = [ currentPermanentElement, newPermanentElement ];\n      }\n    }\n    return permanentElementMap;\n  }\n}\n\nfunction getPermanentElementById(node, id) {\n  return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\n\nfunction queryPermanentElementsAll(node) {\n  return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n  constructor(delegate, eventTarget) {\n    this.started = false;\n    this.submitCaptured = () => {\n      this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n      this.eventTarget.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 && submissionDoesNotDismissDialog(form, submitter) && submissionDoesNotTargetIFrame(form, submitter) && this.delegate.willSubmitForm(form, submitter)) {\n          event.preventDefault();\n          event.stopImmediatePropagation();\n          this.delegate.formSubmitted(form, submitter);\n        }\n      }\n    };\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n      this.started = true;\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n      this.started = false;\n    }\n  }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n  const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n  return method != \"dialog\";\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n  if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n    const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n    for (const element of document.getElementsByName(target)) {\n      if (element instanceof HTMLIFrameElement) return false;\n    }\n    return true;\n  } else {\n    return true;\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    } else {\n      this.scrollToPosition({\n        x: 0,\n        y: 0\n      });\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      } else {\n        element.setAttribute(\"tabindex\", \"-1\");\n        element.focus();\n        element.removeAttribute(\"tabindex\");\n      }\n    }\n  }\n  scrollToPosition({x: x, y: y}) {\n    this.scrollRoot.scrollTo(x, y);\n  }\n  scrollToTop() {\n    this.scrollToPosition({\n      x: 0,\n      y: 0\n    });\n  }\n  get scrollRoot() {\n    return window;\n  }\n  async render(renderer) {\n    const {isPreview: isPreview, shouldRender: shouldRender, newSnapshot: snapshot} = renderer;\n    if (shouldRender) {\n      try {\n        this.renderPromise = new Promise((resolve => this.resolveRenderPromise = resolve));\n        this.renderer = renderer;\n        await this.prepareToRenderSnapshot(renderer);\n        const renderInterception = new Promise((resolve => this.resolveInterceptionPromise = resolve));\n        const options = {\n          resume: this.resolveInterceptionPromise,\n          render: this.renderer.renderElement\n        };\n        const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n        if (!immediateRender) await renderInterception;\n        await this.renderSnapshot(renderer);\n        this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n        this.delegate.preloadOnLoadLinksForView(this.element);\n        this.finishRenderingSnapshot(renderer);\n      } finally {\n        delete this.renderer;\n        this.resolveRenderPromise(undefined);\n        delete this.renderPromise;\n      }\n    } else {\n      this.invalidate(renderer.reloadReason);\n    }\n  }\n  invalidate(reason) {\n    this.delegate.viewInvalidated(reason);\n  }\n  async prepareToRenderSnapshot(renderer) {\n    this.markAsPreview(renderer.isPreview);\n    await renderer.prepareToRender();\n  }\n  markAsPreview(isPreview) {\n    if (isPreview) {\n      this.element.setAttribute(\"data-turbo-preview\", \"\");\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  missing() {\n    this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\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      } 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, event.detail.originalEvent)) {\n          this.clickEvent.preventDefault();\n          event.preventDefault();\n          this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n        }\n      }\n      delete this.clickEvent;\n    };\n    this.willVisit = _event => {\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 ? target : target instanceof Node ? target.parentElement : null;\n    return element && element.closest(\"turbo-frame, html\") == this.element;\n  }\n}\n\nclass LinkClickObserver {\n  constructor(delegate, eventTarget) {\n    this.started = false;\n    this.clickCaptured = () => {\n      this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n      this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n    };\n    this.clickBubbled = event => {\n      if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n        const target = event.composedPath && event.composedPath()[0] || event.target;\n        const link = this.findLinkFromClickTarget(target);\n        if (link && doesNotTargetIFrame(link)) {\n          const location = this.getLocationForLink(link);\n          if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n            event.preventDefault();\n            this.delegate.followedLinkToLocation(link, location);\n          }\n        }\n      }\n    };\n    this.delegate = delegate;\n    this.eventTarget = eventTarget;\n  }\n  start() {\n    if (!this.started) {\n      this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n      this.started = true;\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n      this.started = false;\n    }\n  }\n  clickEventIsSignificant(event) {\n    return !(event.target && event.target.isContentEditable || event.defaultPrevented || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);\n  }\n  findLinkFromClickTarget(target) {\n    return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n  }\n  getLocationForLink(link) {\n    return expandURL(link.getAttribute(\"href\") || \"\");\n  }\n}\n\nfunction doesNotTargetIFrame(anchor) {\n  if (anchor.hasAttribute(\"target\")) {\n    for (const element of document.getElementsByName(anchor.target)) {\n      if (element instanceof HTMLIFrameElement) return false;\n    }\n    return true;\n  } else {\n    return true;\n  }\n}\n\nclass FormLinkClickObserver {\n  constructor(delegate, element) {\n    this.delegate = delegate;\n    this.linkInterceptor = new LinkClickObserver(this, element);\n  }\n  start() {\n    this.linkInterceptor.start();\n  }\n  stop() {\n    this.linkInterceptor.stop();\n  }\n  willFollowLinkToLocation(link, location, originalEvent) {\n    return this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) && link.hasAttribute(\"data-turbo-method\");\n  }\n  followedLinkToLocation(link, location) {\n    const form = document.createElement(\"form\");\n    const type = \"hidden\";\n    for (const [name, value] of location.searchParams) {\n      form.append(Object.assign(document.createElement(\"input\"), {\n        type: type,\n        name: name,\n        value: value\n      }));\n    }\n    const action = Object.assign(location, {\n      search: \"\"\n    });\n    form.setAttribute(\"data-turbo\", \"true\");\n    form.setAttribute(\"action\", action.href);\n    form.setAttribute(\"hidden\", \"\");\n    const method = link.getAttribute(\"data-turbo-method\");\n    if (method) form.setAttribute(\"method\", method);\n    const turboFrame = link.getAttribute(\"data-turbo-frame\");\n    if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n    const turboAction = getVisitAction(link);\n    if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n    const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n    if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n    const turboStream = link.hasAttribute(\"data-turbo-stream\");\n    if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n    this.delegate.submittedFormLinkToLocation(link, location, form);\n    document.body.appendChild(form);\n    form.addEventListener(\"turbo:submit-end\", (() => form.remove()), {\n      once: true\n    });\n    requestAnimationFrame((() => form.requestSubmit()));\n  }\n}\n\nclass Bardo {\n  static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n    const bardo = new this(delegate, permanentElementMap);\n    bardo.enter();\n    await callback();\n    bardo.leave();\n  }\n  constructor(delegate, permanentElementMap) {\n    this.delegate = delegate;\n    this.permanentElementMap = permanentElementMap;\n  }\n  enter() {\n    for (const id in this.permanentElementMap) {\n      const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n      this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\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      this.delegate.leavingBardo(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}\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, renderElement, isPreview, willRender = true) {\n    this.activeElement = null;\n    this.currentSnapshot = currentSnapshot;\n    this.newSnapshot = newSnapshot;\n    this.isPreview = isPreview;\n    this.willRender = willRender;\n    this.renderElement = renderElement;\n    this.promise = new Promise(((resolve, reject) => this.resolvingFunctions = {\n      resolve: resolve,\n      reject: reject\n    }));\n  }\n  get shouldRender() {\n    return true;\n  }\n  get reloadReason() {\n    return;\n  }\n  prepareToRender() {\n    return;\n  }\n  finishRendering() {\n    if (this.resolvingFunctions) {\n      this.resolvingFunctions.resolve();\n      delete this.resolvingFunctions;\n    }\n  }\n  async preservingPermanentElements(callback) {\n    await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n  }\n  focusFirstAutofocusableElement() {\n    const element = this.connectedSnapshot.firstAutofocusableElement;\n    if (elementIsFocusable(element)) {\n      element.focus();\n    }\n  }\n  enteringBardo(currentPermanentElement) {\n    if (this.activeElement) return;\n    if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n      this.activeElement = this.currentSnapshot.activeElement;\n    }\n  }\n  leavingBardo(currentPermanentElement) {\n    if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n      this.activeElement.focus();\n      this.activeElement = null;\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}\n\nfunction elementIsFocusable(element) {\n  return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n  static renderElement(currentElement, newElement) {\n    var _a;\n    const destinationRange = document.createRange();\n    destinationRange.selectNodeContents(currentElement);\n    destinationRange.deleteContents();\n    const frameElement = newElement;\n    const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n    if (sourceRange) {\n      sourceRange.selectNodeContents(frameElement);\n      currentElement.appendChild(sourceRange.extractContents());\n    }\n  }\n  constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n    super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n    this.delegate = delegate;\n  }\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    this.delegate.willRenderFrame(this.currentElement, this.newElement);\n    this.renderElement(this.currentElement, this.newElement);\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      const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n      if (element) {\n        element.scrollIntoView({\n          block: block,\n          behavior: behavior\n        });\n        return true;\n      }\n    }\n    return false;\n  }\n  activateScriptElements() {\n    for (const inertScriptElement of this.newScriptElements) {\n      const activatedScriptElement = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n  get newScriptElements() {\n    return this.currentElement.querySelectorAll(\"script\");\n  }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n  if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n    return value;\n  } else {\n    return defaultValue;\n  }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n  if (value == \"auto\" || value == \"smooth\") {\n    return value;\n  } else {\n    return defaultValue;\n  }\n}\n\nclass ProgressBar {\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: 2147483647;\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  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  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    if (this.cspNonce) {\n      element.nonce = this.cspNonce;\n    }\n    return element;\n  }\n  createProgressElement() {\n    const element = document.createElement(\"div\");\n    element.className = \"turbo-progress-bar\";\n    return element;\n  }\n  get cspNonce() {\n    return getMetaContent(\"csp-nonce\");\n  }\n}\n\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n  constructor() {\n    super(...arguments);\n    this.detailsByOuterHTML = this.children.filter((element => !elementIsNoscript(element))).map((element => elementWithoutNonce(element))).reduce(((result, element) => {\n      const {outerHTML: outerHTML} = element;\n      const details = outerHTML in result ? result[outerHTML] : {\n        type: elementType(element),\n        tracked: elementIsTracked(element),\n        elements: []\n      };\n      return Object.assign(Object.assign({}, result), {\n        [outerHTML]: Object.assign(Object.assign({}, details), {\n          elements: [ ...details.elements, element ]\n        })\n      });\n    }), {});\n  }\n  get trackedElementSignature() {\n    return Object.keys(this.detailsByOuterHTML).filter((outerHTML => this.detailsByOuterHTML[outerHTML].tracked)).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).filter((outerHTML => !(outerHTML in snapshot.detailsByOuterHTML))).map((outerHTML => this.detailsByOuterHTML[outerHTML])).filter((({type: type}) => type == matchedType)).map((({elements: [element]}) => element));\n  }\n  get provisionalElements() {\n    return Object.keys(this.detailsByOuterHTML).reduce(((result, outerHTML) => {\n      const {type: type, tracked: tracked, elements: elements} = this.detailsByOuterHTML[outerHTML];\n      if (type == null && !tracked) {\n        return [ ...result, ...elements ];\n      } else if (elements.length > 1) {\n        return [ ...result, ...elements.slice(1) ];\n      } else {\n        return result;\n      }\n    }), []);\n  }\n  getMetaValue(name) {\n    const element = this.findMetaElementByName(name);\n    return element ? element.getAttribute(\"content\") : 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}\n\nfunction elementType(element) {\n  if (elementIsScript(element)) {\n    return \"script\";\n  } else if (elementIsStylesheet(element)) {\n    return \"stylesheet\";\n  }\n}\n\nfunction elementIsTracked(element) {\n  return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\n\nfunction elementIsScript(element) {\n  const tagName = element.localName;\n  return tagName == \"script\";\n}\n\nfunction elementIsNoscript(element) {\n  const tagName = element.localName;\n  return tagName == \"noscript\";\n}\n\nfunction elementIsStylesheet(element) {\n  const tagName = element.localName;\n  return tagName == \"style\" || tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\";\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n  const tagName = element.localName;\n  return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\n\nfunction elementWithoutNonce(element) {\n  if (element.hasAttribute(\"nonce\")) {\n    element.setAttribute(\"nonce\", \"\");\n  }\n  return element;\n}\n\nclass PageSnapshot extends Snapshot {\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: head, body: body}) {\n    return new this(body, new HeadSnapshot(head));\n  }\n  constructor(element, headSnapshot) {\n    super(element);\n    this.headSnapshot = headSnapshot;\n  }\n  clone() {\n    const clonedElement = this.element.cloneNode(true);\n    const selectElements = this.element.querySelectorAll(\"select\");\n    const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n    for (const [index, source] of selectElements.entries()) {\n      const clone = clonedSelectElements[index];\n      for (const option of clone.selectedOptions) option.selected = false;\n      for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n    }\n    for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n      clonedPasswordInput.value = \"\";\n    }\n    return new PageSnapshot(clonedElement, 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\n(function(TimingMetric) {\n  TimingMetric[\"visitStart\"] = \"visitStart\";\n  TimingMetric[\"requestStart\"] = \"requestStart\";\n  TimingMetric[\"requestEnd\"] = \"requestEnd\";\n  TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\n\nvar VisitState;\n\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 = {}));\n\nconst defaultOptions = {\n  action: \"advance\",\n  historyChanged: false,\n  visitCachedSnapshot: () => {},\n  willRender: true,\n  updateHistory: true,\n  shouldCacheSnapshot: true,\n  acceptsStreamResponse: false\n};\n\nvar SystemStatusCode;\n\n(function(SystemStatusCode) {\n  SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n  SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n  SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\n\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.shouldCacheSnapshot = true;\n    this.acceptsStreamResponse = 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: action, historyChanged: historyChanged, referrer: referrer, snapshot: snapshot, snapshotHTML: snapshotHTML, response: response, visitCachedSnapshot: visitCachedSnapshot, willRender: willRender, updateHistory: updateHistory, shouldCacheSnapshot: shouldCacheSnapshot, acceptsStreamResponse: acceptsStreamResponse} = Object.assign(Object.assign({}, defaultOptions), options);\n    this.action = action;\n    this.historyChanged = historyChanged;\n    this.referrer = referrer;\n    this.snapshot = snapshot;\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.updateHistory = updateHistory;\n    this.scrolled = !willRender;\n    this.shouldCacheSnapshot = shouldCacheSnapshot;\n    this.acceptsStreamResponse = acceptsStreamResponse;\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.followRedirect();\n      if (!this.followedRedirect) {\n        this.adapter.visitCompleted(this);\n        this.delegate.visitCompleted(this);\n      }\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 && this.updateHistory) {\n      const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n      const method = 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    } 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: statusCode} = response;\n      if (isSuccessful(statusCode)) {\n        this.adapter.visitRequestCompleted(this);\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: statusCode, responseHTML: responseHTML} = this.response;\n      this.render((async () => {\n        if (this.shouldCacheSnapshot) this.cacheSnapshot();\n        if (this.view.renderPromise) await this.view.renderPromise;\n        if (isSuccessful(statusCode) && responseHTML != null) {\n          await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n          this.performScroll();\n          this.adapter.visitRendered(this);\n          this.complete();\n        } else {\n          await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\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        } else {\n          if (this.view.renderPromise) await this.view.renderPromise;\n          await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n          this.performScroll();\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        shouldCacheSnapshot: false,\n        willRender: false\n      });\n      this.followedRedirect = true;\n    }\n  }\n  goToSamePageAnchor() {\n    if (this.isSamePage) {\n      this.render((async () => {\n        this.cacheSnapshot();\n        this.performScroll();\n        this.changeHistory();\n        this.adapter.visitRendered(this);\n      }));\n    }\n  }\n  prepareRequest(request) {\n    if (this.acceptsStreamResponse) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\n  }\n  requestStarted() {\n    this.startRequest();\n  }\n  requestPreventedHandlingResponse(_request, _response) {}\n  async requestSucceededWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const {redirected: redirected, statusCode: statusCode} = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected: redirected\n      });\n    } else {\n      this.redirectedToLocation = response.redirected ? response.location : undefined;\n      this.recordResponse({\n        statusCode: statusCode,\n        responseHTML: responseHTML,\n        redirected: redirected\n      });\n    }\n  }\n  async requestFailedWithResponse(request, response) {\n    const responseHTML = await response.responseHTML;\n    const {redirected: redirected, statusCode: statusCode} = response;\n    if (responseHTML == undefined) {\n      this.recordResponse({\n        statusCode: SystemStatusCode.contentTypeMismatch,\n        redirected: redirected\n      });\n    } else {\n      this.recordResponse({\n        statusCode: statusCode,\n        responseHTML: responseHTML,\n        redirected: redirected\n      });\n    }\n  }\n  requestErrored(_request, _error) {\n    this.recordResponse({\n      statusCode: SystemStatusCode.networkFailure,\n      redirected: false\n    });\n  }\n  requestFinished() {\n    this.finishRequest();\n  }\n  performScroll() {\n    if (!this.scrolled && !this.view.forceReloaded) {\n      if (this.action == \"restore\") {\n        this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\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: 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\":\n      return history.replaceState;\n\n     case \"advance\":\n     case \"restore\":\n      return history.pushState;\n    }\n  }\n  hasPreloadedResponse() {\n    return typeof this.response == \"object\";\n  }\n  shouldIssueRequest() {\n    if (this.isSamePage) {\n      return false;\n    } else if (this.action == \"restore\") {\n      return !this.hasCachedSnapshot();\n    } else {\n      return this.willRender;\n    }\n  }\n  cacheSnapshot() {\n    if (!this.snapshotCached) {\n      this.view.cacheSnapshot(this.snapshot).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  }\n  cancelRender() {\n    if (this.frame) {\n      cancelAnimationFrame(this.frame);\n      delete this.frame;\n    }\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, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n  }\n  visitStarted(visit) {\n    this.location = visit.location;\n    visit.loadCachedSnapshot();\n    visit.issueRequest();\n    visit.goToSamePageAnchor();\n  }\n  visitRequestStarted(visit) {\n    this.progressBar.setValue(0);\n    if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n      this.showVisitProgressBarAfterDelay();\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        reason: \"request_failed\",\n        context: {\n          statusCode: statusCode\n        }\n      });\n\n     default:\n      return visit.loadResponse();\n    }\n  }\n  visitRequestFinished(_visit) {\n    this.progressBar.setValue(1);\n    this.hideVisitProgressBar();\n  }\n  visitCompleted(_visit) {}\n  pageInvalidated(reason) {\n    this.reload(reason);\n  }\n  visitFailed(_visit) {}\n  visitRendered(_visit) {}\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(reason) {\n    var _a;\n    dispatch(\"turbo:reload\", {\n      detail: reason\n    });\n    window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n  }\n  get navigator() {\n    return this.session.navigator;\n  }\n}\n\nclass CacheObserver {\n  constructor() {\n    this.selector = \"[data-turbo-temporary]\";\n    this.deprecatedSelector = \"[data-turbo-cache=false]\";\n    this.started = false;\n    this.removeTemporaryElements = _event => {\n      for (const element of this.temporaryElements) {\n        element.remove();\n      }\n    };\n  }\n  start() {\n    if (!this.started) {\n      this.started = true;\n      addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n  stop() {\n    if (this.started) {\n      this.started = false;\n      removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n    }\n  }\n  get temporaryElements() {\n    return [ ...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation ];\n  }\n  get temporaryElementsWithDeprecation() {\n    const elements = document.querySelectorAll(this.deprecatedSelector);\n    if (elements.length) {\n      console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n    }\n    return [ ...elements ];\n  }\n}\n\nclass FrameRedirector {\n  constructor(session, element) {\n    this.session = session;\n    this.element = element;\n    this.linkInterceptor = new LinkInterceptor(this, element);\n    this.formSubmitObserver = new FormSubmitObserver(this, element);\n  }\n  start() {\n    this.linkInterceptor.start();\n    this.formSubmitObserver.start();\n  }\n  stop() {\n    this.linkInterceptor.stop();\n    this.formSubmitObserver.stop();\n  }\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.shouldRedirect(element);\n  }\n  linkClickIntercepted(element, url, event) {\n    const frame = this.findFrameElement(element);\n    if (frame) {\n      frame.delegate.linkClickIntercepted(element, url, event);\n    }\n  }\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == null && this.shouldSubmit(element, submitter) && this.shouldRedirect(element, submitter);\n  }\n  formSubmitted(element, submitter) {\n    const frame = this.findFrameElement(element, submitter);\n    if (frame) {\n      frame.delegate.formSubmitted(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 isNavigatable = element instanceof HTMLFormElement ? this.session.submissionIsNavigatable(element, submitter) : this.session.elementIsNavigatable(element);\n    if (isNavigatable) {\n      const frame = this.findFrameElement(element, submitter);\n      return frame ? frame != element.closest(\"turbo-frame\") : false;\n    } else {\n      return false;\n    }\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: turbo} = event.state || {};\n        if (turbo) {\n          this.location = new URL(window.location.href);\n          const {restorationIdentifier: 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 = {\n      turbo: {\n        restorationIdentifier: restorationIdentifier\n      }\n    };\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: 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 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      } 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({\n      referrer: this.location\n    }, 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        const shouldCacheSnapshot = formSubmission.isSafe;\n        if (!shouldCacheSnapshot) {\n          this.view.clearSnapshotCache();\n        }\n        const {statusCode: statusCode, redirected: redirected} = fetchResponse;\n        const action = this.getActionForFormSubmission(formSubmission);\n        const visitOptions = {\n          action: action,\n          shouldCacheSnapshot: shouldCacheSnapshot,\n          response: {\n            statusCode: statusCode,\n            responseHTML: responseHTML,\n            redirected: redirected\n          }\n        };\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, this.currentVisit);\n      } else {\n        await this.view.renderPage(snapshot, false, true, this.currentVisit);\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\" && getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) && (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({submitter: submitter, formElement: formElement}) {\n    return getVisitAction(submitter, formElement) || \"advance\";\n  }\n}\n\nvar PageStage;\n\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 = {}));\n\nclass PageObserver {\n  constructor(delegate) {\n    this.stage = PageStage.initial;\n    this.started = false;\n    this.interpretReadyState = () => {\n      const {readyState: readyState} = this;\n      if (readyState == \"interactive\") {\n        this.pageIsInteractive();\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({\n        x: window.pageXOffset,\n        y: window.pageYOffset\n      });\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 StreamMessageRenderer {\n  render({fragment: fragment}) {\n    Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), (() => document.documentElement.appendChild(fragment)));\n  }\n  enteringBardo(currentPermanentElement, newPermanentElement) {\n    newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n  }\n  leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n  const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n  const permanentElementMap = {};\n  for (const permanentElementInDocument of permanentElementsInDocument) {\n    const {id: id} = permanentElementInDocument;\n    for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n      const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n      if (elementInStream) {\n        permanentElementMap[id] = [ permanentElementInDocument, elementInStream ];\n      }\n    }\n  }\n  return permanentElementMap;\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(StreamMessage.wrap(html));\n  }\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}\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  static renderElement(currentElement, newElement) {\n    const {documentElement: documentElement, body: body} = document;\n    documentElement.replaceChild(newElement, body);\n  }\n  async render() {\n    this.replaceHeadAndBody();\n    this.activateScriptElements();\n  }\n  replaceHeadAndBody() {\n    const {documentElement: documentElement, head: head} = document;\n    documentElement.replaceChild(this.newHead, head);\n    this.renderElement(this.currentElement, this.newElement);\n  }\n  activateScriptElements() {\n    for (const replaceableElement of this.scriptElements) {\n      const parentNode = replaceableElement.parentNode;\n      if (parentNode) {\n        const element = activateScriptElement(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  static renderElement(currentElement, newElement) {\n    if (document.body && newElement instanceof HTMLBodyElement) {\n      document.body.replaceWith(newElement);\n    } else {\n      document.documentElement.appendChild(newElement);\n    }\n  }\n  get shouldRender() {\n    return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n  }\n  get reloadReason() {\n    if (!this.newSnapshot.isVisitable) {\n      return {\n        reason: \"turbo_visit_control_is_reload\"\n      };\n    }\n    if (!this.trackedElementsAreIdentical) {\n      return {\n        reason: \"tracked_element_mismatch\"\n      };\n    }\n  }\n  async prepareToRender() {\n    await this.mergeHead();\n  }\n  async render() {\n    if (this.willRender) {\n      await 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  async mergeHead() {\n    const mergedHeadElements = this.mergeProvisionalElements();\n    const newStylesheetElements = this.copyNewHeadStylesheetElements();\n    this.copyNewHeadScriptElements();\n    await mergedHeadElements;\n    await newStylesheetElements;\n  }\n  async replaceBody() {\n    await this.preservingPermanentElements((async () => {\n      this.activateNewBody();\n      await this.assignNewBody();\n    }));\n  }\n  get trackedElementsAreIdentical() {\n    return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n  }\n  async copyNewHeadStylesheetElements() {\n    const loadingElements = [];\n    for (const element of this.newHeadStylesheetElements) {\n      loadingElements.push(waitForLoad(element));\n      document.head.appendChild(element);\n    }\n    await Promise.all(loadingElements);\n  }\n  copyNewHeadScriptElements() {\n    for (const element of this.newHeadScriptElements) {\n      document.head.appendChild(activateScriptElement(element));\n    }\n  }\n  async mergeProvisionalElements() {\n    const newHeadElements = [ ...this.newHeadProvisionalElements ];\n    for (const element of this.currentHeadProvisionalElements) {\n      if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n        document.head.removeChild(element);\n      }\n    }\n    for (const element of newHeadElements) {\n      document.head.appendChild(element);\n    }\n  }\n  isCurrentElementInElementList(element, elementList) {\n    for (const [index, newElement] of elementList.entries()) {\n      if (element.tagName == \"TITLE\") {\n        if (newElement.tagName != \"TITLE\") {\n          continue;\n        }\n        if (element.innerHTML == newElement.innerHTML) {\n          elementList.splice(index, 1);\n          return true;\n        }\n      }\n      if (newElement.isEqualNode(element)) {\n        elementList.splice(index, 1);\n        return true;\n      }\n    }\n    return false;\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 = activateScriptElement(inertScriptElement);\n      inertScriptElement.replaceWith(activatedScriptElement);\n    }\n  }\n  async assignNewBody() {\n    await this.renderElement(this.currentElement, this.newElement);\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) 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    this.forceReloaded = false;\n  }\n  renderPage(snapshot, isPreview = false, willRender = true, visit) {\n    const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n    if (!renderer.shouldRender) {\n      this.forceReloaded = true;\n    } else {\n      visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n    }\n    return this.render(renderer);\n  }\n  renderError(snapshot, visit) {\n    visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n    const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n    return this.render(renderer);\n  }\n  clearSnapshotCache() {\n    this.snapshotCache.clear();\n  }\n  async cacheSnapshot(snapshot = this.snapshot) {\n    if (snapshot.isCacheable) {\n      this.delegate.viewWillCacheSnapshot();\n      const {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}\n\nclass Preloader {\n  constructor(delegate) {\n    this.selector = \"a[data-turbo-preload]\";\n    this.delegate = delegate;\n  }\n  get snapshotCache() {\n    return this.delegate.navigator.view.snapshotCache;\n  }\n  start() {\n    if (document.readyState === \"loading\") {\n      return document.addEventListener(\"DOMContentLoaded\", (() => {\n        this.preloadOnLoadLinksForView(document.body);\n      }));\n    } else {\n      this.preloadOnLoadLinksForView(document.body);\n    }\n  }\n  preloadOnLoadLinksForView(element) {\n    for (const link of element.querySelectorAll(this.selector)) {\n      this.preloadURL(link);\n    }\n  }\n  async preloadURL(link) {\n    const location = new URL(link.href);\n    if (this.snapshotCache.has(location)) {\n      return;\n    }\n    try {\n      const response = await fetch(location.toString(), {\n        headers: {\n          \"VND.PREFETCH\": \"true\",\n          Accept: \"text/html\"\n        }\n      });\n      const responseText = await response.text();\n      const snapshot = PageSnapshot.fromHTMLString(responseText);\n      this.snapshotCache.put(location, snapshot);\n    } catch (_) {}\n  }\n}\n\nclass Session {\n  constructor() {\n    this.navigator = new Navigator(this);\n    this.history = new History(this);\n    this.preloader = new Preloader(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, window);\n    this.formSubmitObserver = new FormSubmitObserver(this, document);\n    this.scrollObserver = new ScrollObserver(this);\n    this.streamObserver = new StreamObserver(this);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n    this.frameRedirector = new FrameRedirector(this, document.documentElement);\n    this.streamMessageRenderer = new StreamMessageRenderer;\n    this.drive = true;\n    this.enabled = true;\n    this.progressBarDelay = 500;\n    this.started = false;\n    this.formMode = \"on\";\n  }\n  start() {\n    if (!this.started) {\n      this.pageObserver.start();\n      this.cacheObserver.start();\n      this.formLinkClickObserver.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.preloader.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.formLinkClickObserver.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    const frameElement = options.frame ? document.getElementById(options.frame) : null;\n    if (frameElement instanceof FrameElement) {\n      frameElement.src = location.toString();\n      frameElement.loaded;\n    } else {\n      this.navigator.proposeVisit(expandURL(location), options);\n    }\n  }\n  connectStreamSource(source) {\n    this.streamObserver.connectStreamSource(source);\n  }\n  disconnectStreamSource(source) {\n    this.streamObserver.disconnectStreamSource(source);\n  }\n  renderStreamMessage(message) {\n    this.streamMessageRenderer.render(StreamMessage.wrap(message));\n  }\n  clearCache() {\n    this.view.clearSnapshotCache();\n  }\n  setProgressBarDelay(delay) {\n    this.progressBarDelay = delay;\n  }\n  setFormMode(mode) {\n    this.formMode = mode;\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, {\n        action: \"restore\",\n        historyChanged: true\n      });\n    } else {\n      this.adapter.pageInvalidated({\n        reason: \"turbo_disabled\"\n      });\n    }\n  }\n  scrollPositionChanged(position) {\n    this.history.updateRestorationData({\n      scrollPosition: position\n    });\n  }\n  willSubmitFormLinkToLocation(link, location) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n  }\n  submittedFormLinkToLocation() {}\n  willFollowLinkToLocation(link, location, event) {\n    return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation) && this.applicationAllowsFollowingLinkToLocation(link, location, event);\n  }\n  followedLinkToLocation(link, location) {\n    const action = this.getActionForLink(link);\n    const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n    this.visit(location.href, {\n      action: action,\n      acceptsStreamResponse: acceptsStreamResponse\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    if (!visit.acceptsStreamResponse) {\n      markAsBusy(document.documentElement);\n    }\n    extendURLWithDeprecatedProperties(visit.location);\n    if (!visit.silent) {\n      this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n    }\n  }\n  visitCompleted(visit) {\n    clearBusyState(document.documentElement);\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.submissionIsNavigatable(form, submitter) && 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: element}, options) {\n    const event = this.notifyApplicationBeforeRender(element, options);\n    const {defaultPrevented: defaultPrevented, detail: {render: render}} = event;\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n    return !defaultPrevented;\n  }\n  viewRenderedSnapshot(_snapshot, _isPreview) {\n    this.view.lastRenderedLocation = this.history.location;\n    this.notifyApplicationAfterRender();\n  }\n  preloadOnLoadLinksForView(element) {\n    this.preloader.preloadOnLoadLinksForView(element);\n  }\n  viewInvalidated(reason) {\n    this.adapter.pageInvalidated(reason);\n  }\n  frameLoaded(frame) {\n    this.notifyApplicationAfterFrameLoad(frame);\n  }\n  frameRendered(fetchResponse, frame) {\n    this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n  }\n  applicationAllowsFollowingLinkToLocation(link, location, ev) {\n    const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n    return !event.defaultPrevented;\n  }\n  applicationAllowsVisitingLocation(location) {\n    const event = this.notifyApplicationBeforeVisitingLocation(location);\n    return !event.defaultPrevented;\n  }\n  notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n    return dispatch(\"turbo:click\", {\n      target: link,\n      detail: {\n        url: location.href,\n        originalEvent: event\n      },\n      cancelable: true\n    });\n  }\n  notifyApplicationBeforeVisitingLocation(location) {\n    return dispatch(\"turbo:before-visit\", {\n      detail: {\n        url: location.href\n      },\n      cancelable: true\n    });\n  }\n  notifyApplicationAfterVisitingLocation(location, action) {\n    return dispatch(\"turbo:visit\", {\n      detail: {\n        url: location.href,\n        action: action\n      }\n    });\n  }\n  notifyApplicationBeforeCachingSnapshot() {\n    return dispatch(\"turbo:before-cache\");\n  }\n  notifyApplicationBeforeRender(newBody, options) {\n    return dispatch(\"turbo:before-render\", {\n      detail: Object.assign({\n        newBody: newBody\n      }, options),\n      cancelable: true\n    });\n  }\n  notifyApplicationAfterRender() {\n    return dispatch(\"turbo:render\");\n  }\n  notifyApplicationAfterPageLoad(timing = {}) {\n    return dispatch(\"turbo:load\", {\n      detail: {\n        url: this.location.href,\n        timing: timing\n      }\n    });\n  }\n  notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n    dispatchEvent(new HashChangeEvent(\"hashchange\", {\n      oldURL: oldURL.toString(),\n      newURL: newURL.toString()\n    }));\n  }\n  notifyApplicationAfterFrameLoad(frame) {\n    return dispatch(\"turbo:frame-load\", {\n      target: frame\n    });\n  }\n  notifyApplicationAfterFrameRender(fetchResponse, frame) {\n    return dispatch(\"turbo:frame-render\", {\n      detail: {\n        fetchResponse: fetchResponse\n      },\n      target: frame,\n      cancelable: true\n    });\n  }\n  submissionIsNavigatable(form, submitter) {\n    if (this.formMode == \"off\") {\n      return false;\n    } else {\n      const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n      if (this.formMode == \"optin\") {\n        return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n      } else {\n        return submitterIsNavigatable && this.elementIsNavigatable(form);\n      }\n    }\n  }\n  elementIsNavigatable(element) {\n    const container = findClosestRecursively(element, \"[data-turbo]\");\n    const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n    if (this.drive || withinFrame) {\n      if (container) {\n        return container.getAttribute(\"data-turbo\") != \"false\";\n      } else {\n        return true;\n      }\n    } else {\n      if (container) {\n        return container.getAttribute(\"data-turbo\") == \"true\";\n      } else {\n        return false;\n      }\n    }\n  }\n  getActionForLink(link) {\n    return getVisitAction(link) || \"advance\";\n  }\n  get snapshot() {\n    return this.view.snapshot;\n  }\n}\n\nfunction extendURLWithDeprecatedProperties(url) {\n  Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n  absoluteURL: {\n    get() {\n      return this.toString();\n    }\n  }\n};\n\nclass Cache {\n  constructor(session) {\n    this.session = session;\n  }\n  clear() {\n    this.session.clearCache();\n  }\n  resetCacheControl() {\n    this.setCacheControl(\"\");\n  }\n  exemptPageFromCache() {\n    this.setCacheControl(\"no-cache\");\n  }\n  exemptPageFromPreview() {\n    this.setCacheControl(\"no-preview\");\n  }\n  setCacheControl(value) {\n    setMetaContent(\"turbo-cache-control\", value);\n  }\n}\n\nconst StreamActions = {\n  after() {\n    this.targetElements.forEach((e => {\n      var _a;\n      return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling);\n    }));\n  },\n  append() {\n    this.removeDuplicateTargetChildren();\n    this.targetElements.forEach((e => e.append(this.templateContent)));\n  },\n  before() {\n    this.targetElements.forEach((e => {\n      var _a;\n      return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e);\n    }));\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((targetElement => {\n      targetElement.innerHTML = \"\";\n      targetElement.append(this.templateContent);\n    }));\n  }\n};\n\nconst session = new Session;\n\nconst cache = new Cache(session);\n\nconst {navigator: navigator$1} = session;\n\nfunction start() {\n  session.start();\n}\n\nfunction registerAdapter(adapter) {\n  session.registerAdapter(adapter);\n}\n\nfunction visit(location, options) {\n  session.visit(location, options);\n}\n\nfunction connectStreamSource(source) {\n  session.connectStreamSource(source);\n}\n\nfunction disconnectStreamSource(source) {\n  session.disconnectStreamSource(source);\n}\n\nfunction renderStreamMessage(message) {\n  session.renderStreamMessage(message);\n}\n\nfunction clearCache() {\n  console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n  session.clearCache();\n}\n\nfunction setProgressBarDelay(delay) {\n  session.setProgressBarDelay(delay);\n}\n\nfunction setConfirmMethod(confirmMethod) {\n  FormSubmission.confirmMethod = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n  session.setFormMode(mode);\n}\n\nvar Turbo = Object.freeze({\n  __proto__: null,\n  navigator: navigator$1,\n  session: session,\n  cache: cache,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  FrameRenderer: FrameRenderer,\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  setFormMode: setFormMode,\n  StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {}\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.ignoredAttributes = new Set;\n    this.action = null;\n    this.visitCachedSnapshot = ({element: element}) => {\n      const frame = element.querySelector(\"#\" + this.element.id);\n      if (frame && this.previousFrameElement) {\n        frame.replaceChildren(...this.previousFrameElement.children);\n      }\n      delete this.previousFrameElement;\n    };\n    this.element = element;\n    this.view = new FrameView(this, this.element);\n    this.appearanceObserver = new AppearanceObserver(this, this.element);\n    this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n    this.linkInterceptor = new LinkInterceptor(this, this.element);\n    this.restorationIdentifier = uuid();\n    this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n  }\n  connect() {\n    if (!this.connected) {\n      this.connected = true;\n      if (this.loadingStyle == FrameLoadingStyle.lazy) {\n        this.appearanceObserver.start();\n      } else {\n        this.loadSourceURL();\n      }\n      this.formLinkClickObserver.start();\n      this.linkInterceptor.start();\n      this.formSubmitObserver.start();\n    }\n  }\n  disconnect() {\n    if (this.connected) {\n      this.connected = false;\n      this.appearanceObserver.stop();\n      this.formLinkClickObserver.stop();\n      this.linkInterceptor.stop();\n      this.formSubmitObserver.stop();\n    }\n  }\n  disabledChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.eager) {\n      this.loadSourceURL();\n    }\n  }\n  sourceURLChanged() {\n    if (this.isIgnoringChangesTo(\"src\")) return;\n    if (this.element.isConnected) {\n      this.complete = false;\n    }\n    if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n      this.loadSourceURL();\n    }\n  }\n  sourceURLReloaded() {\n    const {src: src} = this.element;\n    this.ignoringChangesToAttribute(\"complete\", (() => {\n      this.element.removeAttribute(\"complete\");\n    }));\n    this.element.src = null;\n    this.element.src = src;\n    return this.element.loaded;\n  }\n  completeChanged() {\n    if (this.isIgnoringChangesTo(\"complete\")) return;\n    this.loadSourceURL();\n  }\n  loadingStyleChanged() {\n    if (this.loadingStyle == FrameLoadingStyle.lazy) {\n      this.appearanceObserver.start();\n    } else {\n      this.appearanceObserver.stop();\n      this.loadSourceURL();\n    }\n  }\n  async loadSourceURL() {\n    if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n      this.element.loaded = this.visit(expandURL(this.sourceURL));\n      this.appearanceObserver.stop();\n      await this.element.loaded;\n      this.hasBeenLoaded = true;\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 document = parseHTMLDocument(html);\n        const pageSnapshot = PageSnapshot.fromDocument(document);\n        if (pageSnapshot.isVisitable) {\n          await this.loadFrameResponse(fetchResponse, document);\n        } else {\n          await this.handleUnvisitableFrameResponse(fetchResponse);\n        }\n      }\n    } finally {\n      this.fetchResponseLoaded = () => {};\n    }\n  }\n  elementAppearedInViewport(element) {\n    this.proposeVisitIfNavigatedWithAction(element, element);\n    this.loadSourceURL();\n  }\n  willSubmitFormLinkToLocation(link) {\n    return this.shouldInterceptNavigation(link);\n  }\n  submittedFormLinkToLocation(link, _location, form) {\n    const frame = this.findFrameElement(link);\n    if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n  }\n  shouldInterceptLinkClick(element, _location, _event) {\n    return this.shouldInterceptNavigation(element);\n  }\n  linkClickIntercepted(element, location) {\n    this.navigateFrame(element, location);\n  }\n  willSubmitForm(element, submitter) {\n    return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n  }\n  formSubmitted(element, submitter) {\n    if (this.formSubmission) {\n      this.formSubmission.stop();\n    }\n    this.formSubmission = new FormSubmission(this, element, submitter);\n    const {fetchRequest: fetchRequest} = this.formSubmission;\n    this.prepareRequest(fetchRequest);\n    this.formSubmission.start();\n  }\n  prepareRequest(request) {\n    var _a;\n    request.headers[\"Turbo-Frame\"] = this.id;\n    if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n      request.acceptResponseType(StreamMessage.contentType);\n    }\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  async requestFailedWithResponse(request, response) {\n    await this.loadResponse(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: formElement}) {\n    markAsBusy(formElement, this.findFrameElement(formElement));\n  }\n  formSubmissionSucceededWithResponse(formSubmission, response) {\n    const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n    frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n    frame.delegate.loadResponse(response);\n    if (!formSubmission.isSafe) {\n      session.clearCache();\n    }\n  }\n  formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n    this.element.delegate.loadResponse(fetchResponse);\n    session.clearCache();\n  }\n  formSubmissionErrored(formSubmission, error) {\n    console.error(error);\n  }\n  formSubmissionFinished({formElement: formElement}) {\n    clearBusyState(formElement, this.findFrameElement(formElement));\n  }\n  allowsImmediateRender({element: newFrame}, options) {\n    const event = dispatch(\"turbo:before-frame-render\", {\n      target: this.element,\n      detail: Object.assign({\n        newFrame: newFrame\n      }, options),\n      cancelable: true\n    });\n    const {defaultPrevented: defaultPrevented, detail: {render: render}} = event;\n    if (this.view.renderer && render) {\n      this.view.renderer.renderElement = render;\n    }\n    return !defaultPrevented;\n  }\n  viewRenderedSnapshot(_snapshot, _isPreview) {}\n  preloadOnLoadLinksForView(element) {\n    session.preloadOnLoadLinksForView(element);\n  }\n  viewInvalidated() {}\n  willRenderFrame(currentElement, _newElement) {\n    this.previousFrameElement = currentElement.cloneNode(true);\n  }\n  async loadFrameResponse(fetchResponse, document) {\n    const newFrameElement = await this.extractForeignFrameElement(document.body);\n    if (newFrameElement) {\n      const snapshot = new Snapshot(newFrameElement);\n      const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n      if (this.view.renderPromise) await this.view.renderPromise;\n      this.changeHistory();\n      await this.view.render(renderer);\n      this.complete = true;\n      session.frameRendered(fetchResponse, this.element);\n      session.frameLoaded(this.element);\n      this.fetchResponseLoaded(fetchResponse);\n    } else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n      this.handleFrameMissingFromResponse(fetchResponse);\n    }\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    frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n    this.withCurrentNavigationElement(element, (() => {\n      frame.src = url;\n    }));\n  }\n  proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n    this.action = getVisitAction(submitter, element, frame);\n    if (this.action) {\n      const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n      const {visitCachedSnapshot: visitCachedSnapshot} = frame.delegate;\n      frame.delegate.fetchResponseLoaded = fetchResponse => {\n        if (frame.src) {\n          const {statusCode: statusCode, redirected: redirected} = fetchResponse;\n          const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n          const response = {\n            statusCode: statusCode,\n            redirected: redirected,\n            responseHTML: responseHTML\n          };\n          const options = {\n            response: response,\n            visitCachedSnapshot: visitCachedSnapshot,\n            willRender: false,\n            updateHistory: false,\n            restorationIdentifier: this.restorationIdentifier,\n            snapshot: pageSnapshot\n          };\n          if (this.action) options.action = this.action;\n          session.visit(frame.src, options);\n        }\n      };\n    }\n  }\n  changeHistory() {\n    if (this.action) {\n      const method = getHistoryMethodForAction(this.action);\n      session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n    }\n  }\n  async handleUnvisitableFrameResponse(fetchResponse) {\n    console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n    await this.visitResponse(fetchResponse.response);\n  }\n  willHandleFrameMissingFromResponse(fetchResponse) {\n    this.element.setAttribute(\"complete\", \"\");\n    const response = fetchResponse.response;\n    const visit = async (url, options = {}) => {\n      if (url instanceof Response) {\n        this.visitResponse(url);\n      } else {\n        session.visit(url, options);\n      }\n    };\n    const event = dispatch(\"turbo:frame-missing\", {\n      target: this.element,\n      detail: {\n        response: response,\n        visit: visit\n      },\n      cancelable: true\n    });\n    return !event.defaultPrevented;\n  }\n  handleFrameMissingFromResponse(fetchResponse) {\n    this.view.missing();\n    this.throwFrameMissingError(fetchResponse);\n  }\n  throwFrameMissingError(fetchResponse) {\n    const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n    throw new TurboFrameMissingError(message);\n  }\n  async visitResponse(response) {\n    const wrapped = new FetchResponse(response);\n    const responseHTML = await wrapped.responseHTML;\n    const {location: location, redirected: redirected, statusCode: statusCode} = wrapped;\n    return session.visit(location, {\n      response: {\n        redirected: redirected,\n        statusCode: statusCode,\n        responseHTML: responseHTML\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      element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n      if (element) {\n        return element;\n      }\n      element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n      if (element) {\n        await element.loaded;\n        return await this.extractForeignFrameElement(element);\n      }\n    } catch (error) {\n      console.error(error);\n      return new FrameElement;\n    }\n    return null;\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.elementIsNavigatable(element)) {\n      return false;\n    }\n    if (submitter && !session.elementIsNavigatable(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  set sourceURL(sourceURL) {\n    this.ignoringChangesToAttribute(\"src\", (() => {\n      this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n    }));\n  }\n  get loadingStyle() {\n    return this.element.loading;\n  }\n  get isLoading() {\n    return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n  }\n  get complete() {\n    return this.element.hasAttribute(\"complete\");\n  }\n  set complete(value) {\n    this.ignoringChangesToAttribute(\"complete\", (() => {\n      if (value) {\n        this.element.setAttribute(\"complete\", \"\");\n      } else {\n        this.element.removeAttribute(\"complete\");\n      }\n    }));\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  isIgnoringChangesTo(attributeName) {\n    return this.ignoredAttributes.has(attributeName);\n  }\n  ignoringChangesToAttribute(attributeName, callback) {\n    this.ignoredAttributes.add(attributeName);\n    callback();\n    this.ignoredAttributes.delete(attributeName);\n  }\n  withCurrentNavigationElement(element, callback) {\n    this.currentNavigationElement = element;\n    callback();\n    delete this.currentNavigationElement;\n  }\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}\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\nclass StreamElement extends HTMLElement {\n  static async renderElement(newElement) {\n    await newElement.performAction();\n  }\n  async connectedCallback() {\n    try {\n      await this.render();\n    } catch (error) {\n      console.error(error);\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      const event = this.beforeRenderEvent;\n      if (this.dispatchEvent(event)) {\n        await nextAnimationFrame();\n        await event.detail.render(this);\n      }\n    })();\n  }\n  disconnect() {\n    try {\n      this.remove();\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    } else if (this.targets) {\n      return this.targetElementsByQuery;\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 === null) {\n      const template = this.ownerDocument.createElement(\"template\");\n      this.appendChild(template);\n      return template;\n    } else 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\", {\n      bubbles: true,\n      cancelable: true,\n      detail: {\n        newStream: this,\n        render: StreamElement.renderElement\n      }\n    });\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    } 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    } else {\n      return [];\n    }\n  }\n}\n\nclass StreamSourceElement extends HTMLElement {\n  constructor() {\n    super(...arguments);\n    this.streamSource = null;\n  }\n  connectedCallback() {\n    this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n    connectStreamSource(this.streamSource);\n  }\n  disconnectedCallback() {\n    if (this.streamSource) {\n      disconnectStreamSource(this.streamSource);\n    }\n  }\n  get src() {\n    return this.getAttribute(\"src\") || \"\";\n  }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n  customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n  customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n  customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n  let element = document.currentScript;\n  if (!element) return;\n  if (element.hasAttribute(\"data-turbo-suppress-warning\")) return;\n  element = element.parentElement;\n  while (element) {\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    element = element.parentElement;\n  }\n})();\n\nwindow.Turbo = Turbo;\n\nstart();\n\nvar turbo_es2017Esm = Object.freeze({\n  __proto__: null,\n  FrameElement: FrameElement,\n  get FrameLoadingStyle() {\n    return FrameLoadingStyle;\n  },\n  FrameRenderer: FrameRenderer,\n  PageRenderer: PageRenderer,\n  PageSnapshot: PageSnapshot,\n  StreamActions: StreamActions,\n  StreamElement: StreamElement,\n  StreamSourceElement: StreamSourceElement,\n  cache: cache,\n  clearCache: clearCache,\n  connectStreamSource: connectStreamSource,\n  disconnectStreamSource: disconnectStreamSource,\n  navigator: navigator$1,\n  registerAdapter: registerAdapter,\n  renderStreamMessage: renderStreamMessage,\n  session: session,\n  setConfirmMethod: setConfirmMethod,\n  setFormMode: setFormMode,\n  setProgressBarDelay: setProgressBarDelay,\n  start: start,\n  visit: visit\n});\n\nlet consumer;\n\nasync function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer));\n}\n\nfunction setConsumer(newConsumer) {\n  return consumer = newConsumer;\n}\n\nasync function createConsumer() {\n  const {createConsumer: createConsumer} = await Promise.resolve().then((function() {\n    return index;\n  }));\n  return createConsumer();\n}\n\nasync function subscribeTo(channel, mixin) {\n  const {subscriptions: subscriptions} = await getConsumer();\n  return subscriptions.create(channel, mixin);\n}\n\nvar cable = Object.freeze({\n  __proto__: null,\n  getConsumer: getConsumer,\n  setConsumer: setConsumer,\n  createConsumer: createConsumer,\n  subscribeTo: subscribeTo\n});\n\nfunction 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}\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this);\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    });\n  }\n  disconnectedCallback() {\n    disconnectStreamSource(this);\n    if (this.subscription) this.subscription.unsubscribe();\n  }\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", {\n      data: data\n    });\n    return this.dispatchEvent(event);\n  }\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\");\n  }\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\");\n  }\n  get channel() {\n    const channel = this.getAttribute(\"channel\");\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\");\n    return {\n      channel: channel,\n      signed_stream_name: signed_stream_name,\n      ...walk({\n        ...this.dataset\n      })\n    };\n  }\n}\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement);\n}\n\nfunction encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const {target: form, detail: {fetchOptions: fetchOptions}} = event;\n    form.addEventListener(\"turbo:submit-start\", (({detail: {formSubmission: {submitter: submitter}}}) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams;\n      const method = determineFetchMethod(submitter, body, form);\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\");\n        } else {\n          body.set(\"_method\", method);\n        }\n        fetchOptions.method = \"post\";\n      }\n    }), {\n      once: true\n    });\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter);\n  const overrideMethod = body.get(\"_method\");\n  const method = form.getAttribute(\"method\") || \"get\";\n  if (typeof formMethod == \"string\") {\n    return formMethod;\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod;\n  } else {\n    return method;\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod;\n    } else {\n      return null;\n    }\n  } else {\n    return null;\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams;\n}\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody);\n\nvar adapters = {\n  logger: self.console,\n  WebSocket: self.WebSocket\n};\n\nvar logger = {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now());\n      adapters.logger.log(\"[ActionCable]\", ...messages);\n    }\n  }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this);\n    this.connection = connection;\n    this.reconnectAttempts = 0;\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  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  isRunning() {\n    return this.startedAt && !this.stoppedAt;\n  }\n  recordPing() {\n    this.pingedAt = now();\n  }\n  recordConnect() {\n    this.reconnectAttempts = 0;\n    this.recordPing();\n    delete this.disconnectedAt;\n    logger.log(\"ConnectionMonitor recorded connect\");\n  }\n  recordDisconnect() {\n    this.disconnectedAt = now();\n    logger.log(\"ConnectionMonitor recorded disconnect\");\n  }\n  startPolling() {\n    this.stopPolling();\n    this.poll();\n  }\n  stopPolling() {\n    clearTimeout(this.pollTimeout);\n  }\n  poll() {\n    this.pollTimeout = setTimeout((() => {\n      this.reconnectIfStale();\n      this.poll();\n    }), this.getPollInterval());\n  }\n  getPollInterval() {\n    const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n    const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n    const jitter = jitterMax * Math.random();\n    return staleThreshold * 1e3 * backoff * (1 + jitter);\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  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt;\n  }\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n  }\n  disconnectedRecently() {\n    return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\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      }), 200);\n    }\n  }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\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: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\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  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data));\n      return true;\n    } else {\n      return false;\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) {\n        this.uninstallEventHandlers();\n      }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n      this.installEventHandlers();\n      this.monitor.start();\n      return true;\n    }\n  }\n  close({allowReconnect: allowReconnect} = {\n    allowReconnect: true\n  }) {\n    if (!allowReconnect) {\n      this.monitor.stop();\n    }\n    if (this.isActive()) {\n      return this.webSocket.close();\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      } 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  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol;\n    }\n  }\n  isOpen() {\n    return this.isState(\"open\");\n  }\n  isActive() {\n    return this.isState(\"open\", \"connecting\");\n  }\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n  }\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0;\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  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  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {};\n    }\n  }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) {\n      return;\n    }\n    const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n    switch (type) {\n     case message_types.welcome:\n      this.monitor.recordConnect();\n      return this.subscriptions.reload();\n\n     case message_types.disconnect:\n      logger.log(`Disconnecting. Reason: ${reason}`);\n      return this.close({\n        allowReconnect: reconnect\n      });\n\n     case message_types.ping:\n      return this.monitor.recordPing();\n\n     case message_types.confirmation:\n      this.subscriptions.confirmSubscription(identifier);\n      return this.subscriptions.notify(identifier, \"connected\");\n\n     case message_types.rejection:\n      return this.subscriptions.reject(identifier);\n\n     default:\n      return this.subscriptions.notify(identifier, \"received\", message);\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({\n        allowReconnect: false\n      });\n    }\n  },\n  close(event) {\n    logger.log(\"WebSocket onclose event\");\n    if (this.disconnected) {\n      return;\n    }\n    this.disconnected = true;\n    this.monitor.recordDisconnect();\n    return this.subscriptions.notifyAll(\"disconnected\", {\n      willAttemptReconnect: this.monitor.isRunning()\n    });\n  },\n  error() {\n    logger.log(\"WebSocket onerror event\");\n  }\n};\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\nclass Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer;\n    this.identifier = JSON.stringify(params);\n    extend(this, mixin);\n  }\n  perform(action, data = {}) {\n    data.action = action;\n    return this.send(data);\n  }\n  send(data) {\n    return this.consumer.send({\n      command: \"message\",\n      identifier: this.identifier,\n      data: JSON.stringify(data)\n    });\n  }\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this);\n  }\n}\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions;\n    this.pendingSubscriptions = [];\n  }\n  guarantee(subscription) {\n    if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n      this.pendingSubscriptions.push(subscription);\n    } else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n    }\n    this.startGuaranteeing();\n  }\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n    this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n  }\n  startGuaranteeing() {\n    this.stopGuaranteeing();\n    this.retrySubscribing();\n  }\n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout);\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    }), 500);\n  }\n}\n\nclass Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer;\n    this.guarantor = new SubscriptionGuarantor(this);\n    this.subscriptions = [];\n  }\n  create(channelName, mixin) {\n    const channel = channelName;\n    const params = typeof channel === \"object\" ? channel : {\n      channel: channel\n    };\n    const subscription = new Subscription(this.consumer, params, mixin);\n    return this.add(subscription);\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  remove(subscription) {\n    this.forget(subscription);\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\");\n    }\n    return subscription;\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  forget(subscription) {\n    this.guarantor.forget(subscription);\n    this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n    return subscription;\n  }\n  findAll(identifier) {\n    return this.subscriptions.filter((s => s.identifier === identifier));\n  }\n  reload() {\n    return this.subscriptions.map((subscription => this.subscribe(subscription)));\n  }\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\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    return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n  }\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription);\n    }\n  }\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`);\n    this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n  }\n  sendCommand(subscription, command) {\n    const {identifier: identifier} = subscription;\n    return this.consumer.send({\n      command: command,\n      identifier: identifier\n    });\n  }\n}\n\nclass Consumer {\n  constructor(url) {\n    this._url = url;\n    this.subscriptions = new Subscriptions(this);\n    this.connection = new Connection(this);\n  }\n  get url() {\n    return createWebSocketURL(this._url);\n  }\n  send(data) {\n    return this.connection.send(data);\n  }\n  connect() {\n    return this.connection.open();\n  }\n  disconnect() {\n    return this.connection.close({\n      allowReconnect: false\n    });\n  }\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open();\n    }\n  }\n}\n\nfunction createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url();\n  }\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\");\n    a.href = url;\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\nfunction createConsumer$1(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url);\n}\n\nfunction getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nvar index = Object.freeze({\n  __proto__: null,\n  Connection: Connection,\n  ConnectionMonitor: ConnectionMonitor,\n  Consumer: Consumer,\n  INTERNAL: INTERNAL,\n  Subscription: Subscription,\n  Subscriptions: Subscriptions,\n  SubscriptionGuarantor: SubscriptionGuarantor,\n  adapters: adapters,\n  createWebSocketURL: createWebSocketURL,\n  logger: logger,\n  createConsumer: createConsumer$1,\n  getConfig: getConfig\n});\n\nexport { turbo_es2017Esm as Turbo, cable };\n", "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n=this.utcOffset(),i=this.toDate(),a=i.toLocaleString(\"en-US\",{timeZone:t}),u=Math.round((i-new Date(a))/1e3/60),f=o(a,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(15*-Math.round(i.getTimezoneOffset()/15)-u,!0);if(e){var s=f.utcOffset();f=f.add(n-s,\"minute\")}return f.$x.$timezone=t,f},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_advancedFormat=t()}(this,(function(){\"use strict\";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||\"YYYY-MM-DDTHH:mm:ssZ\").replace(/\\[([^\\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case\"Q\":return Math.ceil((t.$M+1)/3);case\"Do\":return r.ordinal(t.$D);case\"gggg\":return t.weekYear();case\"GGGG\":return t.isoWeekYear();case\"wo\":return r.ordinal(t.week(),\"W\");case\"w\":case\"ww\":return s.s(t.week(),\"w\"===e?1:2,\"0\");case\"W\":case\"WW\":return s.s(t.isoWeek(),\"W\"===e?1:2,\"0\");case\"k\":case\"kk\":return s.s(String(0===t.$H?24:t.$H),\"k\"===e?1:2,\"0\");case\"X\":return Math.floor(t.$d.getTime()/1e3);case\"x\":return t.$d.getTime();case\"z\":return\"[\"+t.offsetName()+\"]\";case\"zzz\":return\"[\"+t.offsetName(\"long\")+\"]\";default:return e}}));return n.bind(this)(a)}}}));", "!function(t,s){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=s():\"function\"==typeof define&&define.amd?define(s):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_duration=s()}(this,(function(){\"use strict\";var t,s,n=1e3,i=6e4,e=36e5,r=864e5,o=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=31536e6,d=2628e6,a=/^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/,h={years:u,months:d,days:r,hours:e,minutes:i,seconds:n,milliseconds:1,weeks:6048e5},c=function(t){return t instanceof g},f=function(t,s,n){return new g(t,n,s.$l)},m=function(t){return s.p(t)+\"s\"},l=function(t){return t<0},$=function(t){return l(t)?Math.ceil(t):Math.floor(t)},y=function(t){return Math.abs(t)},v=function(t,s){return t?l(t)?{negative:!0,format:\"\"+y(t)+s}:{negative:!1,format:\"\"+t+s}:{negative:!1,format:\"\"}},g=function(){function l(t,s,n){var i=this;if(this.$d={},this.$l=n,void 0===t&&(this.$ms=0,this.parseFromMilliseconds()),s)return f(t*h[m(s)],this);if(\"number\"==typeof t)return this.$ms=t,this.parseFromMilliseconds(),this;if(\"object\"==typeof t)return Object.keys(t).forEach((function(s){i.$d[m(s)]=t[s]})),this.calMilliseconds(),this;if(\"string\"==typeof t){var e=t.match(a);if(e){var r=e.slice(2).map((function(t){return null!=t?Number(t):0}));return this.$d.years=r[0],this.$d.months=r[1],this.$d.weeks=r[2],this.$d.days=r[3],this.$d.hours=r[4],this.$d.minutes=r[5],this.$d.seconds=r[6],this.calMilliseconds(),this}}return this}var y=l.prototype;return y.calMilliseconds=function(){var t=this;this.$ms=Object.keys(this.$d).reduce((function(s,n){return s+(t.$d[n]||0)*h[n]}),0)},y.parseFromMilliseconds=function(){var t=this.$ms;this.$d.years=$(t/u),t%=u,this.$d.months=$(t/d),t%=d,this.$d.days=$(t/r),t%=r,this.$d.hours=$(t/e),t%=e,this.$d.minutes=$(t/i),t%=i,this.$d.seconds=$(t/n),t%=n,this.$d.milliseconds=t},y.toISOString=function(){var t=v(this.$d.years,\"Y\"),s=v(this.$d.months,\"M\"),n=+this.$d.days||0;this.$d.weeks&&(n+=7*this.$d.weeks);var i=v(n,\"D\"),e=v(this.$d.hours,\"H\"),r=v(this.$d.minutes,\"M\"),o=this.$d.seconds||0;this.$d.milliseconds&&(o+=this.$d.milliseconds/1e3,o=Math.round(1e3*o)/1e3);var u=v(o,\"S\"),d=t.negative||s.negative||i.negative||e.negative||r.negative||u.negative,a=e.format||r.format||u.format?\"T\":\"\",h=(d?\"-\":\"\")+\"P\"+t.format+s.format+i.format+a+e.format+r.format+u.format;return\"P\"===h||\"-P\"===h?\"P0D\":h},y.toJSON=function(){return this.toISOString()},y.format=function(t){var n=t||\"YYYY-MM-DDTHH:mm:ss\",i={Y:this.$d.years,YY:s.s(this.$d.years,2,\"0\"),YYYY:s.s(this.$d.years,4,\"0\"),M:this.$d.months,MM:s.s(this.$d.months,2,\"0\"),D:this.$d.days,DD:s.s(this.$d.days,2,\"0\"),H:this.$d.hours,HH:s.s(this.$d.hours,2,\"0\"),m:this.$d.minutes,mm:s.s(this.$d.minutes,2,\"0\"),s:this.$d.seconds,ss:s.s(this.$d.seconds,2,\"0\"),SSS:s.s(this.$d.milliseconds,3,\"0\")};return n.replace(o,(function(t,s){return s||String(i[t])}))},y.as=function(t){return this.$ms/h[m(t)]},y.get=function(t){var s=this.$ms,n=m(t);return\"milliseconds\"===n?s%=1e3:s=\"weeks\"===n?$(s/h[n]):this.$d[n],s||0},y.add=function(t,s,n){var i;return i=s?t*h[m(s)]:c(t)?t.$ms:f(t,this).$ms,f(this.$ms+i*(n?-1:1),this)},y.subtract=function(t,s){return this.add(t,s,!0)},y.locale=function(t){var s=this.clone();return s.$l=t,s},y.clone=function(){return f(this.$ms,this)},y.humanize=function(s){return t().add(this.$ms,\"ms\").locale(this.$l).fromNow(!s)},y.valueOf=function(){return this.asMilliseconds()},y.milliseconds=function(){return this.get(\"milliseconds\")},y.asMilliseconds=function(){return this.as(\"milliseconds\")},y.seconds=function(){return this.get(\"seconds\")},y.asSeconds=function(){return this.as(\"seconds\")},y.minutes=function(){return this.get(\"minutes\")},y.asMinutes=function(){return this.as(\"minutes\")},y.hours=function(){return this.get(\"hours\")},y.asHours=function(){return this.as(\"hours\")},y.days=function(){return this.get(\"days\")},y.asDays=function(){return this.as(\"days\")},y.weeks=function(){return this.get(\"weeks\")},y.asWeeks=function(){return this.as(\"weeks\")},y.months=function(){return this.get(\"months\")},y.asMonths=function(){return this.as(\"months\")},y.years=function(){return this.get(\"years\")},y.asYears=function(){return this.as(\"years\")},l}(),p=function(t,s,n){return t.add(s.years()*n,\"y\").add(s.months()*n,\"M\").add(s.days()*n,\"d\").add(s.hours()*n,\"h\").add(s.minutes()*n,\"m\").add(s.seconds()*n,\"s\").add(s.milliseconds()*n,\"ms\")};return function(n,i,e){t=e,s=e().$utils(),e.duration=function(t,s){var n=e.locale();return f(t,{$l:n},s)},e.isDuration=c;var r=i.prototype.add,o=i.prototype.subtract;i.prototype.add=function(t,s){return c(t)?p(this,t,1):r.bind(this)(t,s)},i.prototype.subtract=function(t,s){return c(t)?p(this,t,-1):o.bind(this)(t,s)}}}));", "import Chartkick from \"chartkick\"\nimport Chart from \"chart.js/auto\"\nimport \"chartjs-adapter-date-fns\"\n\nChartkick.use(Chart)\n", "/*!\n * Chart.js v3.7.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\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}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\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}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\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    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n  const idx = key.indexOf(dot, start);\n  return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n  if (key === emptyString) {\n    return obj;\n  }\n  let pos = 0;\n  let idx = indexOfDotOrLength(key, pos);\n  while (obj && idx > pos) {\n    obj = obj[key.substr(pos, idx - pos)];\n    pos = idx + 1;\n    idx = indexOfDotOrLength(key, pos);\n  }\n  return obj;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\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}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\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)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\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}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(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}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\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}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => 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  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\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  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\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  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\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  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\nconst map = {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));\nfunction isShort(v) {\n\treturn eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\nfunction hexParse(str) {\n\tvar len = str.length;\n\tvar ret;\n\tif (str[0] === '#') {\n\t\tif (len === 4 || len === 5) {\n\t\t\tret = {\n\t\t\t\tr: 255 & map[str[1]] * 17,\n\t\t\t\tg: 255 & map[str[2]] * 17,\n\t\t\t\tb: 255 & map[str[3]] * 17,\n\t\t\t\ta: len === 5 ? map[str[4]] * 17 : 255\n\t\t\t};\n\t\t} else if (len === 7 || len === 9) {\n\t\t\tret = {\n\t\t\t\tr: map[str[1]] << 4 | map[str[2]],\n\t\t\t\tg: map[str[3]] << 4 | map[str[4]],\n\t\t\t\tb: map[str[5]] << 4 | map[str[6]],\n\t\t\t\ta: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n\t\t\t};\n\t\t}\n\t}\n\treturn ret;\n}\nfunction hexString(v) {\n\tvar f = isShort(v) ? h1 : h2;\n\treturn v\n\t\t? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '')\n\t\t: v;\n}\nfunction round(v) {\n\treturn v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n\treturn lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n\treturn lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n\treturn lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n\treturn lim(round(v * 100), 0, 100);\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n\tconst m = RGB_RE.exec(str);\n\tlet a = 255;\n\tlet r, g, b;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[7] !== r) {\n\t\tconst v = +m[7];\n\t\ta = 255 & (m[8] ? p2b(v) : v * 255);\n\t}\n\tr = +m[1];\n\tg = +m[3];\n\tb = +m[5];\n\tr = 255 & (m[2] ? p2b(r) : r);\n\tg = 255 & (m[4] ? p2b(g) : g);\n\tb = 255 & (m[6] ? p2b(b) : b);\n\treturn {\n\t\tr: r,\n\t\tg: g,\n\t\tb: b,\n\t\ta: a\n\t};\n}\nfunction rgbString(v) {\n\treturn v && (\n\t\tv.a < 255\n\t\t\t? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n\t\t\t: `rgb(${v.r}, ${v.g}, ${v.b})`\n\t);\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\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\treturn [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n\tconst f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n\tconst rgb = hsl2rgbn(h, 1, 0.5);\n\tlet i;\n\tif (w + b > 1) {\n\t\ti = 1 / (w + b);\n\t\tw *= i;\n\t\tb *= i;\n\t}\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] *= 1 - w - b;\n\t\trgb[i] += w;\n\t}\n\treturn rgb;\n}\nfunction rgb2hsl(v) {\n\tconst range = 255;\n\tconst r = v.r / range;\n\tconst g = v.g / range;\n\tconst b = v.b / range;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h, s, d;\n\tif (max !== min) {\n\t\td = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\th = max === r\n\t\t\t? ((g - b) / d) + (g < b ? 6 : 0)\n\t\t\t: max === g\n\t\t\t\t? (b - r) / d + 2\n\t\t\t\t: (r - g) / d + 4;\n\t\th = h * 60 + 0.5;\n\t}\n\treturn [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n\treturn (\n\t\tArray.isArray(a)\n\t\t\t? f(a[0], a[1], a[2])\n\t\t\t: f(a, b, c)\n\t).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n\treturn calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n\treturn calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n\treturn calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n\treturn (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n\tconst m = HUE_RE.exec(str);\n\tlet a = 255;\n\tlet v;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[5] !== v) {\n\t\ta = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n\t}\n\tconst h = hue(+m[2]);\n\tconst p1 = +m[3] / 100;\n\tconst p2 = +m[4] / 100;\n\tif (m[1] === 'hwb') {\n\t\tv = hwb2rgb(h, p1, p2);\n\t} else if (m[1] === 'hsv') {\n\t\tv = hsv2rgb(h, p1, p2);\n\t} else {\n\t\tv = hsl2rgb(h, p1, p2);\n\t}\n\treturn {\n\t\tr: v[0],\n\t\tg: v[1],\n\t\tb: v[2],\n\t\ta: a\n\t};\n}\nfunction rotate(v, deg) {\n\tvar h = rgb2hsl(v);\n\th[0] = hue(h[0] + deg);\n\th = hsl2rgb(h);\n\tv.r = h[0];\n\tv.g = h[1];\n\tv.b = h[2];\n}\nfunction hslString(v) {\n\tif (!v) {\n\t\treturn;\n\t}\n\tconst a = rgb2hsl(v);\n\tconst h = a[0];\n\tconst s = n2p(a[1]);\n\tconst l = n2p(a[2]);\n\treturn v.a < 255\n\t\t? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n\t\t: `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map$1 = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n\tconst unpacked = {};\n\tconst keys = Object.keys(names);\n\tconst tkeys = Object.keys(map$1);\n\tlet i, j, k, ok, nk;\n\tfor (i = 0; i < keys.length; i++) {\n\t\tok = nk = keys[i];\n\t\tfor (j = 0; j < tkeys.length; j++) {\n\t\t\tk = tkeys[j];\n\t\t\tnk = nk.replace(k, map$1[k]);\n\t\t}\n\t\tk = parseInt(names[ok], 16);\n\t\tunpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n\t}\n\treturn unpacked;\n}\nlet names$1;\nfunction nameParse(str) {\n\tif (!names$1) {\n\t\tnames$1 = unpack();\n\t\tnames$1.transparent = [0, 0, 0, 0];\n\t}\n\tconst a = names$1[str.toLowerCase()];\n\treturn a && {\n\t\tr: a[0],\n\t\tg: a[1],\n\t\tb: a[2],\n\t\ta: a.length === 4 ? a[3] : 255\n\t};\n}\nfunction modHSL(v, i, ratio) {\n\tif (v) {\n\t\tlet tmp = rgb2hsl(v);\n\t\ttmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n\t\ttmp = hsl2rgb(tmp);\n\t\tv.r = tmp[0];\n\t\tv.g = tmp[1];\n\t\tv.b = tmp[2];\n\t}\n}\nfunction clone(v, proto) {\n\treturn v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n\tvar v = {r: 0, g: 0, b: 0, a: 255};\n\tif (Array.isArray(input)) {\n\t\tif (input.length >= 3) {\n\t\t\tv = {r: input[0], g: input[1], b: input[2], a: 255};\n\t\t\tif (input.length > 3) {\n\t\t\t\tv.a = n2b(input[3]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = clone(input, {r: 0, g: 0, b: 0, a: 1});\n\t\tv.a = n2b(v.a);\n\t}\n\treturn v;\n}\nfunction functionParse(str) {\n\tif (str.charAt(0) === 'r') {\n\t\treturn rgbParse(str);\n\t}\n\treturn hueParse(str);\n}\nclass Color {\n\tconstructor(input) {\n\t\tif (input instanceof Color) {\n\t\t\treturn input;\n\t\t}\n\t\tconst type = typeof input;\n\t\tlet v;\n\t\tif (type === 'object') {\n\t\t\tv = fromObject(input);\n\t\t} else if (type === 'string') {\n\t\t\tv = hexParse(input) || nameParse(input) || functionParse(input);\n\t\t}\n\t\tthis._rgb = v;\n\t\tthis._valid = !!v;\n\t}\n\tget valid() {\n\t\treturn this._valid;\n\t}\n\tget rgb() {\n\t\tvar v = clone(this._rgb);\n\t\tif (v) {\n\t\t\tv.a = b2n(v.a);\n\t\t}\n\t\treturn v;\n\t}\n\tset rgb(obj) {\n\t\tthis._rgb = fromObject(obj);\n\t}\n\trgbString() {\n\t\treturn this._valid ? rgbString(this._rgb) : this._rgb;\n\t}\n\thexString() {\n\t\treturn this._valid ? hexString(this._rgb) : this._rgb;\n\t}\n\thslString() {\n\t\treturn this._valid ? hslString(this._rgb) : this._rgb;\n\t}\n\tmix(color, weight) {\n\t\tconst me = this;\n\t\tif (color) {\n\t\t\tconst c1 = me.rgb;\n\t\t\tconst c2 = color.rgb;\n\t\t\tlet w2;\n\t\t\tconst p = weight === w2 ? 0.5 : weight;\n\t\t\tconst w = 2 * p - 1;\n\t\t\tconst a = c1.a - c2.a;\n\t\t\tconst w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\tw2 = 1 - w1;\n\t\t\tc1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n\t\t\tc1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n\t\t\tc1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n\t\t\tc1.a = p * c1.a + (1 - p) * c2.a;\n\t\t\tme.rgb = c1;\n\t\t}\n\t\treturn me;\n\t}\n\tclone() {\n\t\treturn new Color(this.rgb);\n\t}\n\talpha(a) {\n\t\tthis._rgb.a = n2b(a);\n\t\treturn this;\n\t}\n\tclearer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 - ratio;\n\t\treturn this;\n\t}\n\tgreyscale() {\n\t\tconst rgb = this._rgb;\n\t\tconst val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n\t\trgb.r = rgb.g = rgb.b = val;\n\t\treturn this;\n\t}\n\topaquer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 + ratio;\n\t\treturn this;\n\t}\n\tnegate() {\n\t\tconst v = this._rgb;\n\t\tv.r = 255 - v.r;\n\t\tv.g = 255 - v.g;\n\t\tv.b = 255 - v.b;\n\t\treturn this;\n\t}\n\tlighten(ratio) {\n\t\tmodHSL(this._rgb, 2, ratio);\n\t\treturn this;\n\t}\n\tdarken(ratio) {\n\t\tmodHSL(this._rgb, 2, -ratio);\n\t\treturn this;\n\t}\n\tsaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, ratio);\n\t\treturn this;\n\t}\n\tdesaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, -ratio);\n\t\treturn this;\n\t}\n\trotate(deg) {\n\t\trotate(this._rgb, deg);\n\t\treturn this;\n\t}\n}\nfunction index_esm(input) {\n\treturn new Color(input);\n}\n\nconst isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern;\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(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}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\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    };\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    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\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}\nvar defaults = 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});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\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}\nfunction _measureText(ctx, data, gc, longest, string) {\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}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\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}\nfunction _alignPixel(chart, pixel, width) {\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}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  let type, xOffset, yOffset, size, cornerRadius;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\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  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n  default:\n    ctx.arc(x, y, radius, 0, TAU);\n    ctx.closePath();\n    break;\n  case 'triangle':\n    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, 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      ctx.rect(x - size, y - size, 2 * size, 2 * size);\n      break;\n    }\n    rad += QUARTER_PI;\n  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = 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    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = 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    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = 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    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'line':\n    xOffset = 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) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\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}\nfunction clipArea(ctx, area) {\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}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\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}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\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}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\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    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}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\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  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\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 = '';\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  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\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}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\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  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\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    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\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}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\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    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\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  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\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}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\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 (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && 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, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\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    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\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\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\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  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\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}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\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    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\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    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\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    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}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\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    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\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  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\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}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\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  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\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}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(evt, canvas) {\n  const e = evt.native || evt;\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\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}\nfunction getRelativePosition(evt, chart) {\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(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\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}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\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();\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}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\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  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 ? Math.floor(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    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\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  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}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\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}\nfunction _bezierInterpolation(p1, p2, t, mode) {\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\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\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}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\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};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\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}\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}\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  let {start, end, loop} = segment;\n  let i, ilen;\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  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\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  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\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  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\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  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\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}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\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  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        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  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\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}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\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  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\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  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  return result;\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}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _toLeftRightCenter as $, _rlookupByKey as A, getAngleFromPoint as B, toPadding as C, each as D, getMaximumSize as E, _getParentNode as F, readUsedSize as G, HALF_PI as H, throttled as I, supportsEventListenerOptions as J, _isDomSupported as K, log10 as L, _factorize as M, finiteOrDefault as N, callback as O, PI as P, _addGrace as Q, toDegrees as R, _measureText as S, TAU as T, _int16Range as U, _alignPixel as V, clipArea as W, renderText as X, unclipArea as Y, toFont as Z, _arrayUnique as _, resolve as a, _angleDiff as a$, _alignStartEnd as a0, overrides as a1, merge as a2, _capitalize as a3, descriptors as a4, isFunction as a5, _attachContext as a6, _createResolver as a7, _descriptors as a8, mergeIf as a9, restoreTextDirection as aA, noop as aB, distanceBetweenPoints as aC, _setMinAndMaxByKey as aD, niceNum as aE, almostWhole as aF, almostEquals as aG, _decimalPlaces as aH, _longestText as aI, _filterBetween as aJ, _lookup as aK, getHoverColor as aL, clone$1 as aM, _merger as aN, _mergerIf as aO, _deprecated as aP, toFontString as aQ, splineCurve as aR, splineCurveMonotone as aS, getStyle as aT, fontString as aU, toLineHeight as aV, PITAU as aW, INFINITY as aX, RAD_PER_DEG as aY, QUARTER_PI as aZ, TWO_THIRDS_PI as a_, uid as aa, debounce as ab, retinaScale as ac, clearCanvas as ad, setsEqual as ae, _elementsEqual as af, _isClickEvent as ag, _isBetween as ah, _readValueToProps as ai, _updateBezierControlPoints as aj, _computeSegments as ak, _boundSegments as al, _steppedInterpolation as am, _bezierInterpolation as an, _pointInLine as ao, _steppedLineTo as ap, _bezierCurveTo as aq, drawPoint as ar, addRoundedRectPath as as, toTRBL as at, toTRBLCorners as au, _boundSegment as av, _normalizeAngle as aw, getRtlAdapter as ax, overrideTextDirection as ay, _textX as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, getRelativePosition as y, _isPointInArea as z };\n", "/*!\n * Chart.js v3.7.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as getAngleFromPoint, C as toPadding, D as each, E as getMaximumSize, F as _getParentNode, G as readUsedSize, I as throttled, J as supportsEventListenerOptions, K as _isDomSupported, L as log10, M as _factorize, N as finiteOrDefault, O as callback, Q as _addGrace, R as toDegrees, S as _measureText, U as _int16Range, V as _alignPixel, W as clipArea, X as renderText, Y as unclipArea, Z as toFont, $ as _toLeftRightCenter, a0 as _alignStartEnd, a1 as overrides, a2 as merge, a3 as _capitalize, a4 as descriptors, a5 as isFunction, a6 as _attachContext, a7 as _createResolver, a8 as _descriptors, a9 as mergeIf, aa as uid, ab as debounce, ac as retinaScale, ad as clearCanvas, ae as setsEqual, af as _elementsEqual, ag as _isClickEvent, ah as _isBetween, ai as _readValueToProps, aj as _updateBezierControlPoints, ak as _computeSegments, al as _boundSegments, am as _steppedInterpolation, an as _bezierInterpolation, ao as _pointInLine, ap as _steppedLineTo, aq as _bezierCurveTo, ar as drawPoint, as as addRoundedRectPath, at as toTRBL, au as toTRBLCorners, av as _boundSegment, aw as _normalizeAngle, ax as getRtlAdapter, ay as overrideTextDirection, az as _textX, aA as restoreTextDirection, aB as noop, aC as distanceBetweenPoints, aD as _setMinAndMaxByKey, aE as niceNum, aF as almostWhole, aG as almostEquals, aH as _decimalPlaces, aI as _longestText, aJ as _filterBetween, aK as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\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      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\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  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\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  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  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    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(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};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\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  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\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  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\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    this._active = from !== to && (loop || (elapsed < duration));\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\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    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\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\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.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});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.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\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\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\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      (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  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\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    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\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      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\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  return Promise.all(running);\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    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\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}\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  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\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  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\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  if (value === null) {\n    return;\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 (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\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}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\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}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\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  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\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  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    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\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}\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}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\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  }\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};\nclass DatasetController {\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    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.$context = undefined;\n    this._syncList = [];\n    this.initialize();\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  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\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  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\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  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\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  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\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  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\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    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      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    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\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    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  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\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  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    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  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\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]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\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  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    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\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        break;\n      }\n    }\n    if (sorted) {\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  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\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  _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  update(mode) {}\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    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\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    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\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  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    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\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    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\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  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\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  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\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      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\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  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\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    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\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  _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  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\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  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\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}\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      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\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  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\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  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\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}\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  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}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\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}\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}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\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  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\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}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\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  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      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\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    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\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 firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\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      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      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  _getStacks(last, dataIndex) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const metasets = iScale.getMatchingVisibleMetas(this._type);\n    const stacked = iScale.options.stacked;\n    const ilen = metasets.length;\n    const stacks = [];\n    let i, item;\n    for (i = 0; i < ilen; ++i) {\n      item = metasets[i];\n      if (!item.controller.options.grouped) {\n        continue;\n      }\n      if (typeof dataIndex !== 'undefined') {\n        const val = item.controller.getParsed(dataIndex)[\n          item.controller._cachedMeta.vScale.axis\n        ];\n        if (isNullOrUndef(val) || isNaN(val)) {\n          continue;\n        }\n      }\n      if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n        stacks.push(item.stack);\n      }\n      if (item.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\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    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\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      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked}, 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    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\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      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      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\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    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.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\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\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  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  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  getMaxOverflow() {\n    const data = this._cachedMeta.data;\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  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\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    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = 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    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      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\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 (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}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\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  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\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    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    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\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  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 firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\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      this.updateElement(arc, i, properties, mode);\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\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    return total;\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  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    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\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    if (!arcs) {\n      return 0;\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  getMaxOffset(arcs) {\n    let max = 0;\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  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\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  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\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}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\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    this.updateElements(points, start, count, mode);\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    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      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\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  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {start, count};\n}\nfunction 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  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\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    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\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    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    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const dataset = this.getDataset();\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    const defaultAngle = 360 / this.countVisibleElements();\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(dataset.data[i]) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\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      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const dataset = this.getDataset();\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(dataset.data[index]) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.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};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\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}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\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\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\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    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const dataset = this.getDataset();\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\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, dataset.data[i]);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n  if ('native' in e) {\n    return {\n      x: e.x,\n      y: e.y\n    };\n  }\n  return getRelativePosition$1(e, chart);\n}\nfunction evaluateAllVisibleItems(chart, handler) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  let index, data, element;\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    ({index, data} = metasets[i]);\n    for (let j = 0, jlen = data.length; j < jlen; ++j) {\n      element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\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      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  return {lo: 0, hi: data.length - 1};\n}\nfunction optimizedEvaluateItems(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}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\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}\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n  const items = [];\n  if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\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    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = _isPointInArea(center, chart.chartArea, chart._minPadding);\n    if (!pointInArea && !inRange) {\n      return;\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      items.push({element, datasetIndex, index});\n    }\n  }\n  optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n  if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n    return [];\n  }\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition);\n}\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n  const position = getRelativePosition(e, chart);\n  const items = [];\n  const axis = options.axis;\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateAllVisibleItems(chart, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      intersectsItem = true;\n    }\n  });\n  if (options.intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition)\n        : getNearestItems(chart, position, axis, false, useFinalPosition);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition) :\n        getNearestItems(chart, position, axis, false, useFinalPosition);\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      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      return getIntersectItems(chart, position, axis, useFinalPosition);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n    },\n    x(chart, e, options, useFinalPosition) {\n      return getAxisItems(chart, e, {axis: 'x', intersect: options.intersect}, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      return getAxisItems(chart, e, {axis: 'y', intersect: options.intersect}, useFinalPosition);\n    }\n  }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\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}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\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}\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}\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}\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  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}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\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}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.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  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\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  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\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}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\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  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\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    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\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}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\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  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\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  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\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    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\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    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\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    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\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\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  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\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};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\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  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\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  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition$1(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}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\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}\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}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\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}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\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      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\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    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\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  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\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  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\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      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\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    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\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    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.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',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\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  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\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}\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}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\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}\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}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\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}\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  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\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}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\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\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;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\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;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\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    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\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}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\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  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\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  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\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}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\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._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\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  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\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  parse(raw, index) {\n    return raw;\n  }\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: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\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    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\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  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\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    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\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    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\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  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\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 = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\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    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\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;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\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        if (isHorizontal) {\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          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\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  _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    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      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 {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\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      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\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  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\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    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\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      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\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      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\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    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\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  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\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  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\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  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\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    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position} = 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    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 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    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      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      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\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 optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = grid.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\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    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\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    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    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\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      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      if (isHorizontal) {\n        x = pixel;\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          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      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    }\n    return align;\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    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\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        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        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        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    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\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  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  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  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    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      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\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        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  drawBorder() {\n    const {chart, ctx, options: {grid}} = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 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    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.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\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    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    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\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  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\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    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\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: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\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  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n\nclass 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  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\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}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\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}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass 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    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\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        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\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    return this.plugins;\n  }\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}\nvar registry = new Registry();\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\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    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\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 (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\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    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\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}\nfunction allPlugins(config) {\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  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n    }\n  }\n  return plugins;\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}\nfunction createDescriptors(chart, plugins, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (let i = 0; i < plugins.length; i++) {\n    const plugin = plugins[i];\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, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction 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}\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}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\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}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\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 firstIDs = Object.create(null);\n  const scales = Object.create(null);\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);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\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'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\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}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\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  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  _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  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    const scopes = new Set();\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    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  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\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      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\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}\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}\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\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\nvar version = \"3.7.1\";\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}\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}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\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}\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}\nclass Chart {\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 can be reused.'\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\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    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\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    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    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\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    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\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    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    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      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\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      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\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  _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  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\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      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      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.prototype, {\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    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\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      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    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {mode});\n    this._layers.sort(compare2Level('z', '_idx'));\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    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\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    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\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  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\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    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  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\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    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\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  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    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\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    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\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    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\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    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\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    return [];\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    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\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    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\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    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\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  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n    this._stop();\n    this.config.clearCache();\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    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\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    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\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  getActiveElements() {\n    return this._active || [];\n  }\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      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\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    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: _isPointInArea(e, this.chartArea, this._minPadding)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\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    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\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}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\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  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}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (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  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$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\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  const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n  ctx.lineTo(p4.x, p4.y);\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  ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\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  const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n  ctx.lineTo(p8.x, p8.y);\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  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n  const {options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\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  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\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    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\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 / 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    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\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  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\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}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\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  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\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  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\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    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\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  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\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}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\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}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\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}\nconst usePath2D = typeof Path2D === 'function';\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}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\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    if (cfg) {\n      Object.assign(this, cfg);\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  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\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  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    if (!segments.length) {\n      return;\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  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || (this.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.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};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\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  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\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  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\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  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\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  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\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}\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  const enableBorder = enableBorderRadius || isObject(value);\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}\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  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}\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  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\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}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\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    if (cfg) {\n      Object.assign(this, cfg);\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    ctx.save();\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    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = 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  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\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    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\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    maxArea = area = -1;\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      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\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  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\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    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\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      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\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', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\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  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\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      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (meta.type !== 'line') {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\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      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      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\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}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\nfunction decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    if (fill[0] === '-' || fill[0] === '+') {\n      target = index + target;\n    }\n    if (target === index || target < 0 || target >= count) {\n      return false;\n    }\n    return target;\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  let target = null;\n  let horizontal;\n  if (fill === 'start') {\n    target = scale.bottom;\n  } else if (fill === 'end') {\n    target = scale.top;\n  } else if (isObject(fill)) {\n    target = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    target = scale.getBasePixel();\n  }\n  if (isNumberFinite(target)) {\n    horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? target : null,\n      y: horizontal ? null : target\n    };\n  }\n  return null;\n}\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\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  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}\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const target = [];\n  const start = options.reverse ? scale.max : scale.min;\n  const end = options.reverse ? scale.min : scale.max;\n  let i, center, value;\n  if (fill === 'start') {\n    value = start;\n  } else if (fill === 'end') {\n    value = end;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  if (options.grid.circular) {\n    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  for (i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction 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}\nfunction 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}\nfunction 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  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}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\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}\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    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\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}\nfunction getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return createBoundaryLine(boundary, line);\n}\nfunction createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _clip(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\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  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\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}\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = findSegmentEnd(start, end, points);\n    const bounds = getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\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      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}\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}\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}\nfunction _fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\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    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    _clip(ctx, target, area.top);\n    _fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    _clip(ctx, target, area.bottom);\n  }\n  _fill(ctx, {line, target, color: below, scale, property});\n  ctx.restore();\n}\nfunction 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}\nvar plugin_filler = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\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      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = resolveTarget(sources, i, options.propagate);\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      source.line.updateControlPoints(area, source.axis);\n      if (draw) {\n        drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (source) {\n        drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\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  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\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  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const {options, ctx} = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\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    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\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      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      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, 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    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\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  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\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 {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\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      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxWidth * 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        drawPoint(ctx, drawOptions, centerX, centerY);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\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        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\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    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    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\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      rtlHelper.setWidth(this.width);\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      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\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    if (!titleOpts.display) {\n      return;\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    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\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    const x = _alignStartEnd(position, left, left + maxWidth);\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    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\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  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\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  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\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    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\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: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\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  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\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    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\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    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  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\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    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}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\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\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\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\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\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    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\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        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\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}\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  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}\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  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\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  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    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  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\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  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\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  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\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  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  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\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}\nfunction alignY(size, yAlign, paddingAndSize) {\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}\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  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\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  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\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}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\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}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\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 || config._chart;\n    this._chart = this.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    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\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    return animations;\n  }\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\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(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\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    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\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    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      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      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      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\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    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\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    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\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      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\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;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth, boxPadding} = 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    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = labelColors.borderWidth || 1;\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\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        ctx.fillStyle = labelColors.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        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\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    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\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    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\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  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    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\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    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\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  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\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    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\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    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\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}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    const args = {\n      tooltip\n    };\n    if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n      return;\n    }\n    if (tooltip) {\n      tooltip.draw(chart.ctx);\n    }\n    chart.notifyPlugins('afterTooltipDraw', args);\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\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: {\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          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        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\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        let label = tooltipItem.dataset.label || '';\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      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\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  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: plugin_filler,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\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};\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}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\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  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  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\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    this.min = min;\n    this.max = max;\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    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\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  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\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  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\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  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\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    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\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  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\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  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== 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  return ticks;\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}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\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    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\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$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\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  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\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  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\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 isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\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  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\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}\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}\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  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\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  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    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  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\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}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\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}\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}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\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}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\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  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\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  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\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  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\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  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\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  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  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid} = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\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      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\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      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\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};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\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  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\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    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\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  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\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}\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}\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  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}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\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    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\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    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\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    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\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    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\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    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.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    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\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    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    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\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    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\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  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\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  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  _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    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\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    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return (this._cache.data = this.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\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    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\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  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\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  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\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    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\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      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\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}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n", "import {Chart, registerables} from '../dist/chart.esm';\n\nChart.register(...registerables);\n\nexport default Chart;\n", "export default function toInteger(dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN;\n  }\n\n  var number = Number(dirtyNumber);\n\n  if (isNaN(number)) {\n    return number;\n  }\n\n  return number < 0 ? Math.ceil(number) : Math.floor(number);\n}", "export default function requiredArgs(required, args) {\n  if (args.length < required) {\n    throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n  }\n}", "import requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function toDate(argument) {\n  requiredArgs(1, arguments);\n  var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n  if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime());\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument);\n  } else {\n    if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n      // eslint-disable-next-line no-console\n      console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n      console.warn(new Error().stack);\n    }\n\n    return new Date(NaN);\n  }\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} - the new date with the days added\n * @throws {TypeError} - 2 arguments required\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 */\n\nexport default function addDays(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n\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\n  date.setDate(date.getDate() + amount);\n  return date;\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\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\nexport default function addMonths(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var amount = toInteger(dirtyAmount);\n\n  if (isNaN(amount)) {\n    return new Date(NaN);\n  }\n\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\n  var dayOfMonth = date.getDate(); // 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\n  var endOfDesiredMonth = new Date(date.getTime());\n  endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n  var daysInMonth = endOfDesiredMonth.getDate();\n\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(endOfDesiredMonth.getFullYear(), endOfDesiredMonth.getMonth(), dayOfMonth);\n    return date;\n  }\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var timestamp = toDate(dirtyDate).getTime();\n  var amount = toInteger(dirtyAmount);\n  return new Date(timestamp + amount);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function addHours(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR);\n}", "import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\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 */\n\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n  requiredArgs(1, arguments);\n  var options = dirtyOptions || {};\n  var locale = options.locale;\n  var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n  var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n  var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setDate(date.getDate() - diff);\n  date.setHours(0, 0, 0, 0);\n  return date;\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 default function getTimezoneOffsetInMilliseconds(date) {\n  var 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.getTime() - utcDate.getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function startOfDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}", "import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var startOfDayLeft = startOfDay(dirtyDateLeft);\n  var startOfDayRight = startOfDay(dirtyDateRight);\n  var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n  var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight); // Round the number of days to the nearest integer\n  // because the number of milliseconds in a day is not constant\n  // (e.g. it's different in the day of the daylight saving time clock shift)\n\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_MINUTE = 60000;\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the quarters added\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function addQuarters(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  var months = amount * 3;\n  return addMonths(dirtyDate, months);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, amount * 1000);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addDays from \"../addDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  var days = amount * 7;\n  return addDays(dirtyDate, days);\n}", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function addYears(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMonths(dirtyDate, amount * 12);\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var diff = dateLeft.getTime() - dateRight.getTime();\n\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\n}", "/**\n * Days in 1 week.\n *\n * @name daysInWeek\n * @constant\n * @type {number}\n * @default\n */\nexport var daysInWeek = 7;\n/**\n * Maximum allowed time.\n *\n * @name maxTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n/**\n * Milliseconds in 1 minute\n *\n * @name millisecondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInMinute = 60000;\n/**\n * Milliseconds in 1 hour\n *\n * @name millisecondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInHour = 3600000;\n/**\n * Milliseconds in 1 second\n *\n * @name millisecondsInSecond\n * @constant\n * @type {number}\n * @default\n */\n\nexport var millisecondsInSecond = 1000;\n/**\n * Minimum allowed time.\n *\n * @name minTime\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minTime = -maxTime;\n/**\n * Minutes in 1 hour\n *\n * @name minutesInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var minutesInHour = 60;\n/**\n * Months in 1 quarter\n *\n * @name monthsInQuarter\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInQuarter = 3;\n/**\n * Months in 1 year\n *\n * @name monthsInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var monthsInYear = 12;\n/**\n * Quarters in 1 year\n *\n * @name quartersInYear\n * @constant\n * @type {number}\n * @default\n */\n\nexport var quartersInYear = 4;\n/**\n * Seconds in 1 hour\n *\n * @name secondsInHour\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInHour = 3600;\n/**\n * Seconds in 1 minute\n *\n * @name secondsInMinute\n * @constant\n * @type {number}\n * @default\n */\n\nexport var secondsInMinute = 60;", "import requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\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 */\n\nexport default function isDate(value) {\n  requiredArgs(1, arguments);\n  return value instanceof Date || typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}", "import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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]{@link 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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n *   if the first argument is not an instance of Date.\n *   Instead, argument is converted beforehand using `toDate`.\n *\n *   Examples:\n *\n *   | `isValid` argument        | Before v2.0.0 | v2.0.0 onward |\n *   |---------------------------|---------------|---------------|\n *   | `new Date()`              | `true`        | `true`        |\n *   | `new Date('2016-01-01')`  | `true`        | `true`        |\n *   | `new Date('')`            | `false`       | `false`       |\n *   | `new Date(1488370835081)` | `true`        | `true`        |\n *   | `new Date(NaN)`           | `false`       | `false`       |\n *   | `'2016-01-01'`            | `TypeError`   | `false`       |\n *   | `''`                      | `TypeError`   | `false`       |\n *   | `1488370835081`           | `TypeError`   | `true`        |\n *   | `NaN`                     | `TypeError`   | `false`       |\n *\n *   We introduce this change to make *date-fns* consistent with ECMAScript behavior\n *   that try to coerce arguments to the expected type\n *   (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function isValid(dirtyDate) {\n  requiredArgs(1, arguments);\n\n  if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n    return false;\n  }\n\n  var date = toDate(dirtyDate);\n  return !isNaN(Number(date));\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\n\nexport default function differenceInCalendarMonths(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear();\n  var monthDiff = dateLeft.getMonth() - dateRight.getMonth();\n  return yearDiff * 12 + monthDiff;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInCalendarYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  return dateLeft.getFullYear() - dateRight.getFullYear();\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // 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.\n\nfunction compareLocalAsc(dateLeft, dateRight) {\n  var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n\n  if (diff < 0) {\n    return -1;\n  } else if (diff > 0) {\n    return 1; // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff;\n  }\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.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\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 * // 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 * // 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 */\n\n\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareLocalAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n  dateLeft.setDate(dateLeft.getDate() - sign * difference); // 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\n  var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n  var result = sign * (difference - isLastDayNotFull); // Prevent negative zero\n\n  return result === 0 ? 0 : result;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInMilliseconds(dateLeft, dateRight) {\n  requiredArgs(2, arguments);\n  return toDate(dateLeft).getTime() - toDate(dateRight).getTime();\n}", "var roundingMap = {\n  ceil: Math.ceil,\n  round: Math.round,\n  floor: Math.floor,\n  trunc: function (value) {\n    return value < 0 ? Math.ceil(value) : Math.floor(value);\n  } // Math.trunc is not supported by IE\n\n};\nvar defaultRoundingMethod = 'trunc';\nexport function getRoundingMethod(method) {\n  return method ? roundingMap[method] : roundingMap[defaultRoundingMethod];\n}", "import { millisecondsInHour } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInHours(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInHour;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import { millisecondsInMinute } from \"../constants/index.js\";\nimport differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInMinutes(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / millisecondsInMinute;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function endOfDay(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function endOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var month = date.getMonth();\n  date.setFullYear(date.getFullYear(), month + 1, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport endOfDay from \"../endOfDay/index.js\";\nimport endOfMonth from \"../endOfMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * var result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\n\nexport default function isLastDayOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  return endOfDay(date).getTime() === endOfMonth(date).getTime();\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarMonths from \"../differenceInCalendarMonths/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isLastDayOfMonth from \"../isLastDayOfMonth/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight));\n  var result; // Check for the difference of less than month\n\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); // 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\n    var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign; // Check for cases of one full calendar month\n\n    if (isLastDayOfMonth(toDate(dirtyDateLeft)) && difference === 1 && compareAsc(dirtyDateLeft, dateRight) === 1) {\n      isLastMonthNotFull = false;\n    }\n\n    result = sign * (difference - Number(isLastMonthNotFull));\n  } // Prevent negative zero\n\n\n  return result === 0 ? 0 : result;\n}", "import differenceInMonths from \"../differenceInMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of full quarters\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInQuarters(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMonths(dateLeft, dateRight) / 3;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import differenceInMilliseconds from \"../differenceInMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInSeconds(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInMilliseconds(dateLeft, dateRight) / 1000;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import differenceInDays from \"../differenceInDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getRoundingMethod } from \"../_lib/roundingMethods/index.js\";\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.floor(differenceInHours(dateLeft, dateRight)/(7*24))|0`.\n *\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {String} [options.roundingMethod='trunc'] - a rounding method (`ceil`, `floor`, `round` or `trunc`)\n * @returns {Number} the number of full weeks\n * @throws {TypeError} 2 arguments required\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 * // 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 */\n\nexport default function differenceInWeeks(dateLeft, dateRight, options) {\n  requiredArgs(2, arguments);\n  var diff = differenceInDays(dateLeft, dateRight) / 7;\n  return getRoundingMethod(options === null || options === void 0 ? void 0 : options.roundingMethod)(diff);\n}", "import toDate from \"../toDate/index.js\";\nimport differenceInCalendarYears from \"../differenceInCalendarYears/index.js\";\nimport compareAsc from \"../compareAsc/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\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 */\n\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n  requiredArgs(2, arguments);\n  var dateLeft = toDate(dirtyDateLeft);\n  var dateRight = toDate(dirtyDateRight);\n  var sign = compareAsc(dateLeft, dateRight);\n  var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight)); // Set both dates to a valid leap year for accurate comparison when dealing\n  // with leap days\n\n  dateLeft.setFullYear(1584);\n  dateRight.setFullYear(1584); // 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\n  var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign;\n  var result = sign * (difference - Number(isLastYearNotFull)); // Prevent negative zero\n\n  return result === 0 ? 0 : result;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a minute\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function startOfMinute(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setSeconds(0, 0);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function startOfQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var currentMonth = date.getMonth();\n  var month = currentMonth - currentMonth % 3;\n  date.setMonth(month, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function startOfMonth(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function startOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var cleanDate = toDate(dirtyDate);\n  var date = new Date(0);\n  date.setFullYear(cleanDate.getFullYear(), 0, 1);\n  date.setHours(0, 0, 0, 0);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\n\nexport default function endOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getFullYear();\n  date.setFullYear(year + 1, 0, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an hour\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function endOfHour(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMinutes(59, 59, 999);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\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 default function endOfWeek(dirtyDate, dirtyOptions) {\n  requiredArgs(1, arguments);\n  var options = dirtyOptions || {};\n  var locale = options.locale;\n  var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n  var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n  var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n\n  var date = toDate(dirtyDate);\n  var day = date.getDay();\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n  date.setDate(date.getDate() + diff);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a minute\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function endOfMinute(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setSeconds(59, 999);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a quarter\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function endOfQuarter(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var currentMonth = date.getMonth();\n  var month = currentMonth - currentMonth % 3 + 3;\n  date.setMonth(month, 0);\n  date.setHours(23, 59, 59, 999);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a second\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function endOfSecond(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMilliseconds(999);\n  return date;\n}", "var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'less than a second',\n    other: 'less than {{count}} seconds'\n  },\n  xSeconds: {\n    one: '1 second',\n    other: '{{count}} seconds'\n  },\n  halfAMinute: 'half a minute',\n  lessThanXMinutes: {\n    one: 'less than a minute',\n    other: 'less than {{count}} minutes'\n  },\n  xMinutes: {\n    one: '1 minute',\n    other: '{{count}} minutes'\n  },\n  aboutXHours: {\n    one: 'about 1 hour',\n    other: 'about {{count}} hours'\n  },\n  xHours: {\n    one: '1 hour',\n    other: '{{count}} hours'\n  },\n  xDays: {\n    one: '1 day',\n    other: '{{count}} days'\n  },\n  aboutXWeeks: {\n    one: 'about 1 week',\n    other: 'about {{count}} weeks'\n  },\n  xWeeks: {\n    one: '1 week',\n    other: '{{count}} weeks'\n  },\n  aboutXMonths: {\n    one: 'about 1 month',\n    other: 'about {{count}} months'\n  },\n  xMonths: {\n    one: '1 month',\n    other: '{{count}} months'\n  },\n  aboutXYears: {\n    one: 'about 1 year',\n    other: 'about {{count}} years'\n  },\n  xYears: {\n    one: '1 year',\n    other: '{{count}} years'\n  },\n  overXYears: {\n    one: 'over 1 year',\n    other: 'over {{count}} years'\n  },\n  almostXYears: {\n    one: 'almost 1 year',\n    other: 'almost {{count}} years'\n  }\n};\n\nvar formatDistance = function (token, count, options) {\n  var result;\n  var tokenValue = formatDistanceLocale[token];\n\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 !== null && options !== void 0 && 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\nexport default formatDistance;", "export default function buildFormatLongFn(args) {\n  return function () {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    // TODO: Remove String()\n    var width = options.width ? String(options.width) : args.defaultWidth;\n    var format = args.formats[width] || args.formats[args.defaultWidth];\n    return format;\n  };\n}", "import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n};\nvar 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};\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n};\nexport default formatLong;", "var 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\nvar formatRelative = function (token, _date, _baseDate, _options) {\n  return formatRelativeLocale[token];\n};\n\nexport default formatRelative;", "export default function buildLocalizeFn(args) {\n  return function (dirtyIndex, dirtyOptions) {\n    var options = dirtyOptions || {};\n    var context = options.context ? String(options.context) : 'standalone';\n    var valuesArray;\n\n    if (context === 'formatting' && args.formattingValues) {\n      var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n      var width = options.width ? String(options.width) : defaultWidth;\n      valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n    } else {\n      var _defaultWidth = args.defaultWidth;\n\n      var _width = options.width ? String(options.width) : args.defaultWidth;\n\n      valuesArray = args.values[_width] || args.values[_defaultWidth];\n    }\n\n    var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: 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\n    return valuesArray[index];\n  };\n}", "import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n  narrow: ['B', 'A'],\n  abbreviated: ['BC', 'AD'],\n  wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\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.\n\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar 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: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar 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};\nvar 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\nvar ordinalNumber = function (dirtyNumber, _options) {\n  var number = Number(dirtyNumber); // 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  var rem100 = number % 100;\n\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'st';\n\n      case 2:\n        return number + 'nd';\n\n      case 3:\n        return number + 'rd';\n    }\n  }\n\n  return number + 'th';\n};\n\nvar localize = {\n  ordinalNumber: ordinalNumber,\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function (quarter) {\n      return quarter - 1;\n    }\n  }),\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n};\nexport default localize;", "export default function buildMatchFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var width = options.width;\n    var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n    var matchResult = string.match(matchPattern);\n\n    if (!matchResult) {\n      return null;\n    }\n\n    var matchedString = matchResult[0];\n    var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n    var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    }) : findKey(parsePatterns, function (pattern) {\n      return pattern.test(matchedString);\n    });\n    var value;\n    value = args.valueCallback ? args.valueCallback(key) : key;\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}\n\nfunction findKey(object, predicate) {\n  for (var key in object) {\n    if (object.hasOwnProperty(key) && predicate(object[key])) {\n      return key;\n    }\n  }\n\n  return undefined;\n}\n\nfunction findIndex(array, predicate) {\n  for (var key = 0; key < array.length; key++) {\n    if (predicate(array[key])) {\n      return key;\n    }\n  }\n\n  return undefined;\n}", "export default function buildMatchPatternFn(args) {\n  return function (string) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var matchResult = string.match(args.matchPattern);\n    if (!matchResult) return null;\n    var matchedString = matchResult[0];\n    var parseResult = string.match(args.parsePattern);\n    if (!parseResult) return null;\n    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n    value = options.valueCallback ? options.valueCallback(value) : value;\n    var rest = string.slice(matchedString.length);\n    return {\n      value: value,\n      rest: rest\n    };\n  };\n}", "import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar 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};\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar 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};\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar 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};\nvar 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};\nvar 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};\nvar 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};\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function (value) {\n      return parseInt(value, 10);\n    }\n  }),\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function (index) {\n      return index + 1;\n    }\n  }),\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n};\nexport default match;", "import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n  code: 'en-US',\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0\n    /* Sunday */\n    ,\n    firstWeekContainsDate: 1\n  }\n};\nexport default locale;", "import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n  requiredArgs(2, arguments);\n  var amount = toInteger(dirtyAmount);\n  return addMilliseconds(dirtyDate, -amount);\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCDayOfYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var timestamp = date.getTime();\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n  var startOfYearTimestamp = date.getTime();\n  var difference = timestamp - startOfYearTimestamp;\n  return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var weekStartsOn = 1;\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setUTCDate(date.getUTCDate() - diff);\n  date.setUTCHours(0, 0, 0, 0);\n  return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getUTCFullYear();\n  var fourthOfJanuaryOfNextYear = new Date(0);\n  fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n  fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n  var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n  var fourthOfJanuaryOfThisYear = new Date(0);\n  fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n  fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n  var startOfThisYear = startOfUTCISOWeek(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}", "import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n  requiredArgs(1, arguments);\n  var year = getUTCISOWeekYear(dirtyDate);\n  var fourthOfJanuary = new Date(0);\n  fourthOfJanuary.setUTCFullYear(year, 0, 4);\n  fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n  var date = startOfUTCISOWeek(fourthOfJanuary);\n  return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeek(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n  requiredArgs(1, arguments);\n  var options = dirtyOptions || {};\n  var locale = options.locale;\n  var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n  var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n  var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n\n  var date = toDate(dirtyDate);\n  var day = date.getUTCDay();\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n  date.setUTCDate(date.getUTCDate() - diff);\n  date.setUTCHours(0, 0, 0, 0);\n  return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeekYear(dirtyDate, dirtyOptions) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var year = date.getUTCFullYear();\n  var options = dirtyOptions || {};\n  var locale = options.locale;\n  var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n  var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n  var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n\n  var firstWeekOfNextYear = new Date(0);\n  firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n  firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n  var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);\n  var firstWeekOfThisYear = new Date(0);\n  firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n  firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n  var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);\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}", "import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n  requiredArgs(1, arguments);\n  var options = dirtyOptions || {};\n  var locale = options.locale;\n  var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n  var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n  var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n  var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n  var firstWeek = new Date(0);\n  firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n  firstWeek.setUTCHours(0, 0, 0, 0);\n  var date = startOfUTCWeek(firstWeek, dirtyOptions);\n  return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}", "export default function addLeadingZeros(number, targetLength) {\n  var sign = number < 0 ? '-' : '';\n  var output = Math.abs(number).toString();\n\n  while (output.length < targetLength) {\n    output = '0' + output;\n  }\n\n  return sign + output;\n}", "import addLeadingZeros from \"../../addLeadingZeros/index.js\";\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\nvar formatters = {\n  // Year\n  y: function (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    var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n    var year = signedYear > 0 ? signedYear : 1 - signedYear;\n    return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n  },\n  // Month\n  M: function (date, token) {\n    var month = date.getUTCMonth();\n    return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n  },\n  // Day of the month\n  d: function (date, token) {\n    return addLeadingZeros(date.getUTCDate(), token.length);\n  },\n  // AM or PM\n  a: function (date, token) {\n    var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n    switch (token) {\n      case 'a':\n      case 'aa':\n        return dayPeriodEnumValue.toUpperCase();\n\n      case 'aaa':\n        return dayPeriodEnumValue;\n\n      case 'aaaaa':\n        return dayPeriodEnumValue[0];\n\n      case 'aaaa':\n      default:\n        return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n    }\n  },\n  // Hour [1-12]\n  h: function (date, token) {\n    return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n  },\n  // Hour [0-23]\n  H: function (date, token) {\n    return addLeadingZeros(date.getUTCHours(), token.length);\n  },\n  // Minute\n  m: function (date, token) {\n    return addLeadingZeros(date.getUTCMinutes(), token.length);\n  },\n  // Second\n  s: function (date, token) {\n    return addLeadingZeros(date.getUTCSeconds(), token.length);\n  },\n  // Fraction of second\n  S: function (date, token) {\n    var numberOfDigits = token.length;\n    var milliseconds = date.getUTCMilliseconds();\n    var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n    return addLeadingZeros(fractionalSeconds, token.length);\n  }\n};\nexport default formatters;", "import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar 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 * |     | 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\nvar formatters = {\n  // Era\n  G: function (date, token, localize) {\n    var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n    switch (token) {\n      // AD, BC\n      case 'G':\n      case 'GG':\n      case 'GGG':\n        return localize.era(era, {\n          width: 'abbreviated'\n        });\n      // A, B\n\n      case 'GGGGG':\n        return localize.era(era, {\n          width: 'narrow'\n        });\n      // Anno Domini, Before Christ\n\n      case 'GGGG':\n      default:\n        return localize.era(era, {\n          width: 'wide'\n        });\n    }\n  },\n  // Year\n  y: function (date, token, localize) {\n    // Ordinal number\n    if (token === 'yo') {\n      var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n      var year = signedYear > 0 ? signedYear : 1 - signedYear;\n      return localize.ordinalNumber(year, {\n        unit: 'year'\n      });\n    }\n\n    return lightFormatters.y(date, token);\n  },\n  // Local week-numbering year\n  Y: function (date, token, localize, options) {\n    var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n    var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n    if (token === 'YY') {\n      var twoDigitYear = weekYear % 100;\n      return addLeadingZeros(twoDigitYear, 2);\n    } // Ordinal number\n\n\n    if (token === 'Yo') {\n      return localize.ordinalNumber(weekYear, {\n        unit: 'year'\n      });\n    } // Padding\n\n\n    return addLeadingZeros(weekYear, token.length);\n  },\n  // ISO week-numbering year\n  R: function (date, token) {\n    var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n    return addLeadingZeros(isoWeekYear, token.length);\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    var year = date.getUTCFullYear();\n    return addLeadingZeros(year, token.length);\n  },\n  // Quarter\n  Q: function (date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'Q':\n        return String(quarter);\n      // 01, 02, 03, 04\n\n      case 'QQ':\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n\n      case 'Qo':\n        return localize.ordinalNumber(quarter, {\n          unit: 'quarter'\n        });\n      // Q1, Q2, Q3, Q4\n\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\n      case 'QQQQQ':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // 1st quarter, 2nd quarter, ...\n\n      case 'QQQQ':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone quarter\n  q: function (date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'q':\n        return String(quarter);\n      // 01, 02, 03, 04\n\n      case 'qq':\n        return addLeadingZeros(quarter, 2);\n      // 1st, 2nd, 3rd, 4th\n\n      case 'qo':\n        return localize.ordinalNumber(quarter, {\n          unit: 'quarter'\n        });\n      // Q1, Q2, Q3, Q4\n\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\n      case 'qqqqq':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // 1st quarter, 2nd quarter, ...\n\n      case 'qqqq':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // Month\n  M: function (date, token, localize) {\n    var month = date.getUTCMonth();\n\n    switch (token) {\n      case 'M':\n      case 'MM':\n        return lightFormatters.M(date, token);\n      // 1st, 2nd, ..., 12th\n\n      case 'Mo':\n        return localize.ordinalNumber(month + 1, {\n          unit: 'month'\n        });\n      // Jan, Feb, ..., Dec\n\n      case 'MMM':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // J, F, ..., D\n\n      case 'MMMMM':\n        return localize.month(month, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // January, February, ..., December\n\n      case 'MMMM':\n      default:\n        return localize.month(month, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone month\n  L: function (date, token, localize) {\n    var month = date.getUTCMonth();\n\n    switch (token) {\n      // 1, 2, ..., 12\n      case 'L':\n        return String(month + 1);\n      // 01, 02, ..., 12\n\n      case 'LL':\n        return addLeadingZeros(month + 1, 2);\n      // 1st, 2nd, ..., 12th\n\n      case 'Lo':\n        return localize.ordinalNumber(month + 1, {\n          unit: 'month'\n        });\n      // Jan, Feb, ..., Dec\n\n      case 'LLL':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // J, F, ..., D\n\n      case 'LLLLL':\n        return localize.month(month, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // January, February, ..., December\n\n      case 'LLLL':\n      default:\n        return localize.month(month, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // Local week of year\n  w: function (date, token, localize, options) {\n    var week = getUTCWeek(date, options);\n\n    if (token === 'wo') {\n      return localize.ordinalNumber(week, {\n        unit: 'week'\n      });\n    }\n\n    return addLeadingZeros(week, token.length);\n  },\n  // ISO week of year\n  I: function (date, token, localize) {\n    var isoWeek = getUTCISOWeek(date);\n\n    if (token === 'Io') {\n      return localize.ordinalNumber(isoWeek, {\n        unit: 'week'\n      });\n    }\n\n    return addLeadingZeros(isoWeek, token.length);\n  },\n  // Day of the month\n  d: function (date, token, localize) {\n    if (token === 'do') {\n      return localize.ordinalNumber(date.getUTCDate(), {\n        unit: 'date'\n      });\n    }\n\n    return lightFormatters.d(date, token);\n  },\n  // Day of year\n  D: function (date, token, localize) {\n    var dayOfYear = getUTCDayOfYear(date);\n\n    if (token === 'Do') {\n      return localize.ordinalNumber(dayOfYear, {\n        unit: 'dayOfYear'\n      });\n    }\n\n    return addLeadingZeros(dayOfYear, token.length);\n  },\n  // Day of week\n  E: function (date, token, localize) {\n    var dayOfWeek = date.getUTCDay();\n\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\n      case 'EEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n\n      case 'EEEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n\n      case 'EEEE':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Local day of week\n  e: function (date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\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\n      case 'ee':\n        return addLeadingZeros(localDayOfWeek, 2);\n      // 1st, 2nd, ..., 7th\n\n      case 'eo':\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: 'day'\n        });\n\n      case 'eee':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n\n      case 'eeeee':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n\n      case 'eeeeee':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n\n      case 'eeee':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Stand-alone local day of week\n  c: function (date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay();\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case 'c':\n        return String(localDayOfWeek);\n      // Padded numerical value\n\n      case 'cc':\n        return addLeadingZeros(localDayOfWeek, token.length);\n      // 1st, 2nd, ..., 7th\n\n      case 'co':\n        return localize.ordinalNumber(localDayOfWeek, {\n          unit: 'day'\n        });\n\n      case 'ccc':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'standalone'\n        });\n      // T\n\n      case 'ccccc':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'standalone'\n        });\n      // Tu\n\n      case 'cccccc':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'standalone'\n        });\n      // Tuesday\n\n      case 'cccc':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'standalone'\n        });\n    }\n  },\n  // ISO day of week\n  i: function (date, token, localize) {\n    var dayOfWeek = date.getUTCDay();\n    var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n    switch (token) {\n      // 2\n      case 'i':\n        return String(isoDayOfWeek);\n      // 02\n\n      case 'ii':\n        return addLeadingZeros(isoDayOfWeek, token.length);\n      // 2nd\n\n      case 'io':\n        return localize.ordinalNumber(isoDayOfWeek, {\n          unit: 'day'\n        });\n      // Tue\n\n      case 'iii':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        });\n      // T\n\n      case 'iiiii':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n      // Tu\n\n      case 'iiiiii':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        });\n      // Tuesday\n\n      case 'iiii':\n      default:\n        return localize.day(dayOfWeek, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // AM or PM\n  a: function (date, token, localize) {\n    var hours = date.getUTCHours();\n    var 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\n      case 'aaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        }).toLowerCase();\n\n      case 'aaaaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n\n      case 'aaaa':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // AM, PM, midnight, noon\n  b: function (date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue;\n\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\n      case 'bbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        }).toLowerCase();\n\n      case 'bbbbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n\n      case 'bbbb':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // in the morning, in the afternoon, in the evening, at night\n  B: function (date, token, localize) {\n    var hours = date.getUTCHours();\n    var dayPeriodEnumValue;\n\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\n      case 'BBBBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        });\n\n      case 'BBBB':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        });\n    }\n  },\n  // Hour [1-12]\n  h: function (date, token, localize) {\n    if (token === 'ho') {\n      var hours = date.getUTCHours() % 12;\n      if (hours === 0) hours = 12;\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n\n    return lightFormatters.h(date, token);\n  },\n  // Hour [0-23]\n  H: function (date, token, localize) {\n    if (token === 'Ho') {\n      return localize.ordinalNumber(date.getUTCHours(), {\n        unit: 'hour'\n      });\n    }\n\n    return lightFormatters.H(date, token);\n  },\n  // Hour [0-11]\n  K: function (date, token, localize) {\n    var hours = date.getUTCHours() % 12;\n\n    if (token === 'Ko') {\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n  // Hour [1-24]\n  k: function (date, token, localize) {\n    var hours = date.getUTCHours();\n    if (hours === 0) hours = 24;\n\n    if (token === 'ko') {\n      return localize.ordinalNumber(hours, {\n        unit: 'hour'\n      });\n    }\n\n    return addLeadingZeros(hours, token.length);\n  },\n  // Minute\n  m: function (date, token, localize) {\n    if (token === 'mo') {\n      return localize.ordinalNumber(date.getUTCMinutes(), {\n        unit: 'minute'\n      });\n    }\n\n    return lightFormatters.m(date, token);\n  },\n  // Second\n  s: function (date, token, localize) {\n    if (token === 'so') {\n      return localize.ordinalNumber(date.getUTCSeconds(), {\n        unit: 'second'\n      });\n    }\n\n    return lightFormatters.s(date, token);\n  },\n  // Fraction of second\n  S: function (date, token) {\n    return lightFormatters.S(date, token);\n  },\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function (date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.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      // 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\n      case 'XXXX':\n      case 'XX':\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\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\n      case 'XXXXX':\n      case 'XXX': // Hours and minutes with `:` delimiter\n\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, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n\n    switch (token) {\n      // Hours and optional minutes\n      case 'x':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset);\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\n      case 'xxxx':\n      case 'xx':\n        // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset);\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\n      case 'xxxxx':\n      case 'xxx': // Hours and minutes with `:` delimiter\n\n      default:\n        return formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (GMT)\n  O: function (date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case 'O':\n      case 'OO':\n      case 'OOO':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n      // Long\n\n      case 'OOOO':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Timezone (specific non-location)\n  z: function (date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timezoneOffset = originalDate.getTimezoneOffset();\n\n    switch (token) {\n      // Short\n      case 'z':\n      case 'zz':\n      case 'zzz':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n      // Long\n\n      case 'zzzz':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':');\n    }\n  },\n  // Seconds timestamp\n  t: function (date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timestamp = Math.floor(originalDate.getTime() / 1000);\n    return addLeadingZeros(timestamp, token.length);\n  },\n  // Milliseconds timestamp\n  T: function (date, token, _localize, options) {\n    var originalDate = options._originalDate || date;\n    var timestamp = originalDate.getTime();\n    return addLeadingZeros(timestamp, token.length);\n  }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = Math.floor(absOffset / 60);\n  var minutes = absOffset % 60;\n\n  if (minutes === 0) {\n    return sign + String(hours);\n  }\n\n  var delimiter = dirtyDelimiter || '';\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n  if (offset % 60 === 0) {\n    var sign = offset > 0 ? '-' : '+';\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n  }\n\n  return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n  var delimiter = dirtyDelimiter || '';\n  var sign = offset > 0 ? '-' : '+';\n  var absOffset = Math.abs(offset);\n  var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n  var minutes = addLeadingZeros(absOffset % 60, 2);\n  return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;", "function dateLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'P':\n      return formatLong.date({\n        width: 'short'\n      });\n\n    case 'PP':\n      return formatLong.date({\n        width: 'medium'\n      });\n\n    case 'PPP':\n      return formatLong.date({\n        width: 'long'\n      });\n\n    case 'PPPP':\n    default:\n      return formatLong.date({\n        width: 'full'\n      });\n  }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'p':\n      return formatLong.time({\n        width: 'short'\n      });\n\n    case 'pp':\n      return formatLong.time({\n        width: 'medium'\n      });\n\n    case 'ppp':\n      return formatLong.time({\n        width: 'long'\n      });\n\n    case 'pppp':\n    default:\n      return formatLong.time({\n        width: 'full'\n      });\n  }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n  var matchResult = pattern.match(/(P+)(p+)?/) || [];\n  var datePattern = matchResult[1];\n  var timePattern = matchResult[2];\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong);\n  }\n\n  var dateTimeFormat;\n\n  switch (datePattern) {\n    case 'P':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'short'\n      });\n      break;\n\n    case 'PP':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'medium'\n      });\n      break;\n\n    case 'PPP':\n      dateTimeFormat = formatLong.dateTime({\n        width: 'long'\n      });\n      break;\n\n    case 'PPPP':\n    default:\n      dateTimeFormat = formatLong.dateTime({\n        width: 'full'\n      });\n      break;\n  }\n\n  return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter\n};\nexport default longFormatters;", "var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n  return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n  return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n  if (token === 'YYYY') {\n    throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n  } else if (token === 'YY') {\n    throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n  } else if (token === 'D') {\n    throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n  } else if (token === 'DD') {\n    throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n  }\n}", "import isValid from \"../isValid/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // 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\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\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://git.io/fxCyr\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]{@link https://date-fns.org/docs/getISOWeekYear}\n *    and [getWeekYear]{@link 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://git.io/fxCyr\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://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   format(new Date(2016, 0, 1))\n *\n *   // v2.0.0 onward\n *   format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n *   ```\n *\n * - New format string API for `format` function\n *   which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n *   See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var 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 * var 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 * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n  requiredArgs(2, arguments);\n  var formatStr = String(dirtyFormatStr);\n  var options = dirtyOptions || {};\n  var locale = options.locale || defaultLocale;\n  var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n  var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n  var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n\n  var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n  var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n  var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property');\n  }\n\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property');\n  }\n\n  var originalDate = toDate(dirtyDate);\n\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value');\n  } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n  var utcDate = subMilliseconds(originalDate, timezoneOffset);\n  var formatterOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale,\n    _originalDate: originalDate\n  };\n  var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n\n    if (firstCharacter === 'p' || firstCharacter === 'P') {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong, formatterOptions);\n    }\n\n    return substring;\n  }).join('').match(formattingTokensRegExp).map(function (substring) {\n    // Replace two single quote characters with one single quote character\n    if (substring === \"''\") {\n      return \"'\";\n    }\n\n    var firstCharacter = substring[0];\n\n    if (firstCharacter === \"'\") {\n      return cleanEscapedString(substring);\n    }\n\n    var formatter = formatters[firstCharacter];\n\n    if (formatter) {\n      if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {\n        throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n      }\n\n      if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {\n        throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n      }\n\n      return formatter(utcDate, substring, locale.localize, formatterOptions);\n    }\n\n    if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n      throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n    }\n\n    return substring;\n  }).join('');\n  return result;\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "export default function assign(target, dirtyObject) {\n  if (target == null) {\n    throw new TypeError('assign requires that input parameter not be null or undefined');\n  }\n\n  dirtyObject = dirtyObject || {};\n\n  for (var property in dirtyObject) {\n    if (Object.prototype.hasOwnProperty.call(dirtyObject, property)) {\n      target[property] = dirtyObject[property];\n    }\n  }\n\n  return target;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n  requiredArgs(2, arguments);\n  var options = dirtyOptions || {};\n  var locale = options.locale;\n  var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n  var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n  var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n\n  var date = toDate(dirtyDate);\n  var day = toInteger(dirtyDay);\n  var currentDay = date.getUTCDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}", "import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n  requiredArgs(2, arguments);\n  var day = toInteger(dirtyDay);\n\n  if (day % 7 === 0) {\n    day = day - 7;\n  }\n\n  var weekStartsOn = 1;\n  var date = toDate(dirtyDate);\n  var currentDay = date.getUTCDay();\n  var remainder = day % 7;\n  var dayIndex = (remainder + 7) % 7;\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n}", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCISOWeek from \"../getUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var isoWeek = toInteger(dirtyISOWeek);\n  var diff = getUTCISOWeek(date) - isoWeek;\n  date.setUTCDate(date.getUTCDate() - diff * 7);\n  return date;\n}", "import toInteger from \"../toInteger/index.js\";\nimport toDate from \"../../toDate/index.js\";\nimport getUTCWeek from \"../getUTCWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n  requiredArgs(2, arguments);\n  var date = toDate(dirtyDate);\n  var week = toInteger(dirtyWeek);\n  var diff = getUTCWeek(date, options) - week;\n  date.setUTCDate(date.getUTCDate() - diff * 7);\n  return date;\n}", "import getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport setUTCDay from \"../../../_lib/setUTCDay/index.js\";\nimport setUTCISODay from \"../../../_lib/setUTCISODay/index.js\";\nimport setUTCISOWeek from \"../../../_lib/setUTCISOWeek/index.js\";\nimport setUTCWeek from \"../../../_lib/setUTCWeek/index.js\";\nimport startOfUTCISOWeek from \"../../../_lib/startOfUTCISOWeek/index.js\";\nimport startOfUTCWeek from \"../../../_lib/startOfUTCWeek/index.js\";\nvar MILLISECONDS_IN_HOUR = 3600000;\nvar MILLISECONDS_IN_MINUTE = 60000;\nvar MILLISECONDS_IN_SECOND = 1000;\nvar numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/,\n  // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/,\n  // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/,\n  // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/,\n  // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/,\n  // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/,\n  // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/,\n  // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/,\n  // 0 to 12\n  minute: /^[0-5]?\\d/,\n  // 0 to 59\n  second: /^[0-5]?\\d/,\n  // 0 to 59\n  singleDigit: /^\\d/,\n  // 0 to 9\n  twoDigits: /^\\d{1,2}/,\n  // 0 to 99\n  threeDigits: /^\\d{1,3}/,\n  // 0 to 999\n  fourDigits: /^\\d{1,4}/,\n  // 0 to 9999\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/,\n  // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/,\n  // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/,\n  // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n\n};\nvar 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\nfunction parseNumericPattern(pattern, string, valueCallback) {\n  var matchResult = string.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  }\n\n  var value = parseInt(matchResult[0], 10);\n  return {\n    value: valueCallback ? valueCallback(value) : value,\n    rest: string.slice(matchResult[0].length)\n  };\n}\n\nfunction parseTimezonePattern(pattern, string) {\n  var matchResult = string.match(pattern);\n\n  if (!matchResult) {\n    return null;\n  } // Input is 'Z'\n\n\n  if (matchResult[0] === 'Z') {\n    return {\n      value: 0,\n      rest: string.slice(1)\n    };\n  }\n\n  var sign = matchResult[1] === '+' ? 1 : -1;\n  var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;\n  var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;\n  var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;\n  return {\n    value: sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * MILLISECONDS_IN_SECOND),\n    rest: string.slice(matchResult[0].length)\n  };\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n  return parseNumericPattern(numericPatterns.anyDigitsSigned, string, valueCallback);\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigit, string, valueCallback);\n\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigits, string, valueCallback);\n\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigits, string, valueCallback);\n\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigits, string, valueCallback);\n\n    default:\n      return parseNumericPattern(new RegExp('^\\\\d{1,' + n + '}'), string, valueCallback);\n  }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(numericPatterns.singleDigitSigned, string, valueCallback);\n\n    case 2:\n      return parseNumericPattern(numericPatterns.twoDigitsSigned, string, valueCallback);\n\n    case 3:\n      return parseNumericPattern(numericPatterns.threeDigitsSigned, string, valueCallback);\n\n    case 4:\n      return parseNumericPattern(numericPatterns.fourDigitsSigned, string, valueCallback);\n\n    default:\n      return parseNumericPattern(new RegExp('^-?\\\\d{1,' + n + '}'), string, valueCallback);\n  }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n  switch (enumValue) {\n    case 'morning':\n      return 4;\n\n    case 'evening':\n      return 17;\n\n    case 'pm':\n    case 'noon':\n    case 'afternoon':\n      return 12;\n\n    case 'am':\n    case 'midnight':\n    case 'night':\n    default:\n      return 0;\n  }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  var isCommonEra = currentYear > 0; // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n\n  var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;\n  var result;\n\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100;\n  } else {\n    var rangeEnd = absCurrentYear + 50;\n    var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;\n    var isPreviousCentury = twoDigitYear >= rangeEnd % 100;\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);\n  }\n\n  return isCommonEra ? result : 1 - result;\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // User for validation\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;\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\n\nvar parsers = {\n  // Era\n  G: {\n    priority: 140,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        // AD, BC\n        case 'G':\n        case 'GG':\n        case 'GGG':\n          return match.era(string, {\n            width: 'abbreviated'\n          }) || match.era(string, {\n            width: 'narrow'\n          });\n        // A, B\n\n        case 'GGGGG':\n          return match.era(string, {\n            width: 'narrow'\n          });\n        // Anno Domini, Before Christ\n\n        case 'GGGG':\n        default:\n          return match.era(string, {\n            width: 'wide'\n          }) || match.era(string, {\n            width: 'abbreviated'\n          }) || match.era(string, {\n            width: 'narrow'\n          });\n      }\n    },\n    set: function (date, flags, value, _options) {\n      flags.era = value;\n      date.setUTCFullYear(value, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['R', 'u', 't', 'T']\n  },\n  // Year\n  y: {\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 |\n    priority: 130,\n    parse: function (string, token, match, _options) {\n      var valueCallback = function (year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'yy'\n        };\n      };\n\n      switch (token) {\n        case 'y':\n          return parseNDigits(4, string, valueCallback);\n\n        case 'yo':\n          return match.ordinalNumber(string, {\n            unit: 'year',\n            valueCallback: valueCallback\n          });\n\n        default:\n          return parseNDigits(token.length, string, valueCallback);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value.isTwoDigitYear || value.year > 0;\n    },\n    set: function (date, flags, value, _options) {\n      var currentYear = date.getUTCFullYear();\n\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n        date.setUTCFullYear(normalizedTwoDigitYear, 0, 1);\n        date.setUTCHours(0, 0, 0, 0);\n        return date;\n      }\n\n      var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n      date.setUTCFullYear(year, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['Y', 'R', 'u', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n  },\n  // Local week-numbering year\n  Y: {\n    priority: 130,\n    parse: function (string, token, match, _options) {\n      var valueCallback = function (year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'YY'\n        };\n      };\n\n      switch (token) {\n        case 'Y':\n          return parseNDigits(4, string, valueCallback);\n\n        case 'Yo':\n          return match.ordinalNumber(string, {\n            unit: 'year',\n            valueCallback: valueCallback\n          });\n\n        default:\n          return parseNDigits(token.length, string, valueCallback);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value.isTwoDigitYear || value.year > 0;\n    },\n    set: function (date, flags, value, options) {\n      var currentYear = getUTCWeekYear(date, options);\n\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(value.year, currentYear);\n        date.setUTCFullYear(normalizedTwoDigitYear, 0, options.firstWeekContainsDate);\n        date.setUTCHours(0, 0, 0, 0);\n        return startOfUTCWeek(date, options);\n      }\n\n      var year = !('era' in flags) || flags.era === 1 ? value.year : 1 - value.year;\n      date.setUTCFullYear(year, 0, options.firstWeekContainsDate);\n      date.setUTCHours(0, 0, 0, 0);\n      return startOfUTCWeek(date, options);\n    },\n    incompatibleTokens: ['y', 'R', 'u', 'Q', 'q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n  },\n  // ISO week-numbering year\n  R: {\n    priority: 130,\n    parse: function (string, token, _match, _options) {\n      if (token === 'R') {\n        return parseNDigitsSigned(4, string);\n      }\n\n      return parseNDigitsSigned(token.length, string);\n    },\n    set: function (_date, _flags, value, _options) {\n      var firstWeekOfYear = new Date(0);\n      firstWeekOfYear.setUTCFullYear(value, 0, 4);\n      firstWeekOfYear.setUTCHours(0, 0, 0, 0);\n      return startOfUTCISOWeek(firstWeekOfYear);\n    },\n    incompatibleTokens: ['G', 'y', 'Y', 'u', 'Q', 'q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n  },\n  // Extended year\n  u: {\n    priority: 130,\n    parse: function (string, token, _match, _options) {\n      if (token === 'u') {\n        return parseNDigitsSigned(4, string);\n      }\n\n      return parseNDigitsSigned(token.length, string);\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCFullYear(value, 0, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['G', 'y', 'Y', 'R', 'w', 'I', 'i', 'e', 'c', 't', 'T']\n  },\n  // Quarter\n  Q: {\n    priority: 120,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'Q':\n        case 'QQ':\n          // 01, 02, 03, 04\n          return parseNDigits(token.length, string);\n        // 1st, 2nd, 3rd, 4th\n\n        case 'Qo':\n          return match.ordinalNumber(string, {\n            unit: 'quarter'\n          });\n        // Q1, Q2, Q3, Q4\n\n        case 'QQQ':\n          return match.quarter(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.quarter(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n        case 'QQQQQ':\n          return match.quarter(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // 1st quarter, 2nd quarter, ...\n\n        case 'QQQQ':\n        default:\n          return match.quarter(string, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.quarter(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.quarter(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 1 && value <= 4;\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCMonth((value - 1) * 3, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['Y', 'R', 'q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n  },\n  // Stand-alone quarter\n  q: {\n    priority: 120,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'q':\n        case 'qq':\n          // 01, 02, 03, 04\n          return parseNDigits(token.length, string);\n        // 1st, 2nd, 3rd, 4th\n\n        case 'qo':\n          return match.ordinalNumber(string, {\n            unit: 'quarter'\n          });\n        // Q1, Q2, Q3, Q4\n\n        case 'qqq':\n          return match.quarter(string, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.quarter(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n        case 'qqqqq':\n          return match.quarter(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // 1st quarter, 2nd quarter, ...\n\n        case 'qqqq':\n        default:\n          return match.quarter(string, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.quarter(string, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.quarter(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 1 && value <= 4;\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCMonth((value - 1) * 3, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['Y', 'R', 'Q', 'M', 'L', 'w', 'I', 'd', 'D', 'i', 'e', 'c', 't', 'T']\n  },\n  // Month\n  M: {\n    priority: 110,\n    parse: function (string, token, match, _options) {\n      var valueCallback = function (value) {\n        return value - 1;\n      };\n\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'M':\n          return parseNumericPattern(numericPatterns.month, string, valueCallback);\n        // 01, 02, ..., 12\n\n        case 'MM':\n          return parseNDigits(2, string, valueCallback);\n        // 1st, 2nd, ..., 12th\n\n        case 'Mo':\n          return match.ordinalNumber(string, {\n            unit: 'month',\n            valueCallback: valueCallback\n          });\n        // Jan, Feb, ..., Dec\n\n        case 'MMM':\n          return match.month(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.month(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // J, F, ..., D\n\n        case 'MMMMM':\n          return match.month(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // January, February, ..., December\n\n        case 'MMMM':\n        default:\n          return match.month(string, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.month(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.month(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 11;\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCMonth(value, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['Y', 'R', 'q', 'Q', 'L', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n  },\n  // Stand-alone month\n  L: {\n    priority: 110,\n    parse: function (string, token, match, _options) {\n      var valueCallback = function (value) {\n        return value - 1;\n      };\n\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'L':\n          return parseNumericPattern(numericPatterns.month, string, valueCallback);\n        // 01, 02, ..., 12\n\n        case 'LL':\n          return parseNDigits(2, string, valueCallback);\n        // 1st, 2nd, ..., 12th\n\n        case 'Lo':\n          return match.ordinalNumber(string, {\n            unit: 'month',\n            valueCallback: valueCallback\n          });\n        // Jan, Feb, ..., Dec\n\n        case 'LLL':\n          return match.month(string, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.month(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // J, F, ..., D\n\n        case 'LLLLL':\n          return match.month(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // January, February, ..., December\n\n        case 'LLLL':\n        default:\n          return match.month(string, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.month(string, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.month(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 11;\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCMonth(value, 1);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n  },\n  // Local week of year\n  w: {\n    priority: 100,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'w':\n          return parseNumericPattern(numericPatterns.week, string);\n\n        case 'wo':\n          return match.ordinalNumber(string, {\n            unit: 'week'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 1 && value <= 53;\n    },\n    set: function (date, _flags, value, options) {\n      return startOfUTCWeek(setUTCWeek(date, value, options), options);\n    },\n    incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'i', 't', 'T']\n  },\n  // ISO week of year\n  I: {\n    priority: 100,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'I':\n          return parseNumericPattern(numericPatterns.week, string);\n\n        case 'Io':\n          return match.ordinalNumber(string, {\n            unit: 'week'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 1 && value <= 53;\n    },\n    set: function (date, _flags, value, options) {\n      return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options);\n    },\n    incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'e', 'c', 't', 'T']\n  },\n  // Day of the month\n  d: {\n    priority: 90,\n    subPriority: 1,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'd':\n          return parseNumericPattern(numericPatterns.date, string);\n\n        case 'do':\n          return match.ordinalNumber(string, {\n            unit: 'date'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (date, value, _options) {\n      var year = date.getUTCFullYear();\n      var isLeapYear = isLeapYearIndex(year);\n      var month = date.getUTCMonth();\n\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    set: function (date, _flags, value, _options) {\n      date.setUTCDate(value);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['Y', 'R', 'q', 'Q', 'w', 'I', 'D', 'i', 'e', 'c', 't', 'T']\n  },\n  // Day of year\n  D: {\n    priority: 90,\n    subPriority: 1,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'D':\n        case 'DD':\n          return parseNumericPattern(numericPatterns.dayOfYear, string);\n\n        case 'Do':\n          return match.ordinalNumber(string, {\n            unit: 'date'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (date, value, _options) {\n      var year = date.getUTCFullYear();\n      var isLeapYear = isLeapYearIndex(year);\n\n      if (isLeapYear) {\n        return value >= 1 && value <= 366;\n      } else {\n        return value >= 1 && value <= 365;\n      }\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCMonth(0, value);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['Y', 'R', 'q', 'Q', 'M', 'L', 'w', 'I', 'd', 'E', 'i', 'e', 'c', 't', 'T']\n  },\n  // Day of week\n  E: {\n    priority: 90,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        // Tue\n        case 'E':\n        case 'EE':\n        case 'EEE':\n          return match.day(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // T\n\n        case 'EEEEE':\n          return match.day(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tu\n\n        case 'EEEEEE':\n          return match.day(string, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tuesday\n\n        case 'EEEE':\n        default:\n          return match.day(string, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 6;\n    },\n    set: function (date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['D', 'i', 'e', 'c', 't', 'T']\n  },\n  // Local day of week\n  e: {\n    priority: 90,\n    parse: function (string, token, match, options) {\n      var valueCallback = function (value) {\n        var 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':\n          // 03\n          return parseNDigits(token.length, string, valueCallback);\n        // 3rd\n\n        case 'eo':\n          return match.ordinalNumber(string, {\n            unit: 'day',\n            valueCallback: valueCallback\n          });\n        // Tue\n\n        case 'eee':\n          return match.day(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // T\n\n        case 'eeeee':\n          return match.day(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tu\n\n        case 'eeeeee':\n          return match.day(string, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n        // Tuesday\n\n        case 'eeee':\n        default:\n          return match.day(string, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'short',\n            context: 'formatting'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 6;\n    },\n    set: function (date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'c', 't', 'T']\n  },\n  // Stand-alone local day of week\n  c: {\n    priority: 90,\n    parse: function (string, token, match, options) {\n      var valueCallback = function (value) {\n        var 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':\n          // 03\n          return parseNDigits(token.length, string, valueCallback);\n        // 3rd\n\n        case 'co':\n          return match.ordinalNumber(string, {\n            unit: 'day',\n            valueCallback: valueCallback\n          });\n        // Tue\n\n        case 'ccc':\n          return match.day(string, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.day(string, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // T\n\n        case 'ccccc':\n          return match.day(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // Tu\n\n        case 'cccccc':\n          return match.day(string, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n        // Tuesday\n\n        case 'cccc':\n        default:\n          return match.day(string, {\n            width: 'wide',\n            context: 'standalone'\n          }) || match.day(string, {\n            width: 'abbreviated',\n            context: 'standalone'\n          }) || match.day(string, {\n            width: 'short',\n            context: 'standalone'\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'standalone'\n          });\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 6;\n    },\n    set: function (date, _flags, value, options) {\n      date = setUTCDay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['y', 'R', 'u', 'q', 'Q', 'M', 'L', 'I', 'd', 'D', 'E', 'i', 'e', 't', 'T']\n  },\n  // ISO day of week\n  i: {\n    priority: 90,\n    parse: function (string, token, match, _options) {\n      var valueCallback = function (value) {\n        if (value === 0) {\n          return 7;\n        }\n\n        return value;\n      };\n\n      switch (token) {\n        // 2\n        case 'i':\n        case 'ii':\n          // 02\n          return parseNDigits(token.length, string);\n        // 2nd\n\n        case 'io':\n          return match.ordinalNumber(string, {\n            unit: 'day'\n          });\n        // Tue\n\n        case 'iii':\n          return match.day(string, {\n            width: 'abbreviated',\n            context: 'formatting',\n            valueCallback: valueCallback\n          }) || match.day(string, {\n            width: 'short',\n            context: 'formatting',\n            valueCallback: valueCallback\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting',\n            valueCallback: valueCallback\n          });\n        // T\n\n        case 'iiiii':\n          return match.day(string, {\n            width: 'narrow',\n            context: 'formatting',\n            valueCallback: valueCallback\n          });\n        // Tu\n\n        case 'iiiiii':\n          return match.day(string, {\n            width: 'short',\n            context: 'formatting',\n            valueCallback: valueCallback\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting',\n            valueCallback: valueCallback\n          });\n        // Tuesday\n\n        case 'iiii':\n        default:\n          return match.day(string, {\n            width: 'wide',\n            context: 'formatting',\n            valueCallback: valueCallback\n          }) || match.day(string, {\n            width: 'abbreviated',\n            context: 'formatting',\n            valueCallback: valueCallback\n          }) || match.day(string, {\n            width: 'short',\n            context: 'formatting',\n            valueCallback: valueCallback\n          }) || match.day(string, {\n            width: 'narrow',\n            context: 'formatting',\n            valueCallback: valueCallback\n          });\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 1 && value <= 7;\n    },\n    set: function (date, _flags, value, options) {\n      date = setUTCISODay(date, value, options);\n      date.setUTCHours(0, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['y', 'Y', 'u', 'q', 'Q', 'M', 'L', 'w', 'd', 'D', 'E', 'e', 'c', 't', 'T']\n  },\n  // AM or PM\n  a: {\n    priority: 80,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'a':\n        case 'aa':\n        case 'aaa':\n          return match.dayPeriod(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n\n        case 'aaaaa':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n\n        case 'aaaa':\n        default:\n          return match.dayPeriod(string, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['b', 'B', 'H', 'k', 't', 'T']\n  },\n  // AM, PM, midnight\n  b: {\n    priority: 80,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'b':\n        case 'bb':\n        case 'bbb':\n          return match.dayPeriod(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n\n        case 'bbbbb':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n\n        case 'bbbb':\n        default:\n          return match.dayPeriod(string, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['a', 'B', 'H', 'k', 't', 'T']\n  },\n  // in the morning, in the afternoon, in the evening, at night\n  B: {\n    priority: 80,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'B':\n        case 'BB':\n        case 'BBB':\n          return match.dayPeriod(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n\n        case 'BBBBB':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n\n        case 'BBBB':\n        default:\n          return match.dayPeriod(string, {\n            width: 'wide',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'abbreviated',\n            context: 'formatting'\n          }) || match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          });\n      }\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['a', 'b', 't', 'T']\n  },\n  // Hour [1-12]\n  h: {\n    priority: 70,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'h':\n          return parseNumericPattern(numericPatterns.hour12h, string);\n\n        case 'ho':\n          return match.ordinalNumber(string, {\n            unit: 'hour'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 1 && value <= 12;\n    },\n    set: function (date, _flags, value, _options) {\n      var isPM = date.getUTCHours() >= 12;\n\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0);\n      } else if (!isPM && value === 12) {\n        date.setUTCHours(0, 0, 0, 0);\n      } else {\n        date.setUTCHours(value, 0, 0, 0);\n      }\n\n      return date;\n    },\n    incompatibleTokens: ['H', 'K', 'k', 't', 'T']\n  },\n  // Hour [0-23]\n  H: {\n    priority: 70,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'H':\n          return parseNumericPattern(numericPatterns.hour23h, string);\n\n        case 'Ho':\n          return match.ordinalNumber(string, {\n            unit: 'hour'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 23;\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCHours(value, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['a', 'b', 'h', 'K', 'k', 't', 'T']\n  },\n  // Hour [0-11]\n  K: {\n    priority: 70,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'K':\n          return parseNumericPattern(numericPatterns.hour11h, string);\n\n        case 'Ko':\n          return match.ordinalNumber(string, {\n            unit: 'hour'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 11;\n    },\n    set: function (date, _flags, value, _options) {\n      var isPM = date.getUTCHours() >= 12;\n\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0);\n      } else {\n        date.setUTCHours(value, 0, 0, 0);\n      }\n\n      return date;\n    },\n    incompatibleTokens: ['h', 'H', 'k', 't', 'T']\n  },\n  // Hour [1-24]\n  k: {\n    priority: 70,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'k':\n          return parseNumericPattern(numericPatterns.hour24h, string);\n\n        case 'ko':\n          return match.ordinalNumber(string, {\n            unit: 'hour'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 1 && value <= 24;\n    },\n    set: function (date, _flags, value, _options) {\n      var hours = value <= 24 ? value % 24 : value;\n      date.setUTCHours(hours, 0, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['a', 'b', 'h', 'H', 'K', 't', 'T']\n  },\n  // Minute\n  m: {\n    priority: 60,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 'm':\n          return parseNumericPattern(numericPatterns.minute, string);\n\n        case 'mo':\n          return match.ordinalNumber(string, {\n            unit: 'minute'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 59;\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCMinutes(value, 0, 0);\n      return date;\n    },\n    incompatibleTokens: ['t', 'T']\n  },\n  // Second\n  s: {\n    priority: 50,\n    parse: function (string, token, match, _options) {\n      switch (token) {\n        case 's':\n          return parseNumericPattern(numericPatterns.second, string);\n\n        case 'so':\n          return match.ordinalNumber(string, {\n            unit: 'second'\n          });\n\n        default:\n          return parseNDigits(token.length, string);\n      }\n    },\n    validate: function (_date, value, _options) {\n      return value >= 0 && value <= 59;\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCSeconds(value, 0);\n      return date;\n    },\n    incompatibleTokens: ['t', 'T']\n  },\n  // Fraction of second\n  S: {\n    priority: 30,\n    parse: function (string, token, _match, _options) {\n      var valueCallback = function (value) {\n        return Math.floor(value * Math.pow(10, -token.length + 3));\n      };\n\n      return parseNDigits(token.length, string, valueCallback);\n    },\n    set: function (date, _flags, value, _options) {\n      date.setUTCMilliseconds(value);\n      return date;\n    },\n    incompatibleTokens: ['t', 'T']\n  },\n  // Timezone (ISO-8601. +00:00 is `'Z'`)\n  X: {\n    priority: 10,\n    parse: function (string, token, _match, _options) {\n      switch (token) {\n        case 'X':\n          return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n        case 'XX':\n          return parseTimezonePattern(timezonePatterns.basic, string);\n\n        case 'XXXX':\n          return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n        case 'XXXXX':\n          return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n        case 'XXX':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, string);\n      }\n    },\n    set: function (date, flags, value, _options) {\n      if (flags.timestampIsSet) {\n        return date;\n      }\n\n      return new Date(date.getTime() - value);\n    },\n    incompatibleTokens: ['t', 'T', 'x']\n  },\n  // Timezone (ISO-8601)\n  x: {\n    priority: 10,\n    parse: function (string, token, _match, _options) {\n      switch (token) {\n        case 'x':\n          return parseTimezonePattern(timezonePatterns.basicOptionalMinutes, string);\n\n        case 'xx':\n          return parseTimezonePattern(timezonePatterns.basic, string);\n\n        case 'xxxx':\n          return parseTimezonePattern(timezonePatterns.basicOptionalSeconds, string);\n\n        case 'xxxxx':\n          return parseTimezonePattern(timezonePatterns.extendedOptionalSeconds, string);\n\n        case 'xxx':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, string);\n      }\n    },\n    set: function (date, flags, value, _options) {\n      if (flags.timestampIsSet) {\n        return date;\n      }\n\n      return new Date(date.getTime() - value);\n    },\n    incompatibleTokens: ['t', 'T', 'X']\n  },\n  // Seconds timestamp\n  t: {\n    priority: 40,\n    parse: function (string, _token, _match, _options) {\n      return parseAnyDigitsSigned(string);\n    },\n    set: function (_date, _flags, value, _options) {\n      return [new Date(value * 1000), {\n        timestampIsSet: true\n      }];\n    },\n    incompatibleTokens: '*'\n  },\n  // Milliseconds timestamp\n  T: {\n    priority: 20,\n    parse: function (string, _token, _match, _options) {\n      return parseAnyDigitsSigned(string);\n    },\n    set: function (_date, _flags, value, _options) {\n      return [new Date(value), {\n        timestampIsSet: true\n      }];\n    },\n    incompatibleTokens: '*'\n  }\n};\nexport default parsers;", "import defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport assign from \"../_lib/assign/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport parsers from \"./_lib/parsers/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar TIMEZONE_UNIT_PRIORITY = 10; // 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\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar notWhitespaceRegExp = /\\S/;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\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://git.io/fxCyr\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]{@link https://date-fns.org/docs/setISOWeekYear}\n *    and [setWeekYear]{@link 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://git.io/fxCyr\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://git.io/fxCyr\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n *   Now `parse` is a new function which parses a string using a provided format.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   parse('2016-01-01')\n *\n *   // v2.0.0 onward (toDate no longer accepts a string)\n *   toDate(1392098430000) // Unix to timestamp\n *   toDate(new Date(2014, 1, 11, 11, 30, 30)) // Cloning the date\n *   parse('2016-01-01', 'yyyy-MM-dd', new Date())\n *   ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} referenceDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n *   see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n *   see: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} 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 */\n\nexport default function parse(dirtyDateString, dirtyFormatString, dirtyReferenceDate, dirtyOptions) {\n  requiredArgs(3, arguments);\n  var dateString = String(dirtyDateString);\n  var formatString = String(dirtyFormatString);\n  var options = dirtyOptions || {};\n  var locale = options.locale || defaultLocale;\n\n  if (!locale.match) {\n    throw new RangeError('locale must contain match property');\n  }\n\n  var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n  var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n  var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n  }\n\n  var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n  var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n  var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n  }\n\n  if (formatString === '') {\n    if (dateString === '') {\n      return toDate(dirtyReferenceDate);\n    } else {\n      return new Date(NaN);\n    }\n  }\n\n  var subFnOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale\n  }; // If timezone isn't specified, it will be set to the system timezone\n\n  var setters = [{\n    priority: TIMEZONE_UNIT_PRIORITY,\n    subPriority: -1,\n    set: dateToSystemTimezone,\n    index: 0\n  }];\n  var i;\n  var tokens = formatString.match(longFormattingTokensRegExp).map(function (substring) {\n    var firstCharacter = substring[0];\n\n    if (firstCharacter === 'p' || firstCharacter === 'P') {\n      var longFormatter = longFormatters[firstCharacter];\n      return longFormatter(substring, locale.formatLong, subFnOptions);\n    }\n\n    return substring;\n  }).join('').match(formattingTokensRegExp);\n  var usedTokens = [];\n\n  for (i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(token)) {\n      throwProtectedError(token, formatString, dirtyDateString);\n    }\n\n    if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(token)) {\n      throwProtectedError(token, formatString, dirtyDateString);\n    }\n\n    var firstCharacter = token[0];\n    var parser = parsers[firstCharacter];\n\n    if (parser) {\n      var incompatibleTokens = parser.incompatibleTokens;\n\n      if (Array.isArray(incompatibleTokens)) {\n        var incompatibleToken = void 0;\n\n        for (var _i = 0; _i < usedTokens.length; _i++) {\n          var usedToken = usedTokens[_i].token;\n\n          if (incompatibleTokens.indexOf(usedToken) !== -1 || usedToken === firstCharacter) {\n            incompatibleToken = usedTokens[_i];\n            break;\n          }\n        }\n\n        if (incompatibleToken) {\n          throw new RangeError(\"The format string mustn't contain `\".concat(incompatibleToken.fullToken, \"` and `\").concat(token, \"` at the same time\"));\n        }\n      } else if (parser.incompatibleTokens === '*' && usedTokens.length) {\n        throw new RangeError(\"The format string mustn't contain `\".concat(token, \"` and any other token at the same time\"));\n      }\n\n      usedTokens.push({\n        token: firstCharacter,\n        fullToken: token\n      });\n      var parseResult = parser.parse(dateString, token, locale.match, subFnOptions);\n\n      if (!parseResult) {\n        return new Date(NaN);\n      }\n\n      setters.push({\n        priority: parser.priority,\n        subPriority: parser.subPriority || 0,\n        set: parser.set,\n        validate: parser.validate,\n        value: parseResult.value,\n        index: setters.length\n      });\n      dateString = parseResult.rest;\n    } else {\n      if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n        throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n      } // Replace two single quote characters with one single quote character\n\n\n      if (token === \"''\") {\n        token = \"'\";\n      } else if (firstCharacter === \"'\") {\n        token = cleanEscapedString(token);\n      } // Cut token from string, or, if string doesn't match the token, return Invalid Date\n\n\n      if (dateString.indexOf(token) === 0) {\n        dateString = dateString.slice(token.length);\n      } else {\n        return new Date(NaN);\n      }\n    }\n  } // Check if the remaining input contains something other than whitespace\n\n\n  if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n    return new Date(NaN);\n  }\n\n  var uniquePrioritySetters = setters.map(function (setter) {\n    return setter.priority;\n  }).sort(function (a, b) {\n    return b - a;\n  }).filter(function (priority, index, array) {\n    return array.indexOf(priority) === index;\n  }).map(function (priority) {\n    return setters.filter(function (setter) {\n      return setter.priority === priority;\n    }).sort(function (a, b) {\n      return b.subPriority - a.subPriority;\n    });\n  }).map(function (setterArray) {\n    return setterArray[0];\n  });\n  var date = toDate(dirtyReferenceDate);\n\n  if (isNaN(date)) {\n    return new Date(NaN);\n  } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n\n\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date));\n  var flags = {};\n\n  for (i = 0; i < uniquePrioritySetters.length; i++) {\n    var setter = uniquePrioritySetters[i];\n\n    if (setter.validate && !setter.validate(utcDate, setter.value, subFnOptions)) {\n      return new Date(NaN);\n    }\n\n    var result = setter.set(utcDate, flags, setter.value, subFnOptions); // Result is tuple (date, flags)\n\n    if (result[0]) {\n      utcDate = result[0];\n      assign(flags, result[1]); // Result is date\n    } else {\n      utcDate = result;\n    }\n  }\n\n  return utcDate;\n}\n\nfunction dateToSystemTimezone(date, flags) {\n  if (flags.timestampIsSet) {\n    return date;\n  }\n\n  var convertedDate = new Date(0);\n  convertedDate.setFullYear(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n  convertedDate.setHours(date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\n  return convertedDate;\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function startOfHour(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMinutes(0, 0, 0);\n  return date;\n}", "import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\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 */\n\nexport default function startOfSecond(dirtyDate) {\n  requiredArgs(1, arguments);\n  var date = toDate(dirtyDate);\n  date.setMilliseconds(0);\n  return date;\n}", "import { millisecondsInHour, millisecondsInMinute } from \"../constants/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\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 * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The previous `parse` implementation was renamed to `parseISO`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   parse('2016-01-01')\n *\n *   // v2.0.0 onward\n *   parseISO('2016-01-01')\n *   ```\n *\n * - `parseISO` now validates separate date and time values in ISO-8601 strings\n *   and returns `Invalid Date` if the date is invalid.\n *\n *   ```javascript\n *   parseISO('2018-13-32')\n *   //=> Invalid Date\n *   ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n *   if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} 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 = 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 */\n\nexport default function parseISO(argument, dirtyOptions) {\n  requiredArgs(1, arguments);\n  var options = dirtyOptions || {};\n  var additionalDigits = options.additionalDigits == null ? 2 : toInteger(options.additionalDigits);\n\n  if (additionalDigits !== 2 && additionalDigits !== 1 && additionalDigits !== 0) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2');\n  }\n\n  if (!(typeof argument === 'string' || Object.prototype.toString.call(argument) === '[object String]')) {\n    return new Date(NaN);\n  }\n\n  var dateStrings = splitDateString(argument);\n  var date;\n\n  if (dateStrings.date) {\n    var 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  var timestamp = date.getTime();\n  var time = 0;\n  var offset;\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time);\n\n    if (isNaN(time)) {\n      return new Date(NaN);\n    }\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone);\n\n    if (isNaN(offset)) {\n      return new Date(NaN);\n    }\n  } else {\n    var dirtyDate = new Date(timestamp + time); // 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\n    var result = new Date(0);\n    result.setFullYear(dirtyDate.getUTCFullYear(), dirtyDate.getUTCMonth(), dirtyDate.getUTCDate());\n    result.setHours(dirtyDate.getUTCHours(), dirtyDate.getUTCMinutes(), dirtyDate.getUTCSeconds(), dirtyDate.getUTCMilliseconds());\n    return result;\n  }\n\n  return new Date(timestamp + time + offset);\n}\nvar patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/\n};\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n  var dateStrings = {};\n  var array = dateString.split(patterns.dateTimeDelimiter);\n  var timeString; // The regex match should only return at maximum two array elements.\n  // [date], [time], or [date, time].\n\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\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n      timeString = dateString.substr(dateStrings.date.length, dateString.length);\n    }\n  }\n\n  if (timeString) {\n    var token = patterns.timezone.exec(timeString);\n\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  var regex = new RegExp('^(?:(\\\\d{4}|[+-]\\\\d{' + (4 + additionalDigits) + '})|(\\\\d{2}|[+-]\\\\d{' + (2 + additionalDigits) + '})$)');\n  var captures = dateString.match(regex); // Invalid ISO-formatted year\n\n  if (!captures) return {\n    year: NaN,\n    restDateString: ''\n  };\n  var year = captures[1] ? parseInt(captures[1]) : null;\n  var century = captures[2] ? parseInt(captures[2]) : null; // either year or century is null, not both\n\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  var captures = dateString.match(dateRegex); // Invalid ISO-formatted string\n\n  if (!captures) return new Date(NaN);\n  var isWeekDate = !!captures[4];\n  var dayOfYear = parseDateUnit(captures[1]);\n  var month = parseDateUnit(captures[2]) - 1;\n  var day = parseDateUnit(captures[3]);\n  var week = parseDateUnit(captures[4]);\n  var dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN);\n    }\n\n    return dayOfISOWeekYear(year, week, dayOfWeek);\n  } else {\n    var date = new Date(0);\n\n    if (!validateDate(year, month, day) || !validateDayOfYearDate(year, dayOfYear)) {\n      return new Date(NaN);\n    }\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  var captures = timeString.match(timeRegex);\n  if (!captures) return NaN; // Invalid ISO-formatted time\n\n  var hours = parseTimeUnit(captures[1]);\n  var minutes = parseTimeUnit(captures[2]);\n  var seconds = parseTimeUnit(captures[3]);\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN;\n  }\n\n  return hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000;\n}\n\nfunction parseTimeUnit(value) {\n  return value && parseFloat(value.replace(',', '.')) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === 'Z') return 0;\n  var captures = timezoneString.match(timezoneRegex);\n  if (!captures) return 0;\n  var sign = captures[1] === '+' ? -1 : 1;\n  var hours = parseInt(captures[2]);\n  var 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  var date = new Date(0);\n  date.setUTCFullYear(isoWeekYear, 0, 4);\n  var fourthOfJanuaryDay = date.getUTCDay() || 7;\n  var diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n  date.setUTCDate(date.getUTCDate() + diff);\n  return date;\n} // Validation functions\n// February is null to handle the leap year (using ||)\n\n\nvar 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 month >= 0 && month <= 11 && date >= 1 && date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28));\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 seconds >= 0 && seconds < 60 && minutes >= 0 && minutes < 60 && hours >= 0 && hours < 25;\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return minutes >= 0 && minutes <= 59;\n}", "/*!\n * chartjs-adapter-date-fns v2.0.0\n * https://www.chartjs.org\n * (c) 2021 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", "/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\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}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\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}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\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    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst keyResolvers = {\n  '': v => v,\n  x: o => o.x,\n  y: o => o.y\n};\nfunction resolveObjectKey(obj, key) {\n  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n  return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n  const keys = _splitKey(key);\n  return obj => {\n    for (const k of keys) {\n      if (k === '') {\n        break;\n      }\n      obj = obj && obj[k];\n    }\n    return obj;\n  };\n}\nfunction _splitKey(key) {\n  const parts = key.split('.');\n  const keys = [];\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}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\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}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\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)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\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}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(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}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\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}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\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  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value, last) =>\n  _lookup(table, value, last\n    ? index => table[index][key] <= value\n    : index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\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}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\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  return {start, count};\n}\nfunction _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  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => 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  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\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  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\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  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\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  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 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 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}\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}\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}\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}\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}\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}\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}\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}\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(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}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\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    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\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}\nvar defaults = 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});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\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}\nfunction _measureText(ctx, data, gc, longest, string) {\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}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\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}\nfunction _alignPixel(chart, pixel, width) {\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}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n  let type, xOffset, yOffset, size, cornerRadius, width;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\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  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\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    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, 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  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = 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    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = 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    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = 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    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, 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) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\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}\nfunction clipArea(ctx, area) {\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}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\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}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\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}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\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    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}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\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  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\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 = '';\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  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\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}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\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    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\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}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\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    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\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  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\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}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\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 (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && 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, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\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    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\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}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array(count);\n  let i, ilen, index, item;\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\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\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  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\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}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\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    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\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    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\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    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}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\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    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\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  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\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}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\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  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\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}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\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}\nfunction getRelativePosition(evt, chart) {\n  if ('native' in evt) {\n    return evt;\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(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\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}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\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();\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}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\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  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 ? Math.floor(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    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\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  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}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\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}\nfunction _bezierInterpolation(p1, p2, t, mode) {\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\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\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}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\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};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\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}\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}\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  let {start, end, loop} = segment;\n  let i, ilen;\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  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\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  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\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  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\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  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\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}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\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  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        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  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\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}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\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  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\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  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  return result;\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}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };\n", "/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\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      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\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  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\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  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  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    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(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};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\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  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\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  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\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    this._active = from !== to && (loop || (elapsed < duration));\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\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    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\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\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.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});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.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\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\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\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      (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  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\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    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\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      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\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  return Promise.all(running);\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    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\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}\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  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\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  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\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  if (value === null) {\n    return;\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 (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\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}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\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}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\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  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\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  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    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\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}\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}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\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  }\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};\nclass DatasetController {\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    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.initialize();\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  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\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  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\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  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\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  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\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  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\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    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      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    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\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    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  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\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  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    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  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\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]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\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  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    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\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        break;\n      }\n    }\n    if (sorted) {\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  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\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  _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  update(mode) {}\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    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\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    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\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  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    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\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    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\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  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\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  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  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\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      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\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  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\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    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\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  _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  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\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  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\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}\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      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\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  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\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  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\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}\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  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}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\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}\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}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  if (edge === true) {\n    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\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  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\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}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\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  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      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\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    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\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    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      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      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  _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    const skipNull = (meta) => {\n      const parsed = meta.controller.getParsed(dataIndex);\n      const val = parsed && parsed[meta.vScale.axis];\n      if (isNullOrUndef(val) || isNaN(val)) {\n        return true;\n      }\n    };\n    for (const meta of metasets) {\n      if (dataIndex !== undefined && skipNull(meta)) {\n        continue;\n      }\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    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\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    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\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      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked}, 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    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\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 (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\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      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      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\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    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.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\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\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  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  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  getMaxOverflow() {\n    const data = this._cachedMeta.data;\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  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\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    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\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    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      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\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 (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}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\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  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\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    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    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\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  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    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\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      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\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    return total;\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  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    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\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    if (!arcs) {\n      return 0;\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  getMaxOffset(arcs) {\n    let max = 0;\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  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\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  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\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}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\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    this.updateElements(points, start, count, mode);\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    let prevParsed = start > 0 && this.getParsed(start - 1);\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      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      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n  }\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  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\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    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\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    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    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\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    const defaultAngle = 360 / this.countVisibleElements();\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      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\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      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.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};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\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}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\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\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\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    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\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      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\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      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\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    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\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    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.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',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\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  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\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}\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}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\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}\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}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\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}\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  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\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}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\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\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;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\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;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\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    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\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}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\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  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\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  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\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}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\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._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\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  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\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  parse(raw, index) {\n    return raw;\n  }\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: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\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    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\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  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\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    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\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    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\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    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\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  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\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 = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\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    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\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;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\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        if (isHorizontal) {\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          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\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  _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    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      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      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      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\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  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\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    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\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      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\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      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\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    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\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  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\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  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\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  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\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    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position} = 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    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 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    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      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      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\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 optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = optsAtIndex.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\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    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\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    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    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\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      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      if (isHorizontal) {\n        x = pixel;\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        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          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      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\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    return align;\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    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\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        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        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        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    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\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  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  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  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    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      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\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        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  drawBorder() {\n    const {chart, ctx, options: {grid}} = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 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    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.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\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    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    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\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  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\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    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\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: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\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  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n\nclass 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  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\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}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\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}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass 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    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\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        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\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    return this.plugins;\n  }\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}\nvar registry = new Registry();\n\nclass ScatterController extends DatasetController {\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {data: points = []} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (_scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    if (this.options.showLine) {\n      const {dataset: line, _dataset} = meta;\n      line._chart = this.chart;\n      line._datasetIndex = this.index;\n      line._decimated = !!_dataset._decimated;\n      line.points = points;\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    }\n    this.updateElements(points, start, count, mode);\n  }\n  addElements() {\n    const {showLine} = this.options;\n    if (!this.datasetElementType && showLine) {\n      this.datasetElementType = registry.getElement('line');\n    }\n    super.addElements();\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    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      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      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const data = meta.data || [];\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    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\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}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  init(chartOptions) {}\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\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      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  return {lo: 0, hi: data.length - 1};\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}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\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}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\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  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\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    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return 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  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\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      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\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  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\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      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\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      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      return items;\n    },\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    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    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\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\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\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}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\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}\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}\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}\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  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}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\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}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.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  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\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  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\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}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\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  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\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    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\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}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\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  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\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  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\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    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\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    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\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    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\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\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  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\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};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\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  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\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  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\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}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\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}\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}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\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}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\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      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\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    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\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  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\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  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\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    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\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 (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\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    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\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}\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  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n      localIds[plugin.id] = true;\n    }\n  }\n  return {plugins, localIds};\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}\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n  const result = [];\n  const context = chart.getContext();\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  return result;\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    scopes.push(plugin.defaults);\n  }\n  return config.createResolver(scopes, context, [''], {\n    scriptable: false,\n    indexable: false,\n    allKeys: true\n  });\n}\n\nfunction 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}\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}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\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}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\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 firstIDs = Object.create(null);\n  const scales = Object.create(null);\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);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\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'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\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}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\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  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  _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  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    const scopes = new Set();\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    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  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\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      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\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}\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}\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\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\nvar version = \"3.9.1\";\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}\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}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\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}\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}\nclass Chart {\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    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\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    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\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    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    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\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    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\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    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    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      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\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      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\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  _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  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\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      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      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.prototype, {\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    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\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      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    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {mode});\n    this._layers.sort(compare2Level('z', '_idx'));\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    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\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    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\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  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\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    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  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\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    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\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  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    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\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    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\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    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\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    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\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    return [];\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    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\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    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\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    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\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  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n    this._stop();\n    this.config.clearCache();\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    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\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    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\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  getActiveElements() {\n    return this._active || [];\n  }\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      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\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    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\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    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\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    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\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}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\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  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}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (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  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$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  if (circular) {\n    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\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    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n    ctx.lineTo(p4.x, p4.y);\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    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\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    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n    ctx.lineTo(p8.x, p8.y);\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    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerStartX, outerStartY);\n    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n    ctx.lineTo(outerEndX, outerEndY);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n  const {options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\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  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle, circular);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\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    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\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 / 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    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\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  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 2;\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    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n  circular: true,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\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}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\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  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\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  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\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    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\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  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\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}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\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}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\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}\nconst usePath2D = typeof Path2D === 'function';\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}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\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    if (cfg) {\n      Object.assign(this, cfg);\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  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\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  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    if (!segments.length) {\n      return;\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  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || (this.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.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};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\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  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\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  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\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  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\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  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\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}\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  const enableBorder = enableBorderRadius || isObject(value);\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}\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  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}\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  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\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}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\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    if (cfg) {\n      Object.assign(this, cfg);\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    ctx.save();\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    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = 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  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\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    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\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    maxArea = area = -1;\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      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\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  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\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    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\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      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\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', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\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  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\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      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\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      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      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\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      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}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\nfunction _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}\nfunction _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}\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\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\nfunction _shouldApplyFill(source) {\n  return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _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    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n  let value;\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    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n\nfunction _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  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}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\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}\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    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\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\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\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  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\nfunction _getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\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}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\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  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  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\nfunction _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}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\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  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\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  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\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    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\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}\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\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\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      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\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      source.line.updateControlPoints(area, source.axis);\n      if (draw && source.fill) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (_shouldApplyFill(source)) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\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  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\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  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const {options, ctx} = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\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    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\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      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      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, 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    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\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  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\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 {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\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      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\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        drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\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        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\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    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    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\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      rtlHelper.setWidth(this.width);\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      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\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    if (!titleOpts.display) {\n      return;\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    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\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    const x = _alignStartEnd(position, left, left + maxWidth);\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    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\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  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\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}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\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  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\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    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\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: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\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  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\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    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\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    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  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\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    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}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\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\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\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\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\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    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\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        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\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}\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  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}\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  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\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  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    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  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\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  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\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  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\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  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  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\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}\nfunction alignY(size, yAlign, paddingAndSize) {\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}\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  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\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  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\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}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\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}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\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 || config._chart;\n    this._chart = this.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    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\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    return animations;\n  }\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\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(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\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    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\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    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      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      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      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\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    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\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    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\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      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\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;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth, boxPadding} = 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    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\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        ctx.fillStyle = labelColors.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        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\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    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\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    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\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  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    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\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    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\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  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\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    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\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    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\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}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\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: {\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          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        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\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        let label = tooltipItem.dataset.label || '';\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      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\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  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\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};\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}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\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  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  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\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    this.min = min;\n    this.max = max;\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    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\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  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\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  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\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  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\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    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\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  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\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  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== 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  return ticks;\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}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\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    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\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$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\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  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\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  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\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 isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\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  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\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}\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}\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  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\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  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    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  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\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}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\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}\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}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\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      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    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}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\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  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\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  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\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  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\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  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\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  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  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid} = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\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      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\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      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\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};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\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  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\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    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\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  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\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}\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}\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  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}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    adapter.init(opts);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\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    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\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    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\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    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\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    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\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    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.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    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\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    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    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\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    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\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  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\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  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  _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    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\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    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return (this._cache.data = this.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\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    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\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  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\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  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\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    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\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      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\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}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 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    hasBindings() {\n        return this.unorderedBindings.size > 0;\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()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\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)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\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\n        .split(\":\")\n        .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 namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\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\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\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        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\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    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"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        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\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    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\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    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\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(element, attributeName) {\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\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 SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\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 element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\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\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).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\n        .trim()\n        .split(/\\s+/)\n        .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, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\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                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\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\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\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\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        this.outletObserver = new OutletObserver(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        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\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.outletObserver.stop();\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    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, 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 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) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\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 () {\n            this.a.call(this);\n        };\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 || this.findTarget(targetName) || 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 OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\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(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\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        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : 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    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\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        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\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        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\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    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and 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    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\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        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(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    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\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 OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\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:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            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 { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : 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 \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\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.replace(/_/g, \"\"));\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    static afterLoad(_identifier, _application) {\n        return;\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 outlets() {\n        return this.scope.outlets;\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 = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, 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 = true\nwindow.Stimulus   = application\n\nexport { application }", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {  \n  static targets = ['timestamp', 'countUp', 'staffOnly', 'clientOnly']\n  static values = { currentUserId: String }\n\n  connect() {\n    document.addEventListener('turbo:click', this.handleLinkClick);\n    document.addEventListener('turbo:submit-start', this.handleSubmitStart);\n    document.addEventListener('turbo:frame-render', this.handleFrameRender);\n    document.addEventListener(\"turbo:frame-load\", this.handleAutofocus);\n    window['currentUserId'] = this.currentUserIdValue;\n    this.insureInputCentersOnFocusForMobile();\n  }\n\n  timestampTargetConnected(element) {\n    this.convertTimestamps(element)\n    this.setTimeTitle(element)\n  }\n\n  countUpTargetConnected(element) {\n    this.countUpTimer(element);\n    element._intervalId = setInterval(() => this.countUpTimer(element), 60000);\n    this.setTimeTitle(element);\n  }\n\n  staffOnlyTargetConnected(element) {\n    if (!window.location.pathname.includes('/staff/')) {\n      element.remove();\n    }\n  }\n\n  clientOnlyTargetConnected(element) {\n    if (!window.location.pathname.includes('/client/')) {\n      element.remove();\n    }\n  }\n\n  countUpTargetDisconnected(element) {\n    const intervalId = element._intervalId;\n    if (intervalId) {\n      clearInterval(intervalId);\n      element._intervalId = null;\n    }\n  }\n\n  handleLinkClick = (e) => {\n    if(e.target.classList.contains('shows-loading')) {\n      let loadingIcon = e.target.getElementsByClassName('loading-icon')[0]; \n      console.log(loadingIcon)\n      if (loadingIcon) {\n        loadingIcon.classList.add('is-loading');\n        loadingIcon.classList.remove('hidden');\n      }\n    }\n  }\n\n  openTableRowLink = (e) => {\n    if(e.target.closest('td').dataset.preventClick) {\n      return\n    }\n    e.target.parentNode.getElementsByTagName('a')[0]?.click();\n  }\n\n  handleFrameRender = (e) => {\n    Array.from(document.getElementsByClassName('is-loading')).forEach(element => {\n      element.classList.add('hidden')\n      element.classList.remove('is-loading');\n    });\n  }\n\n  handleSubmitStart = (e) => {\n    let form = e.target;\n    let loadingIcon = form.getElementsByClassName('loading-icon')[0];\n    if (loadingIcon) {\n      loadingIcon.classList.add('is-loading');\n      loadingIcon.classList.remove('hidden');\n    }\n  }\n\n  handleAutofocus = (e) => {\n    const frame = e.target;\n    const input = frame.querySelector('input[autofocus]');\n    if (input) {\n      input.focus()\n    }\n  }\n\n  insureInputCentersOnFocusForMobile = () => {\n    // Input types that never bring up a text-entry keyboard, so they don't need the\n    // scroll-into-view-above-the-keyboard treatment below (and, as buttons, are often\n    // positioned right above a footer -- centering one in the viewport can drag the whole\n    // page down toward it, which reads as an unwanted \"jump\" on tap).\n    const nonTextInputTypes = ['submit', 'button', 'reset', 'checkbox', 'radio', 'file', 'image', 'range', 'color', 'hidden']\n\n    document.addEventListener('touchstart', function handler(e) {\n      let target = e.target;\n      const isTextInput = target.tagName === 'INPUT' && !nonTextInputTypes.includes(target.type);\n      if (isTextInput || target.tagName === 'TEXTAREA') {\n        setTimeout(function() {\n          target.scrollIntoView({ behavior: 'smooth', block: 'center' });\n        }, 300);\n      }\n    });\n  }\n\n  convertTimestamps(element) {\n    const date = new Date(element.getAttribute('datetime'));\n    let options = { dateStyle: 'short', timeStyle: 'short' }\n    if (element.dataset.style === 'date') {\n      delete options.timeStyle\n    } else if (element.dataset.style === 'time') {\n      delete options.dateStyle\n    }\n    element.innerHTML = date.toLocaleString([], options);\n  }\n\n  setTimeTitle(element) {\n    const date = new Date(element.getAttribute('datetime'));\n    element.title = date.toLocaleString();\n  }\n\n  countUpTimer(element) {\n    const date = new Date(element.getAttribute('datetime'));\n    element.innerHTML = this.timeAgo(date);\n  }\n\n  timeAgo(date) {\n    const seconds = Math.floor((new Date() - date) / 1000);\n    const minutes = Math.floor(seconds / 60);\n    const hours = Math.floor(minutes / 60);\n    if (seconds < 60) return \"Just now\";\n    if (minutes < 2) return \"about 1 minute ago\";\n    if (minutes < 45) return `${minutes} minutes ago`;\n    if (minutes > 45 && minutes < 90) return \"about 1 hour ago\";\n    if (minutes > 90 && minutes < 1440) return `about ${hours} hours ago`;\n    if (minutes > 1440) return \"more than a day ago\";\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  connect() {\n    const locationHash = window.location.hash;\n    if (locationHash && locationHash == '#register') {\n      document.getElementById('register').click();\n    }\n    if (locationHash && (locationHash == '#sign-in' || locationHash == '#signin')) {\n      document.getElementById('sign-in').click();\n    }\n  }\n}\n", "export class InternMap extends Map {\n  constructor(entries, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (entries != null) for (const [key, value] of entries) this.set(key, value);\n  }\n  get(key) {\n    return super.get(intern_get(this, key));\n  }\n  has(key) {\n    return super.has(intern_get(this, key));\n  }\n  set(key, value) {\n    return super.set(intern_set(this, key), value);\n  }\n  delete(key) {\n    return super.delete(intern_delete(this, key));\n  }\n}\n\nexport class InternSet extends Set {\n  constructor(values, key = keyof) {\n    super();\n    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n    if (values != null) for (const value of values) this.add(value);\n  }\n  has(value) {\n    return super.has(intern_get(this, value));\n  }\n  add(value) {\n    return super.add(intern_set(this, value));\n  }\n  delete(value) {\n    return super.delete(intern_delete(this, value));\n  }\n}\n\nfunction intern_get({_intern, _key}, value) {\n  const key = _key(value);\n  return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) return _intern.get(key);\n  _intern.set(key, value);\n  return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n  const key = _key(value);\n  if (_intern.has(key)) {\n    value = _intern.get(key);\n    _intern.delete(key);\n  }\n  return value;\n}\n\nfunction keyof(value) {\n  return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n", "var noop = {value: () => {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n", "export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n", "import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n", "import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n", "function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don\u2019t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n", "function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n  return function() {\n    return array(select.apply(this, arguments));\n  };\n}\n\nexport default function(select) {\n  if (typeof select === \"function\") select = arrayAll(select);\n  else select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n", "export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n\nexport function childMatcher(selector) {\n  return function(node) {\n    return node.matches(selector);\n  };\n}\n\n", "import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n  return function() {\n    return find.call(this.children, match);\n  };\n}\n\nfunction childFirst() {\n  return this.firstElementChild;\n}\n\nexport default function(match) {\n  return this.select(match == null ? childFirst\n      : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n  return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n  return function() {\n    return filter.call(this.children, match);\n  };\n}\n\nexport default function(match) {\n  return this.selectAll(match == null ? children\n      : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n", "import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n", "export default function(update) {\n  return new Array(update.length);\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n", "export default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don\u2019t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = new Map,\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n      if (nodeByKeyValue.has(keyValue)) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue.set(keyValue, node);\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = key.call(parent, data[i], i, data) + \"\";\n    if (node = nodeByKeyValue.get(keyValue)) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue.delete(keyValue);\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction datum(node) {\n  return node.__data__;\n}\n\nexport default function(value, key) {\n  if (!arguments.length) return Array.from(this, datum);\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn\u2019t worried about \u201Clive\u201D collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don\u2019t; we\u2019d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n  return typeof data === \"object\" && \"length\" in data\n    ? data // Array, TypedArray, NodeList, array-like\n    : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n", "import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n", "export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  if (typeof onenter === \"function\") {\n    enter = onenter(enter);\n    if (enter) enter = enter.selection();\n  } else {\n    enter = enter.append(onenter + \"\");\n  }\n  if (onupdate != null) {\n    update = onupdate(update);\n    if (update) update = update.selection();\n  }\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(context) {\n  var selection = context.selection ? context.selection() : context;\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n", "import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n", "export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n", "export default function() {\n  return Array.from(this);\n}\n", "export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n", "export default function() {\n  let size = 0;\n  for (const node of this) ++size; // eslint-disable-line no-unused-vars\n  return size;\n}\n", "export default function() {\n  return !this.node();\n}\n", "export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n", "import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n", "export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n", "import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n", "function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n", "function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n", "function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n", "function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n", "function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n", "function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n", "import creator from \"../creator.js\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n", "import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n", "function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n", "function selection_cloneShallow() {\n  var clone = this.cloneNode(false), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n  var clone = this.cloneNode(true), parent = this.parentNode;\n  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n", "export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n", "function contextListener(listener) {\n  return function(event) {\n    listener.call(this, event, this.__data__);\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, options) {\n  return function() {\n    var on = this.__on, o, listener = contextListener(value);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.options);\n        this.addEventListener(o.type, o.listener = listener, o.options = options);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, options);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, options) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n  return this;\n}\n", "import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n", "export default function*() {\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) yield node;\n    }\n  }\n}\n", "import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n  return this;\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  selectChild: selection_selectChild,\n  selectChildren: selection_selectChildren,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  selection: selection_selection,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch,\n  [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n", "import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n", "export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n", "import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n", "export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n", "export default x => () => x;\n", "import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n", "import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n", "export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n", "import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n", "var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n", "import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n  const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n  return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n", "import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n", "var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we\u2019ve set an alarm, if we haven\u2019t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n", "import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(elapsed => {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n", "import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n", "import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n", "import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n", "import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n", "import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n", "import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i.call(this, t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n", "import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n", "import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n", "import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (typeof v !== \"function\") throw new Error;\n    set(this, id).ease = v;\n  };\n}\n\nexport default function(value) {\n  if (typeof value !== \"function\") throw new Error;\n  return this.each(easeVarying(this._id, value));\n}\n", "import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n", "import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n", "import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n", "function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n", "import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n", "import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n", "import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we\u2019re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n", "function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i.call(this, t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n", "import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n", "function textInterpolate(i) {\n  return function(t) {\n    this.textContent = i.call(this, t);\n  };\n}\n\nfunction textTween(value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(value) {\n  var key = \"text\";\n  if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, textTween(value));\n}\n", "import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n", "import {set} from \"./schedule.js\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we\u2019re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n\n    // The selection was empty, resolve end immediately\n    if (size === 0) resolve();\n  });\n}\n", "import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  selectChild: selection_prototype.selectChild,\n  selectChildren: selection_prototype.selectChildren,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  textTween: transition_textTween,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  easeVarying: transition_easeVarying,\n  end: transition_end,\n  [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n", "export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n", "import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      throw new Error(`transition ${id} not found`);\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n", "import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n", "import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(\"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection, event) {\n    if (group.tween) {\n      group\n          .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n          .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start(event).brush(event).end(event);\n          });\n    }\n  };\n\n  brush.clear = function(group, event) {\n    brush.move(group, null, event);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    var emit = that.__brush.emitter;\n    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n  }\n\n  function Emitter(that, args, clean) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n    this.clean = clean;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function(event, mode) {\n      if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n      else this.emit(\"brush\", event);\n      return this;\n    },\n    brush: function(event, mode) {\n      this.emit(\"brush\", event, mode);\n      return this;\n    },\n    end: function(event, mode) {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n      return this;\n    },\n    emit: function(type, event, mode) {\n      var d = select(this.that).datum();\n      listeners.call(\n        type,\n        this.that,\n        new BrushEvent(type, {\n          sourceEvent: event,\n          target: brush,\n          selection: dim.output(this.state.selection),\n          mode,\n          dispatch: listeners\n        }),\n        d\n      );\n    }\n  };\n\n  function started(event) {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        points = Array.from(event.touches || [event], t => {\n          const i = t.identifier;\n          t = pointer(t, that);\n          t.point0 = t.slice();\n          t.identifier = i;\n          return t;\n        });\n\n    interrupt(that);\n    var emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      const pts = [points[0], points[1] || points[0]];\n      state.selection = selection = [[\n          w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n          n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n        ], [\n          e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n          s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n        ]];\n      if (points.length > 1) move(event);\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    redraw.call(that);\n    emit.start(event, mode.name);\n\n    function moved(event) {\n      for (const p of event.changedTouches || [event]) {\n        for (const d of points)\n          if (d.identifier === p.identifier) d.cur = pointer(p, that);\n      }\n      if (shifting && !lockX && !lockY && points.length === 1) {\n        const point = points[0];\n        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n          lockY = true;\n        else\n          lockX = true;\n      }\n      for (const point of points)\n        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n      moving = true;\n      noevent(event);\n      move(event);\n    }\n\n    function move(event) {\n      const point = points[0], point0 = point.point0;\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (points[1]) {\n            if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n            if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n          } else {\n            if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n            else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n            if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n            else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          }\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n          if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush(event, mode.name);\n      }\n    }\n\n    function ended(event) {\n      nopropagation(event);\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end(event, mode.name);\n    }\n\n    function keydowned(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n\n    function keyupped(event) {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move(event);\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move(event);\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move(event);\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent(event);\n    }\n  }\n\n  function touchmoved(event) {\n    emitter(this, arguments).moved(event);\n  }\n\n  function touchended(event) {\n    emitter(this, arguments).ended(event);\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n", "function count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nexport default function() {\n  return this.eachAfter(count);\n}\n", "export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n", "export default function(callback, that) {\n  var node = this, nodes = [node], children, i, index = -1;\n  while (node = nodes.pop()) {\n    callback.call(that, node, ++index, this);\n    if (children = node.children) {\n      for (i = children.length - 1; i >= 0; --i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  return this;\n}\n", "export default function(callback, that) {\n  var node = this, nodes = [node], next = [], children, i, n, index = -1;\n  while (node = nodes.pop()) {\n    next.push(node);\n    if (children = node.children) {\n      for (i = 0, n = children.length; i < n; ++i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  while (node = next.pop()) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n", "export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    if (callback.call(that, node, ++index, this)) {\n      return node;\n    }\n  }\n}\n", "export default function(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n", "export default function(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n", "export default function(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n", "export default function() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n", "export default function() {\n  return Array.from(this);\n}\n", "export default function() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n", "export default function() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don\u2019t include the root\u2019s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n", "export default function*() {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      yield node;\n      if (children = node.children) {\n        for (i = 0, n = children.length; i < n; ++i) {\n          next.push(children[i]);\n        }\n      }\n    }\n  } while (next.length);\n}\n", "import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_find from \"./find.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n  if (data instanceof Map) {\n    data = [undefined, data];\n    if (children === undefined) children = mapChildren;\n  } else if (children === undefined) {\n    children = objectChildren;\n  }\n\n  var root = new Node(data),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n      node.children = childs;\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = childs[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n  return d.children;\n}\n\nfunction mapChildren(d) {\n  return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n  if (node.data.value !== undefined) node.value = node.data.value;\n  node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  find: node_find,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy,\n  [Symbol.iterator]: node_iterator\n};\n", "export function optional(f) {\n  return f == null ? null : required(f);\n}\n\nexport function required(f) {\n  if (typeof f !== \"function\") throw new Error;\n  return f;\n}\n", "export function constantZero() {\n  return 0;\n}\n\nexport default function(x) {\n  return function() {\n    return x;\n  };\n}\n", "// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n", "export default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n  let m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n", "import {shuffle} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n  return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n  var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n  while (i < n) {\n    p = circles[i];\n    if (e && enclosesWeak(e, p)) ++i;\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n  }\n\n  return e;\n}\n\nfunction extendBasis(B, p) {\n  var i, j;\n\n  if (enclosesWeakAll(p, B)) return [p];\n\n  // If we get here then B must have at least one element.\n  for (i = 0; i < B.length; ++i) {\n    if (enclosesNot(p, B[i])\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n      return [B[i], p];\n    }\n  }\n\n  // If we get here then B must have at least two elements.\n  for (i = 0; i < B.length - 1; ++i) {\n    for (j = i + 1; j < B.length; ++j) {\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n        return [B[i], B[j], p];\n      }\n    }\n  }\n\n  // If we get here then something is very wrong.\n  throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n  var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n  for (var i = 0; i < B.length; ++i) {\n    if (!enclosesWeak(a, B[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction encloseBasis(B) {\n  switch (B.length) {\n    case 1: return encloseBasis1(B[0]);\n    case 2: return encloseBasis2(B[0], B[1]);\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\n  }\n}\n\nfunction encloseBasis1(a) {\n  return {\n    x: a.x,\n    y: a.y,\n    r: a.r\n  };\n}\n\nfunction encloseBasis2(a, b) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n      l = Math.sqrt(x21 * x21 + y21 * y21);\n  return {\n    x: (x1 + x2 + x21 / l * r21) / 2,\n    y: (y1 + y2 + y21 / l * r21) / 2,\n    r: (l + r1 + r2) / 2\n  };\n}\n\nfunction encloseBasis3(a, b, c) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x3 = c.x, y3 = c.y, r3 = c.r,\n      a2 = x1 - x2,\n      a3 = x1 - x3,\n      b2 = y1 - y2,\n      b3 = y1 - y3,\n      c2 = r2 - r1,\n      c3 = r3 - r1,\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n      ab = a3 * b2 - a2 * b3,\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n      xb = (b3 * c2 - b2 * c3) / ab,\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n      yb = (a2 * c3 - a3 * c2) / ab,\n      A = xb * xb + yb * yb - 1,\n      B = 2 * (r1 + xa * xb + ya * yb),\n      C = xa * xa + ya * ya - r1 * r1,\n      r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n  return {\n    x: x1 + xa + xb * r,\n    y: y1 + ya + yb * r,\n    r: r\n  };\n}\n", "import array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} from \"./enclose.js\";\n\nfunction place(b, a, c) {\n  var dx = b.x - a.x, x, a2,\n      dy = b.y - a.y, y, b2,\n      d2 = dx * dx + dy * dy;\n  if (d2) {\n    a2 = a.r + c.r, a2 *= a2;\n    b2 = b.r + c.r, b2 *= b2;\n    if (a2 > b2) {\n      x = (d2 + b2 - a2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n      c.x = b.x - x * dx - y * dy;\n      c.y = b.y - x * dy + y * dx;\n    } else {\n      x = (d2 + a2 - b2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n      c.x = a.x + x * dx - y * dy;\n      c.y = a.y + x * dy + y * dx;\n    }\n  } else {\n    c.x = a.x + c.r;\n    c.y = a.y;\n  }\n}\n\nfunction intersects(a, b) {\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n  var a = node._,\n      b = node.next._,\n      ab = a.r + b.r,\n      dx = (a.x * b.r + b.x * a.r) / ab,\n      dy = (a.y * b.r + b.y * a.r) / ab;\n  return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n  this._ = circle;\n  this.next = null;\n  this.previous = null;\n}\n\nexport function packSiblingsRandom(circles, random) {\n  if (!(n = (circles = array(circles)).length)) return 0;\n\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n  // Place the first circle.\n  a = circles[0], a.x = 0, a.y = 0;\n  if (!(n > 1)) return a.r;\n\n  // Place the second circle.\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n  if (!(n > 2)) return a.r + b.r;\n\n  // Place the third circle.\n  place(b, a, c = circles[2]);\n\n  // Initialize the front-chain using the first three circles a, b and c.\n  a = new Node(a), b = new Node(b), c = new Node(c);\n  a.next = c.previous = b;\n  b.next = a.previous = c;\n  c.next = b.previous = a;\n\n  // Attempt to place each remaining circle\u2026\n  pack: for (i = 3; i < n; ++i) {\n    place(a._, b._, c = circles[i]), c = new Node(c);\n\n    // Find the closest intersecting circle on the front-chain, if any.\n    // \u201CCloseness\u201D is determined by linear distance along the front-chain.\n    // \u201CAhead\u201D or \u201Cbehind\u201D is likewise determined by linear distance.\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n    do {\n      if (sj <= sk) {\n        if (intersects(j._, c._)) {\n          b = j, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sj += j._.r, j = j.next;\n      } else {\n        if (intersects(k._, c._)) {\n          a = k, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sk += k._.r, k = k.previous;\n      }\n    } while (j !== k.next);\n\n    // Success! Insert the new circle c between a and b.\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n    // Compute the new closest circle pair to the centroid.\n    aa = score(a);\n    while ((c = c.next) !== b) {\n      if ((ca = score(c)) < aa) {\n        a = c, aa = ca;\n      }\n    }\n    b = a.next;\n  }\n\n  // Compute the enclosing circle of the front chain.\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n  // Translate the circles to put the enclosing circle around the origin.\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n  return c.r;\n}\n\nexport default function(circles) {\n  packSiblingsRandom(circles, lcg());\n  return circles;\n}\n", "import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.js\";\n\nfunction defaultRadius(d) {\n  return Math.sqrt(d.value);\n}\n\nexport default function() {\n  var radius = null,\n      dx = 1,\n      dy = 1,\n      padding = constantZero;\n\n  function pack(root) {\n    const random = lcg();\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildrenRandom(padding, 0.5, random))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius))\n          .eachAfter(packChildrenRandom(constantZero, 1, random))\n          .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n    }\n    return root;\n  }\n\n  pack.radius = function(x) {\n    return arguments.length ? (radius = optional(x), pack) : radius;\n  };\n\n  pack.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n  };\n\n  pack.padding = function(x) {\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n  };\n\n  return pack;\n}\n\nfunction radiusLeaf(radius) {\n  return function(node) {\n    if (!node.children) {\n      node.r = Math.max(0, +radius(node) || 0);\n    }\n  };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n  return function(node) {\n    if (children = node.children) {\n      var children,\n          i,\n          n = children.length,\n          r = padding(node) * k || 0,\n          e;\n\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\n      e = packSiblingsRandom(children, random);\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n      node.r = e + r;\n    }\n  };\n}\n\nfunction translateChild(k) {\n  return function(node) {\n    var parent = node.parent;\n    node.r *= k;\n    if (parent) {\n      node.x = parent.x + k * node.x;\n      node.y = parent.y + k * node.y;\n    }\n  };\n}\n", "export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n", "import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n  var index = new InternMap(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    let i = index.get(d);\n    if (i === undefined) {\n      if (unknown !== implicit) return unknown;\n      index.set(d, i = domain.push(d) - 1);\n    }\n    return range[i % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = new InternMap();\n    for (const value of _) {\n      if (index.has(value)) continue;\n      index.set(value, domain.push(value) - 1);\n    }\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n", "export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport * as d3 from \"d3\"\n\nexport default class extends Controller {\n  static targets = [\"svg\"]\n  static values = {\n    data: Array,\n    colors: { type: Array, default: [\"#1F3C5A\", \"#075B9A\", \"#087DD3\", \"#30ACFE\", \"#9DB3C9\", \"#66696D\"] }\n  }\n\n  connect() {\n    this.tooltip = document.createElement(\"div\")\n    this.tooltip.className = \"fixed px-2.5 py-1.5 bg-black/80 text-white rounded text-[13px] pointer-events-none invisible z-[9999]\"\n    document.body.appendChild(this.tooltip)\n\n    this.render()\n    this.resizeObserver = new ResizeObserver(() => this.render())\n    this.resizeObserver.observe(this.element)\n  }\n\n  disconnect() {\n    if (this.resizeObserver) this.resizeObserver.disconnect()\n    this.tooltip?.remove()\n  }\n\n  render() {\n    const svg = this.svgTarget\n    const width = this.element.clientWidth\n    const height = this.element.clientHeight || 300\n    const data = this.dataValue.filter(d => d.value > 0)\n\n    d3.select(svg).selectAll(\"*\").remove()\n\n    if (!data.length || width === 0 || height === 0) return\n\n    svg.setAttribute(\"viewBox\", `0 0 ${width} ${height}`)\n\n    const root = d3.hierarchy({ children: data })\n      .sum(d => d.value)\n      .sort((a, b) => b.value - a.value)\n\n    const pack = d3.pack()\n      .size([width, height])\n      .padding(4)\n\n    pack(root)\n\n    const colorScale = d3.scaleOrdinal()\n      .domain(data.map(d => d.label))\n      .range(this.colorsValue)\n\n    const tooltip = this.tooltip\n\n    const nodes = d3.select(svg).selectAll(\"g\")\n      .data(root.leaves())\n      .join(\"g\")\n      .attr(\"transform\", d => `translate(${d.x},${d.y})`)\n      .style(\"cursor\", \"pointer\")\n      .on(\"mouseover\", (_event, d) => {\n        tooltip.textContent = \"\"\n        const strong = document.createElement(\"strong\")\n        strong.textContent = d.data.label\n        tooltip.appendChild(strong, document.createTextNode(`: ${d.data.percentage}%`))\n        tooltip.classList.remove(\"invisible\")\n      })\n      .on(\"mousemove\", (event) => {\n        tooltip.style.left = `${event.clientX + 12}px`\n        tooltip.style.top = `${event.clientY - 28}px`\n      })\n      .on(\"mouseout\", () => {\n        tooltip.classList.add(\"invisible\")\n      })\n\n    nodes.append(\"circle\")\n      .attr(\"r\", d => d.r)\n      .attr(\"fill\", d => colorScale(d.data.label))\n\n    nodes.append(\"text\")\n      .attr(\"text-anchor\", \"middle\")\n      .attr(\"dominant-baseline\", \"central\")\n      .attr(\"fill\", \"white\")\n      .attr(\"font-weight\", \"bold\")\n      .attr(\"font-size\", d => Math.max(10, Math.min(d.r / 2.5, 16)))\n      .text(d => d.r > 20 ? d.data.label : \"\")\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"row\", \"rowsContainer\", \"leftTitle\", \"rightTitle\", \"leftIcon\", \"rightIcon\"]\n  static values = {\n    sortSide: { type: String, default: \"left\" },\n    sortDirection: { type: String, default: \"desc\" }\n  }\n\n  connect() {\n    this.updateTitleState()\n  }\n\n  sortLeft(event) {\n    event.preventDefault()\n    this.sortBy(\"left\")\n  }\n\n  sortRight(event) {\n    event.preventDefault()\n    this.sortBy(\"right\")\n  }\n\n  sortBy(side) {\n    const direction = this.sortSideValue === side ? this.toggledDirection() : \"desc\"\n    this.sortSideValue = side\n    this.sortDirectionValue = direction\n\n    this.sortRows(side, direction)\n    this.updateTitleState()\n  }\n\n  sortRows(side, direction) {\n    if (!this.hasRowsContainerTarget || !this.hasRowTarget) return\n\n    const sortedRows = [...this.rowTargets].sort((leftRow, rightRow) => {\n      const leftValue = parseFloat(leftRow.dataset[`${side}Percentage`]) || 0\n      const rightValue = parseFloat(rightRow.dataset[`${side}Percentage`]) || 0\n\n      if (leftValue === rightValue) {\n        const leftLabel = leftRow.dataset.label || \"\"\n        const rightLabel = rightRow.dataset.label || \"\"\n        return leftLabel.localeCompare(rightLabel)\n      }\n\n      return direction === \"asc\" ? leftValue - rightValue : rightValue - leftValue\n    })\n\n    sortedRows.forEach((row) => this.rowsContainerTarget.appendChild(row))\n  }\n\n  toggledDirection() {\n    return this.sortDirectionValue === \"desc\" ? \"asc\" : \"desc\"\n  }\n\n  updateTitleState() {\n    if (this.hasLeftTitleTarget) {\n      this.applyTitleState(this.leftTitleTarget, this.hasLeftIconTarget ? this.leftIconTarget : null, this.sortSideValue === \"left\")\n    }\n\n    if (this.hasRightTitleTarget) {\n      this.applyTitleState(this.rightTitleTarget, this.hasRightIconTarget ? this.rightIconTarget : null, this.sortSideValue === \"right\")\n    }\n  }\n\n  applyTitleState(titleElement, iconElement, active) {\n    titleElement.classList.toggle(\"text-rm-blue\", active)\n    titleElement.setAttribute(\"aria-pressed\", active ? \"true\" : \"false\")\n\n    if (iconElement) {\n      iconElement.classList.toggle(\"invisible\", !active)\n      iconElement.textContent = this.sortDirectionValue === \"asc\" ? \"arrow_upward\" : \"arrow_downward\"\n    }\n  }\n}", "export class FetchResponse {\n  constructor (response) {\n    this.response = response\n  }\n\n  get statusCode () {\n    return this.response.status\n  }\n\n  get redirected () {\n    return this.response.redirected\n  }\n\n  get ok () {\n    return this.response.ok\n  }\n\n  get unauthenticated () {\n    return this.statusCode === 401\n  }\n\n  get unprocessableEntity () {\n    return this.statusCode === 422\n  }\n\n  get authenticationURL () {\n    return this.response.headers.get('WWW-Authenticate')\n  }\n\n  get contentType () {\n    const contentType = this.response.headers.get('Content-Type') || ''\n\n    return contentType.replace(/;.*$/, '')\n  }\n\n  get headers () {\n    return this.response.headers\n  }\n\n  get html () {\n    if (this.contentType.match(/^(application|text)\\/(html|xhtml\\+xml)$/)) {\n      return this.text\n    }\n\n    return Promise.reject(new Error(`Expected an HTML response but got \"${this.contentType}\" instead`))\n  }\n\n  get json () {\n    if (this.contentType.match(/^application\\/.*json$/)) {\n      return this.responseJson || (this.responseJson = this.response.json())\n    }\n\n    return Promise.reject(new Error(`Expected a JSON response but got \"${this.contentType}\" instead`))\n  }\n\n  get text () {\n    return this.responseText || (this.responseText = this.response.text())\n  }\n\n  get isTurboStream () {\n    return this.contentType.match(/^text\\/vnd\\.turbo-stream\\.html/)\n  }\n\n  async renderTurboStream () {\n    if (this.isTurboStream) {\n      if (window.Turbo) {\n        await window.Turbo.renderStreamMessage(await this.text)\n      } else {\n        console.warn('You must set `window.Turbo = Turbo` to automatically process Turbo Stream events with request.js')\n      }\n    } else {\n      return Promise.reject(new Error(`Expected a Turbo Stream response but got \"${this.contentType}\" instead`))\n    }\n  }\n}\n", "export class RequestInterceptor {\n  static register (interceptor) {\n    this.interceptor = interceptor\n  }\n\n  static get () {\n    return this.interceptor\n  }\n\n  static reset () {\n    this.interceptor = undefined\n  }\n}\n", "export function getCookie (name) {\n  const cookies = document.cookie ? document.cookie.split('; ') : []\n  const prefix = `${encodeURIComponent(name)}=`\n  const cookie = cookies.find(cookie => cookie.startsWith(prefix))\n\n  if (cookie) {\n    const value = cookie.split('=').slice(1).join('=')\n\n    if (value) {\n      return decodeURIComponent(value)\n    }\n  }\n}\n\nexport function compact (object) {\n  const result = {}\n\n  for (const key in object) {\n    const value = object[key]\n    if (value !== undefined) {\n      result[key] = value\n    }\n  }\n\n  return result\n}\n\nexport function metaContent (name) {\n  const element = document.head.querySelector(`meta[name=\"${name}\"]`)\n  return element && element.content\n}\n\nexport function stringEntriesFromFormData (formData) {\n  return [...formData].reduce((entries, [name, value]) => {\n    return entries.concat(typeof value === 'string' ? [[name, value]] : [])\n  }, [])\n}\n\nexport function mergeEntries (searchParams, entries) {\n  for (const [name, value] of entries) {\n    if (value instanceof window.File) continue\n\n    if (searchParams.has(name) && !name.includes('[]')) {\n      searchParams.delete(name)\n      searchParams.set(name, value)\n    } else {\n      searchParams.append(name, value)\n    }\n  }\n}\n", "import { FetchResponse } from './fetch_response'\nimport { RequestInterceptor } from './request_interceptor'\nimport { getCookie, compact, metaContent, stringEntriesFromFormData, mergeEntries } from './lib/utils'\n\nexport class FetchRequest {\n  constructor (method, url, options = {}) {\n    this.method = method\n    this.options = options\n    this.originalUrl = url.toString()\n  }\n\n  async perform () {\n    try {\n      const requestInterceptor = RequestInterceptor.get()\n      if (requestInterceptor) {\n        await requestInterceptor(this)\n      }\n    } catch (error) {\n      console.error(error)\n    }\n\n    const response = new FetchResponse(await window.fetch(this.url, this.fetchOptions))\n\n    if (response.unauthenticated && response.authenticationURL) {\n      return Promise.reject(window.location.href = response.authenticationURL)\n    }\n\n    if (response.ok && response.isTurboStream) {\n      await response.renderTurboStream()\n    }\n\n    return response\n  }\n\n  addHeader (key, value) {\n    const headers = this.additionalHeaders\n    headers[key] = value\n    this.options.headers = headers\n  }\n\n  sameHostname () {\n    if (!this.originalUrl.startsWith('http:')) {\n      return true\n    }\n\n    try {\n      return new URL(this.originalUrl).hostname === window.location.hostname\n    } catch (_) {\n      return true\n    }\n  }\n\n  get fetchOptions () {\n    return {\n      method: this.method.toUpperCase(),\n      headers: this.headers,\n      body: this.formattedBody,\n      signal: this.signal,\n      credentials: 'same-origin',\n      redirect: this.redirect\n    }\n  }\n\n  get headers () {\n    const baseHeaders = {\n      'X-Requested-With': 'XMLHttpRequest',\n      'Content-Type': this.contentType,\n      Accept: this.accept\n    }\n\n    if (this.sameHostname()) {\n      baseHeaders['X-CSRF-Token'] = this.csrfToken\n    }\n\n    return compact(\n      Object.assign(baseHeaders, this.additionalHeaders)\n    )\n  }\n\n  get csrfToken () {\n    return getCookie(metaContent('csrf-param')) || metaContent('csrf-token')\n  }\n\n  get contentType () {\n    if (this.options.contentType) {\n      return this.options.contentType\n    } else if (this.body == null || this.body instanceof window.FormData) {\n      return undefined\n    } else if (this.body instanceof window.File) {\n      return this.body.type\n    }\n\n    return 'application/json'\n  }\n\n  get accept () {\n    switch (this.responseKind) {\n      case 'html':\n        return 'text/html, application/xhtml+xml'\n      case 'turbo-stream':\n        return 'text/vnd.turbo-stream.html, text/html, application/xhtml+xml'\n      case 'json':\n        return 'application/json, application/vnd.api+json'\n      default:\n        return '*/*'\n    }\n  }\n\n  get body () {\n    return this.options.body\n  }\n\n  get query () {\n    const originalQuery = (this.originalUrl.split('?')[1] || '').split('#')[0]\n    const params = new URLSearchParams(originalQuery)\n\n    let requestQuery = this.options.query\n    if (requestQuery instanceof window.FormData) {\n      requestQuery = stringEntriesFromFormData(requestQuery)\n    } else if (requestQuery instanceof window.URLSearchParams) {\n      requestQuery = requestQuery.entries()\n    } else {\n      requestQuery = Object.entries(requestQuery || {})\n    }\n\n    mergeEntries(params, requestQuery)\n\n    const query = params.toString()\n    return (query.length > 0 ? `?${query}` : '')\n  }\n\n  get url () {\n    return (this.originalUrl.split('?')[0]).split('#')[0] + this.query\n  }\n\n  get responseKind () {\n    return this.options.responseKind || 'html'\n  }\n\n  get signal () {\n    return this.options.signal\n  }\n\n  get redirect () {\n    return this.options.redirect || 'follow'\n  }\n\n  get additionalHeaders () {\n    return this.options.headers || {}\n  }\n\n  get formattedBody () {\n    const bodyIsAString = Object.prototype.toString.call(this.body) === '[object String]'\n    const contentTypeIsJson = this.headers['Content-Type'] === 'application/json'\n\n    if (contentTypeIsJson && !bodyIsAString) {\n      return JSON.stringify(this.body)\n    }\n\n    return this.body\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n\n  cancelNewCertification(event) {\n    event.preventDefault()\n    event.target.closest('.new_candidate_user_certification_form').remove();\n  }\n\n  deleteCertification(event) {\n    event.preventDefault()\n    if (confirm(\"Are you sure you want to delete this certification?\")) {\n      const request = new FetchRequest('DELETE', event.target, { responseKind: 'turbo-stream' });\n      request.perform();\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n\n  cancelNewEducation(event) {\n    event.preventDefault()\n    event.target.closest('.new_candidate_education_form').remove();\n  }\n\n  deleteEducation(event) {\n    event.preventDefault()\n    if (confirm(\"Are you sure you want to delete this education?\")) {\n      const request = new FetchRequest('DELETE', event.target, { responseKind: 'turbo-stream' });\n      request.perform();\n    }\n  }\n}", "import { FetchRequest } from '@rails/request.js'\n\nexport const state = {\n  onCall: false,\n  broadcastMeetingIds: {},\n  currentBroadcastMeetingId: null,\n  activeMeetingId: null,\n  fetchActiveMeetingBroadcast: function() {\n    if (!state.activeMeetingId) return\n    if (state.broadcastMeetingIds[state.activeMeetingId] && state.currentBroadcastMeetingId !== state.activeMeetingId) {\n      const url = state.broadcastMeetingIds[state.activeMeetingId]['receiveUrl']\n      const request = new FetchRequest('GET', url, { responseKind: 'turbo-stream' })\n      request.perform()\n        .then(response => {\n          if (response.statusCode === 410) {\n            delete state.broadcastMeetingIds[state.activeMeetingId]\n            state.currentBroadcastMeetingId = null\n          }\n        })\n        .catch(error => console.warn('fetchActiveMeetingBroadcast failed', error))\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport { state } from \"../state\"\n\nexport default class extends Controller {\n  static targets = ['tab', 'panel','deviceTester']\n  static values = { eventId: String, singleExhibitor: Boolean, endPrivateUrl: String, closeBoothUrl: String, meetingId: String }\n  static classes = [ \"active\", \"blinking\" ]\n\n  #loadingPanel = null\n\n  connect() {\n    // Check if this is a single-meeting context (webinars/private VCF without tabs)\n    if (this.singleExhibitorValue && this.hasMeetingIdValue) {\n      // Single meeting context - set active meeting ID directly\n      state.activeMeetingId = this.meetingIdValue;\n    }\n\n    //if they have not configured devices then show the configure button\n    if (this.hasDeviceTesterTarget) {\n      const videoDeviceConfigured = localStorage.getItem('preferredVideoDevice');\n      const audioDeviceConfigured = localStorage.getItem('preferredAudioDevice');\n      const audioOutputConfigured = localStorage.getItem('preferredAudioOutput');\n\n      // If no device configuration found, show the device tester button\n      if (!videoDeviceConfigured && !audioDeviceConfigured && !audioOutputConfigured) {\n        this.deviceTesterTarget.classList.remove('hidden');\n\n        // Optional: Add a pulsing animation to draw attention\n        this.deviceTesterTarget.classList.add('animate-pulse');\n      }\n    }\n\n    this.boundHandleBlinkNotification = this.handleBlinkNotification.bind(this)\n    document.addEventListener('blink-notification', this.boundHandleBlinkNotification)\n\n    this.boundHandleTabClosed = this.handleTabClosed.bind(this)\n    document.addEventListener('tab-closed', this.boundHandleTabClosed)\n\n    this.boundHandleCloseBoothNotification = this.handleCloseBoothNotification.bind(this)\n    document.addEventListener('close-booth-notification', this.boundHandleCloseBoothNotification)\n\n    this.boundHandleTabFocused = this.handleTabFocused.bind(this)\n    document.addEventListener('tab-focused', this.boundHandleTabFocused)\n\n    this.boundDeviceConfigured = this.checkDeviceConfiguration.bind(this);\n    document.addEventListener('device-settings-updated', this.boundDeviceConfigured);\n\n    // Add event listener for Turbo Stream before render to intercept tab appends\n    this.boundInterceptTabAppend = this.interceptTabAppend.bind(this);\n    document.addEventListener('turbo:before-stream-render', this.boundInterceptTabAppend);\n\n    this.boundCatchUp = this.handleCatchUp.bind(this);\n    document.addEventListener('cable:catch-up', this.boundCatchUp);\n\n    // if there is a booth id in the URL, activate that room\n    const urlParams = new URLSearchParams(window.location.search);\n    if (urlParams.has('booth_id')) {\n      const boothId = urlParams.get('booth_id')\n      this.#activatePanel(boothId)\n    } else if (this.singleExhibitorValue) {\n      const firstMainRoom = this.panelTargets.find(panel => panel.dataset.id && panel.dataset.id !== 'lobby')\n      if (firstMainRoom) {\n        this.#activatePanel(firstMainRoom.dataset.id)\n      }\n    }\n  }\n\n  interceptTabAppend(event) {\n    if (event.target.action === 'append' && event.target.target === 'boothTabs') {\n      const template = event.target.templateElement;\n      const tabElement = template.content.querySelector('tab[data-candidate-live-event-target=\"tab\"]');\n\n      if (tabElement) {\n        const boothId = tabElement.dataset.id;\n        // Check if we already have a tab with this booth ID\n        const existingTab = this.#tabForBooth(boothId);\n\n        if (existingTab) {\n          // Prevent the append action\n          event.preventDefault();\n          // Activate the existing tab\n          this.#activatePanel(boothId);\n        }\n      }\n    }\n  }\n\n  disconnect() {\n    document.removeEventListener('blink-notification', this.boundHandleBlinkNotification)\n    document.removeEventListener('tab-closed', this.boundHandleTabClosed)\n    document.removeEventListener('close-booth-notification', this.boundHandleCloseBoothNotification)\n    document.removeEventListener('tab-focused', this.boundHandleTabFocused)\n    document.removeEventListener('device-settings-updated', this.boundDeviceConfigured);\n    document.removeEventListener('turbo:before-stream-render', this.boundInterceptTabAppend);\n    document.removeEventListener('cable:catch-up', this.boundCatchUp);\n  }\n\n  async handleCatchUp() {\n    // Refresh presence for the currently active meeting\n    if (state.activeMeetingId) {\n      await this.fetchPresence(state.activeMeetingId);\n    }\n\n    // Mark non-visible panels as stale\n    this.panelTargets.forEach(panel => {\n      if (panel.classList.contains('hidden')) {\n        panel.dataset.stale = \"true\";\n      }\n    });\n  }\n\n  async fetchPresence(meetingId) {\n    const request = new FetchRequest('get', `/meetings/${meetingId}/presence`, { responseKind: 'turbo-stream' });\n    try {\n      await request.perform();\n    } catch (error) {\n      // Don't let a failed presence refresh abort the caller (e.g. handleCatchUp still needs to mark\n      // panels stale). Presence is re-fetched on the next reconnect / tab activation anyway.\n      console.warn('Presence refresh failed', error);\n    }\n  }\n\n  // Method to check device configuration and update button visibility\n  checkDeviceConfiguration() {\n    if (this.hasDeviceTesterTarget) {\n      const videoDeviceConfigured = localStorage.getItem('preferredVideoDevice');\n      const audioDeviceConfigured = localStorage.getItem('preferredAudioDevice');\n      const audioOutputConfigured = localStorage.getItem('preferredAudioOutput');\n\n      if (videoDeviceConfigured || audioDeviceConfigured || audioOutputConfigured) {\n        // If any device is configured, hide the button\n        this.deviceTesterTarget.classList.add('hidden');\n        this.deviceTesterTarget.classList.remove('animate-pulse');\n      } else {\n        // If no device is configured, show the button\n        this.deviceTesterTarget.classList.remove('hidden');\n        this.deviceTesterTarget.classList.add('animate-pulse');\n      }\n    }\n  }\n\n  handleBlinkNotification(event) {\n    const { mainRoomId } = event.detail\n\n    if (mainRoomId) {\n      const tab = this.tabTargets.find(tab => tab.dataset.mainRoomId == mainRoomId)\n      if (tab) {\n        const isActiveTab = tab.classList.contains(this.activeClasses[0])\n        if (!isActiveTab) {\n          tab.classList.add(...this.blinkingClasses)\n        }\n      }\n    }\n  }\n\n  handleCloseBoothNotification(event) {\n    const { boothId } = event.detail\n    if (boothId) {\n      const tab = this.#tabForBooth(boothId)\n      if (tab) {\n        this.#closeBoothTab(tab)\n      }\n    }\n  }\n\n  handleTabClosed(event) {\n    const { meetingId, otherParticipantUserId, otherParticipantRole } = event.detail\n\n    if (meetingId) {\n      const url = this.endPrivateUrlValue.replace('meetingId', meetingId)\n\n      const request = new FetchRequest('GET', url, { responseKind: 'turbo-stream' })\n      request.perform()\n        .catch(error => {\n          console.error('Error ending private meeting:', error)\n        })\n\n      if (otherParticipantRole === 'candidate') {\n        document.getElementById('client_event_modal').src = `${this.ratingUrlValue}?candidate_id=${otherParticipantUserId}`\n      }\n    }\n  }\n\n  handleTabFocused(event) {\n    const { meetingId, otherParticipantUserId, otherParticipantRole } = event.detail\n    state.activeMeetingId = meetingId\n    state.fetchActiveMeetingBroadcast()\n  }\n\n  panelTargetConnected(element) {\n    // Check if this is the panel we're waiting for\n    if (this.#loadingPanel === element.dataset.id) {\n      this.#activatePanel(this.#loadingPanel)\n      this.#loadingPanel = null\n    } else if (this.panelTargets.length === this.tabTargets.length && this.#loadingPanel === null) {\n      // Only select initial tab if we're not waiting for a specific panel\n      this.#selectInitialTab()\n    }\n  }\n\n  tabTargetConnected(element) {\n    this.#fetchPanel(element)\n\n    const boothId = element.dataset.id\n\n    // Only try to activate if the panel already exists\n    const panel = this.#panelForBooth(boothId)\n    if (panel) {\n      const currentChatTab = panel.querySelector('tab.bg-rm-light-blue.text-white')\n      if (currentChatTab) {\n        currentChatTab.click()\n      }\n      // Only activate immediately if the panel exists\n      this.#activatePanel(boothId)\n    }\n    // Otherwise, activation will happen when the panel connects\n  }\n\n  handleBoothTabClick(event) {\n    const boothId = event.currentTarget.dataset.id\n    const panel = this.#panelForBooth(boothId)\n    if (panel.dataset.id === 'lobby') {\n      this.dispatch('tab-focused', {detail: {meetingId: null}, bubbles: true, prefix: false })\n    } else {\n      if (event.currentTarget.classList.contains(this.blinkingClasses[0])) {\n        const tab = panel.querySelector('.animate-blink-primary')\n        if (tab) {\n          tab.click()\n        }\n      } else {\n        const currentChatTab = panel.querySelector('tab.bg-rm-light-blue.text-white')\n        if (currentChatTab) {\n          currentChatTab.click()\n        }\n      }\n    }\n\n    this.#activatePanel(boothId)\n    // close the mobile room switcher\n    Alpine.evaluate(event.srcElement, 'showMobileRooms = false')\n  }\n\n  handleBoothTabCloseClick(event) {\n    let boothTab = event.currentTarget.closest('tab');\n    this.#closeBoothTab(boothTab)\n    const url = this.closeBoothUrlValue.replace('exhibitorRegistrationId', boothTab.dataset.id)\n    const request = new FetchRequest('POST', url, { responseKind: 'turbo-stream' })\n    request.perform()\n    event.preventDefault();\n  }\n\n  #closeBoothTab(boothTab) {\n    let boothPanel = this.#panelForBooth(boothTab.dataset.id);\n    let nearestBoothTab = boothTab?.nextElementSibling || boothTab?.previousElementSibling;\n\n    boothPanel.remove();\n    boothTab.remove();\n\n    this.#activatePanel(nearestBoothTab.dataset.id);\n  }\n\n  #selectInitialTab() {\n    //put something here o select the tab if a new chat comes in maybe? hrmm.\n    const tab = this.#tabForUrlParam()\n    if (tab) {\n      this.#activatePanel(tab.dataset.id)\n    } else if (this.privateVcfValue) {\n      // For private VCF events, skip lobby and go directly to the first (and only) company booth\n      const firstBoothPanel = this.panelTargets.find(panel => panel.dataset.id !== 'lobby')\n      if (firstBoothPanel) {\n        this.#activatePanel(firstBoothPanel.dataset.id)\n      }\n    } else {\n      this.#activatePanel('lobby')\n    }\n  }\n\n  #tabForUrlParam() {\n    const urlParams = new URLSearchParams(window.location.search);\n    if (urlParams.has('booth_id')) {\n      const boothId = urlParams.get('booth_id')\n      return this.#tabForBooth(boothId)\n    }\n  }\n\n  #fetchPanel(node) {\n    const boothId = node.dataset.id\n    if (this.#panelForBooth(boothId)) { return } // if the panel is already here, nope out\n\n    // Set loading panel before making the request\n    this.#loadingPanel = boothId\n\n    const url = `/candidate/events/${this.eventIdValue}/load_booth_panel/${boothId}?loading_type=append&focus_meeting=${node.dataset.focusMeetingId}`\n    const request = new FetchRequest('GET', url, { responseKind: 'turbo-stream' })\n    request.perform()\n      .catch(error => {\n        console.error('Error loading booth panel:', error)\n        // Reset loading panel if there was an error\n        if (this.#loadingPanel === boothId) {\n          this.#loadingPanel = null\n        }\n      })\n  }\n\n  #activatePanel(boothId) {\n    const tab = this.#tabForBooth(boothId)\n    const panel = this.#panelForBooth(boothId)\n\n    if (!tab) {\n      return false\n    }\n\n    this.#hideAll()\n    tab.classList.add(...this.activeClasses)\n    tab.classList.remove(...this.blinkingClasses)\n\n    if (panel) {\n      panel.classList.remove('hidden')\n\n      // Activation IS the state change: sync state.activeMeetingId here, not only in the tab-focused\n      // handler. Deep links (?booth_id=) and page refreshes activate panels without any tab click, so\n      // no tab-focused ever fires \u2014 the receive-broadcast controller then unloads itself on its\n      // activeMeetingId guard and an in-progress broadcast never shows for this candidate.\n      this.#syncActiveMeeting(panel)\n\n      // If panel was marked stale during a reconnect, catch up\n      if (panel.dataset.stale === \"true\") {\n        delete panel.dataset.stale;\n        panel.dispatchEvent(new CustomEvent('panel:activated-stale', { bubbles: true }));\n\n        // Fetch presence for this panel's meeting if we can find it\n        const textChatEl = panel.querySelector('[data-text-chat-meeting-id-value]');\n        if (textChatEl) {\n          this.fetchPresence(textChatEl.dataset.textChatMeetingIdValue);\n        }\n      }\n\n      return true\n    } else {\n      // Set as loading panel so it activates when connected\n      this.#loadingPanel = boothId\n      return false\n    }\n  }\n\n  // Resolve the activated panel's current meeting \u2014 the focused inner chat tab if there is one\n  // (matching what a tab-focused event would report), else the booth's main room, else null (lobby) \u2014\n  // and point the shared broadcast state at it. fetchActiveMeetingBroadcast then restores any\n  // broadcast already live in that room (it no-ops when none is registered).\n  #syncActiveMeeting(panel) {\n    const focusedTab = panel.querySelector('[data-tabbed-chat-target=\"tab\"][data-focus=\"true\"]')\n    const chatContainer = panel.querySelector('[data-tabbed-chat-main-room-id-value]')\n    state.activeMeetingId = focusedTab?.dataset.meetingId ||\n                            chatContainer?.dataset.tabbedChatMainRoomIdValue ||\n                            null\n    state.fetchActiveMeetingBroadcast()\n  }\n\n  #hideAll() {\n    this.panelTargets.forEach((panel) => {panel.classList.add('hidden')})\n    this.tabTargets.forEach((tab) => {tab.classList.remove(...this.activeClasses)})\n  }\n\n  #panelForBooth(boothId) {\n    return this.panelTargets.find(panel => panel.dataset.id == boothId)\n  }\n\n  #tabForBooth(boothId) {\n    return this.tabTargets.find(tab => tab.dataset.id == boothId)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n\n  cancelNewPosition(event) {\n    event.preventDefault()\n    event.target.closest('.new_candidate_position_form').remove();\n  }\n\n  deletePosition(event) {\n    event.preventDefault()\n    if (confirm(\"Are you sure you want to delete this position?\")) {\n      const request = new FetchRequest('DELETE', event.target, { responseKind: 'turbo-stream' });\n      request.perform();\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['tabs', 'container', 'allCount', 'interestedCount', 'oneononeCount', 'invitedCount', 'candidate'];\n  static values = { currentUserId: String, muted: Boolean, unreadCount: Number }\n  activeClasses = ['bg-primary', 'text-white']\n  inactiveClasses = ['bg-gray-200']\n\n  connect() {\n    // Options for the observer (which mutations to observe)\n    const config = { attributes: false, childList: true, subtree: true };\n\n    // when a presence is added, removed, or changes - update counts\n    const callback = (mutationList, observer) => {\n      for (const mutation of mutationList) {\n        if (mutation.type === \"childList\") {\n          this.updateCounts()\n          this.updateFavorites()\n        } else if (mutation.type === \"attributes\") {\n          console.log(`The ${mutation.attributeName} attribute was modified.`);\n        }\n      }\n    };\n\n    // Create an observer instance linked to the callback function\n    const observer = new MutationObserver(callback);\n    observer.observe(this.containerTarget, config);   \n    this.updateCounts()\n    this.updateFavorites()\n  }    \n\n  showAll(event){\n    this.resetTabs()\n    this.selectTab('all')\n    this.containerTarget.querySelectorAll('.presence.hidden').forEach(node => {\n      node.classList.remove('hidden');\n    });\n  }\n\n  showTab(event){\n    this.resetTabs()\n    const tab = event.params.tab\n    this.selectTab(tab)\n    this.containerTarget.querySelectorAll(`.presence`).forEach(node => {\n      if (node.classList.contains(tab)) {        \n        node.classList.remove('hidden');\n      } else {\n        node.classList.add('hidden');\n      }\n    });\n  }\n\n  resetTabs(){\n    this.tabsTargets.forEach(tabs => {\n      tabs.querySelectorAll('tab').forEach(node => {\n        node.classList.remove(...this.activeClasses)\n        node.classList.add(...this.inactiveClasses)\n      })\n    });\n  }\n\n  selectTab(tab){\n    this.tabsTargets.forEach(tabs => {\n      tabs.querySelector(`[data-candidate-presence-tab-param=\"${tab}\"]`).classList.add(...this.activeClasses)\n      tabs.querySelector(`[data-candidate-presence-tab-param=\"${tab}\"]`).classList.remove(...this.inactiveClasses)\n    });\n  }\n\n  updateCounts(){\n    this.allCountTarget.innerHTML =  this.containerTarget.querySelectorAll(`.presence`).length\n    this.interestedCountTarget.innerHTML =  this.containerTarget.querySelectorAll(`.interested`).length\n    this.oneononeCountTarget.innerHTML =  this.containerTarget.querySelectorAll(`.oneonone`).length\n    this.invitedCountTarget.innerHTML =  this.containerTarget.querySelectorAll(`.invited`).length\n  }\n\n  updateFavorites() {\n    this.candidateTargets.forEach(candidate => {\n      const byIds = JSON.parse(candidate.dataset.favoritedByIds)\n\n      if (byIds.includes(this.currentUserIdValue)) {\n        candidate.querySelector('#favorite').classList.remove('hidden')\n      } else {\n        candidate.querySelector('#favorite').classList.add('hidden')\n      }\n    })\n  }\n\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n  async registerCandidate(event) {\n    const response = await this.submitForm(event)\n    if (response.ok && window.dataLayer) {\n      window.dataLayer.push({event: 'Registration', event_category: 'Candidate', event_label: 'Success', send_to: 'G-8Q16ZPY0KY'})\n    }\n    response.renderTurboStream()\n  }\n\n  async createProfile(event) {\n    const response = await this.submitForm(event)\n    if (response.redirected && !response.response.url.includes('registration_wizard')) {\n      window.location.href = response.response.url\n    } else {\n      response.renderTurboStream()\n    }\n  }\n\n  async submitForm(event) {\n    event.preventDefault()\n    // currentTarget is only valid synchronously \u2014 capture before the await.\n    const button = event.currentTarget\n    const form = button?.form || event.target.form || event.target.closest('form')\n    button.disabled = true\n    try {\n      const recaptchaToken = await this.scoreUser()\n      const formData = new FormData(form)\n      formData.append('candidate_registration_wizard_contact_info_form[recaptcha_token]', recaptchaToken)\n      const request = new FetchRequest('post', form.action, { responseKind: 'turbo-stream', body: formData })\n      return await request.perform()\n    } finally {\n      button.disabled = false\n    }\n  }\n\n  // Never let a reCAPTCHA failure swallow the submit \u2014 the token is\n  // advisory server-side. We still retry loading the script first (see\n  // ensureRecaptcha); this is only the last-resort fallback.\n  async scoreUser() {\n    try {\n      const grecaptcha = await this.ensureRecaptcha()\n      return await grecaptcha.execute(this.siteKey(), { action: 'submit' })\n    } catch (error) {\n      console.warn('reCAPTCHA unavailable \u2014 submitting without a token', error)\n      return ''\n    }\n  }\n\n  ensureRecaptcha() {\n    return new Promise((resolve, reject) => {\n      // A Turbo Drive body swap destroys the injected .grecaptcha-badge\n      // while window.grecaptcha survives \u2014 detect and re-initialize.\n      const stale = window.grecaptcha && !document.querySelector('.grecaptcha-badge')\n      if (window.grecaptcha && !stale) {\n        window.grecaptcha.ready(() => resolve(window.grecaptcha))\n        return\n      }\n\n      const script = this.recaptchaScript(stale)\n\n      const fail = (error) => {\n        clearTimeout(timeout)\n        script.remove()\n        delete window.grecaptcha\n        delete window.___grecaptcha_cfg\n        reject(error)\n      }\n\n      const timeout = setTimeout(() => fail(new Error('reCAPTCHA script did not load')), 10000)\n      script.addEventListener('load', () => {\n        clearTimeout(timeout)\n        window.grecaptcha.ready(() => resolve(window.grecaptcha))\n      })\n      script.addEventListener('error', fail)\n    })\n  }\n\n  recaptchaScript(stale) {\n    if (stale) {\n      delete window.grecaptcha\n      delete window.___grecaptcha_cfg\n    }\n\n    const existing = document.querySelector('script[src*=\"recaptcha/api.js\"]')\n    if (existing && !stale) return existing\n\n    const siteKey = this.siteKey()\n    existing?.remove()\n    const script = document.createElement('script')\n    script.src = `https://www.google.com/recaptcha/api.js?render=${siteKey}`\n    script.async = true\n    document.head.appendChild(script)\n    return script\n  }\n\n  siteKey() {\n    const existing = document.querySelector('script[src*=\"recaptcha/api.js\"]')\n    const match = existing?.src?.match(/[?&]render=([^&]*)/)\n    return match && decodeURIComponent(match[1])\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n\n  cancelNewResume(event) {\n    event.preventDefault()\n    event.target.closest('.new_candidate_resume_form').remove();\n  }\n\n  deleteResume(event) {\n    event.preventDefault()\n    if (confirm(\"Are you sure you want to delete this resume?\")) {\n      const request = new FetchRequest('DELETE', event.target, { responseKind: 'turbo-stream' });\n      request.perform();\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n  static targets = ['resultsCountUrl', 'resultsValue', 'loadingContainer']\n\n  async count(event) {\n    this.resultsValueTarget.innerText = 'Calculating...'\n    this.loadingContainerTarget.classList.remove('hidden')\n    event.preventDefault()\n    const frm = event.target.nodeName == 'FORM' ? event.target : event.target.form\n    const formData = new FormData(frm)\n    formData.delete(\"_method\")\n\n    const params = new URLSearchParams(formData)\n    const url = new URL(this.resultsCountUrlTarget.value, window.location.origin)\n    url.search = params.toString()\n    const request = new FetchRequest('GET', url.toString(), { responseKind: 'turbo-stream' })\n    return await request.perform()\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    'video',\n    'shortCode',\n  ];\n\n  connect() {\n    if (this.videoTarget.checkVisibility()) {\n      navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } })\n      .then(stream => {\n        this.startScanning();\n      }).catch(err => {\n        document.getElementById('request-camera-access').classList.remove('hidden');\n      });\n    }\n  }\n\n  disconnect() {\n    this.codeReader.reset();\n  }\n\n  requestCameraAccess() {\n    navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } })\n    .then(stream => {\n      this.startScanning();\n    }).catch(err => {\n      console.log(err)\n    });\n  }\n\n  stopScanning() {\n    if(!this.videoTarget) return\n    this.videoTarget.srcObject.getTracks().forEach(track => track.stop())\n  }\n\n  startScanning() {\n    document.getElementById('request-camera-access').classList.add('hidden');\n    import(\"@zxing/library/esm\").then(reader => {\n      this.codeReader = new reader.BrowserQRCodeReader();\n      this.notFound = reader.NotFoundException;\n      this.checksum =  reader.ChecksumException;\n      this.format =  reader.FormatException;\n      this.codeReader.timeBetweenDecodingAttempts = 500\n      this.decodeContinuously(this.codeReader, undefined, this.videoTarget);\n    })\n  }\n\n  decodeContinuously(codeReader, selectedDeviceId, video) {\n    codeReader.decodeFromInputVideoDeviceContinuously(selectedDeviceId, video, (result, err) => {\n      if (result) {\n        const arr = result.text.split(\"/\")\n        const shortCode = arr[arr.length - 1]\n        const shortCodeReg = new RegExp(\"^[A-Za-z]{5}$\")\n        if (shortCodeReg.test(shortCode)) {\n          this.stopScanning()\n          this.saveCandidate(shortCode)\n        } else {\n          this.showErrorMessage(\"Invalid QR code. Please try again.\")\n        }\n      }\n\n      if(!this.videoTarget.checkVisibility()) {\n        this.stopScanning()\n        throw new Error(\"Video element is not visible. Stopping camera capture\")\n      }\n  \n      if (err) {\n        if (err instanceof this.notFound) {\n          console.log('No QR code found.')\n        } else {\n          this.showErrorMessage(\"Error decoding QR code. Please try again.\")\n        }\n      }\n    })\n  }\n  \n  saveCandidate(shortCode) {\n    this.shortCodeTarget.value = shortCode\n    this.shortCodeTarget.closest('form').requestSubmit()\n    this.stopScanning()\n  }\n\n  showErrorMessage(message) {\n    window.dispatchEvent(new CustomEvent('flash-component-modal-alert-show'))\n    document.getElementById('flash-component-modal-alert').getElementsByTagName('p')[0].innerText = message\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport dayjs from 'dayjs'\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear'\ndayjs.extend(quarterOfYear)\n\nexport default class extends Controller {\n  static targets = [\"output\", \"options\", \"optionTemplate\", \"rangeStartDate\", \"rangeEndDate\"]\n\n  connect() {\n    this.updateOutput();\n  }\n\n  updateOutput() {\n    const outputTarget = this.outputTarget;\n    const startDate = this.data.get(\"startDate\") ? dayjs(this.data.get(\"startDate\")) : null;\n    const endDate = this.data.get(\"endDate\") ? dayjs(this.data.get(\"endDate\")) : null;\n    outputTarget.innerHTML = `<p> ${this.formatDateRangeLabel(startDate, endDate)}</p>`;\n  }\n\n  handleRangeSubmit(event) {\n    event.preventDefault();\n    const startDate = this.rangeStartDateTarget.value;\n    const endDate = this.rangeEndDateTarget.value;\n    this.selectDateRange(startDate, endDate);\n  }\n\n  selectDateRange(startDate, endDate) {\n    const turboFrameTarget = this.data.get(\"turboFrameTarget\")\n    this.setDateRange(startDate, endDate)\n    this.updateOutput()\n\n    if (turboFrameTarget) {\n      // Update TurboFrame content\n      const turboFrame = document.querySelector(`#${turboFrameTarget}`)\n      const newUrl = this.buildUrl(turboFrame.src, startDate, endDate)\n      turboFrame.src = newUrl.href\n    } else {\n      // Reload the entire page\n      const newUrl = this.buildUrl(window.location.href, startDate, endDate);\n      window.location.href = newUrl.toString();\n    }\n  }\n\n  setDateRange(startDate, endDate) {\n    startDate ? this.data.set(\"startDate\", startDate) : this.data.delete(\"startDate\");\n    endDate ? this.data.set(\"endDate\", endDate) : this.data.delete(\"endDate\");\n  }\n\n  buildUrl(path, startDate, endDate) {\n    const url = new URL(path);\n    startDate ? url.searchParams.set(\"start_date\", startDate) : url.searchParams.delete(\"start_date\");\n    endDate ? url.searchParams.set(\"end_date\", endDate) : url.searchParams.delete(\"end_date\");\n    return url;\n  }\n\n  formatDateRangeLabel(startDate, endDate) {\n    if (startDate && !endDate) {\n      return `<p>From ${this.formatDate(startDate)} to Present</p>`;\n    } else if (!startDate && endDate) {\n      return `<p>Until ${this.formatDate(endDate)}</p>`;\n    } else if (startDate && endDate) {\n      return `<p>${this.formatDate(startDate)} to ${this.formatDate(endDate)}</p>`;\n    } else {\n      return `<p>Select Range</p>`;\n    }\n  }\n\n  formatDate(date) {\n    return dayjs(date).format(\"YYYY-MM-DD\");\n  }\n}", "import DateRangePickerController from \"./date_range_picker_controller\"\nimport dayjs from 'dayjs'\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear'\ndayjs.extend(quarterOfYear)\n\nexport default class extends DateRangePickerController {\n  static targets = [\"output\", \"options\", \"optionTemplate\", \"rangeStartDate\", \"rangeEndDate\"]\n\n  connect() {\n    this.generateDateRanges();\n    this.updateOutput();\n    this.renderOptions();\n  }\n\n  generateDateRanges() {\n    const today = dayjs();\n    const thisWeekStart = today.startOf(\"week\");\n    const thisWeekEnd = today.endOf(\"week\");\n    const thisMonthStart = today.startOf(\"month\");\n    const thisMonthEnd = today.endOf(\"month\");\n    const thisQuarterStart = today.startOf(\"quarter\");\n    const thisQuarterEnd = today.endOf(\"quarter\");\n    const lastWeekStart = today.subtract(1, \"week\").startOf(\"week\");\n    const lastWeekEnd = today.subtract(1, \"week\").endOf(\"week\");\n    const lastMonthStart = today.subtract(1, \"month\").startOf(\"month\");\n    const lastMonthEnd = today.subtract(1, \"month\").endOf(\"month\");\n    const lastQuarterStart = today.subtract(1, \"quarter\").startOf(\"quarter\");\n    const lastQuarterEnd = today.subtract(1, \"quarter\").endOf(\"quarter\");\n\n    this.constructor.dateRanges = [\n      {label: 'Entire Period', startDate: null, endDate: null},\n      {label: 'Today', startDate: today, endDate: today},\n      {label: 'This Week', startDate: thisWeekStart, endDate: thisWeekEnd},\n      {label: 'This Month', startDate: thisMonthStart, endDate: thisMonthEnd},\n      {label: 'This Quarter', startDate: thisQuarterStart, endDate: thisQuarterEnd},\n      {label: 'Last Week', startDate: lastWeekStart, endDate: lastWeekEnd},\n      {label: 'Last Month', startDate: lastMonthStart, endDate: lastMonthEnd},\n      {label: 'Last Quarter', startDate: lastQuarterStart, endDate: lastQuarterEnd},\n    ];\n  }\n\n  updateOutput() {\n    const outputTarget = this.outputTarget;\n    const startDate = this.data.get(\"startDate\") ? dayjs(this.data.get(\"startDate\")) : null;\n    const endDate = this.data.get(\"endDate\") ? dayjs(this.data.get(\"endDate\")) : null;\n    const selected = this.constructor.dateRanges.find((dateRange) => {\n      return (dateRange.startDate && dateRange.startDate.isSame(startDate, 'day') &&\n        dateRange.endDate && dateRange.endDate.isSame(endDate, 'day') ) ||\n        startDate === null && endDate === null && dateRange.label === 'Entire Period';\n    });\n    outputTarget.innerHTML = `<p> ${this.formatDateRangeLabel(selected, startDate, endDate)}</p>`;\n  }\n\n  renderOptions() {\n    const dateRanges = this.constructor.dateRanges;\n\n    dateRanges.reverse().forEach((dateRange) => {\n      const option = this.optionTemplateTarget.content.cloneNode(true);\n      option.childNodes[1].innerHTML = dateRange.label;\n      option.childNodes[1].addEventListener(\"click\", () => this.handleOptionClick(dateRange.label));\n\n      this.optionsTarget.prepend(option);\n    });\n  }\n\n  handleOptionClick(label) {\n    const dateRange = this.constructor.dateRanges.find((dateRange) => dateRange.label === label);\n    const startDate = dateRange.startDate ? this.formatDate(dateRange.startDate) : null;\n    const endDate = dateRange.endDate ? this.formatDate(dateRange.endDate) : null;\n    this.selectDateRange(startDate, endDate);\n  }\n\n  formatDateRangeLabel(selected, startDate, endDate) {\n    if (selected) {\n      return `<p>${selected.label}</p>`;\n    } else {\n      return super.formatDateRangeLabel(startDate, endDate);\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport { state } from \"../state\"\n\nexport default class extends Controller {\n  static targets = ['tab', 'panel', 'privateTab', 'noChatMessage', 'privateChatContainer', 'deviceTester']\n  static values = { eventId: String, mainRoomId: String, endPrivateUrl: String, ratingUrl: String, candidatePaneUrl: String }\n  static classes = [ \"active\", \"blinking\" ]\n\n  connect() {\n    state.activeMeetingId = this.mainRoomIdValue;\n    if (this.hasDeviceTesterTarget) {\n      const videoDeviceConfigured = localStorage.getItem('preferredVideoDevice');\n      const audioDeviceConfigured = localStorage.getItem('preferredAudioDevice');\n      const audioOutputConfigured = localStorage.getItem('preferredAudioOutput');\n      \n      // If no device configuration found, show the device tester button\n      if (!videoDeviceConfigured && !audioDeviceConfigured && !audioOutputConfigured) {\n        this.deviceTesterTarget.classList.remove('hidden');\n        \n        // Optional: Add a pulsing animation to draw attention\n        this.deviceTesterTarget.classList.add('animate-pulse');\n      }\n    }\n\n    this.boundHandleTabFocused = this.handleTabFocused.bind(this)\n    document.addEventListener('tab-focused', this.boundHandleTabFocused)\n\n    this.boundHandleBlinkNotification = this.handleBlinkNotification.bind(this)\n    document.addEventListener('blink-notification', this.boundHandleBlinkNotification)\n \n    this.boundHandleTabClosed = this.handleTabClosed.bind(this)\n    document.addEventListener('tab-closed', this.boundHandleTabClosed)\n   \n    this.boundHandleTabCountChanged = this.handleTabCountChanged.bind(this)\n    document.addEventListener('tab-count-changed', this.boundHandleTabCountChanged) \n\n    this.boundDeviceConfigured = this.checkDeviceConfiguration.bind(this);\n    document.addEventListener('device-settings-updated', this.boundDeviceConfigured)\n\n    this.boundCatchUp = this.handleCatchUp.bind(this);\n    document.addEventListener('cable:catch-up', this.boundCatchUp);\n  }\n\n  disconnect() {\n    document.removeEventListener('blink-notification', this.boundHandleBlinkNotification)\n    document.removeEventListener('tab-closed', this.boundHandleTabClosed)\n    document.removeEventListener('device-settings-updated', this.boundDeviceConfigured)\n    document.removeEventListener('cable:catch-up', this.boundCatchUp);\n  }\n\n  async handleCatchUp() {\n    // Refresh presence for the main room\n    if (this.mainRoomIdValue) {\n      const request = new FetchRequest('get', `/meetings/${this.mainRoomIdValue}/presence`, { responseKind: 'turbo-stream' });\n      try {\n        await request.perform();\n      } catch (error) {\n        console.warn('Presence refresh failed', error);\n      }\n    }\n  }\n\n    // Method to check device configuration and update button visibility\n    checkDeviceConfiguration() {\n      if (this.hasDeviceTesterTarget) {\n        const videoDeviceConfigured = localStorage.getItem('preferredVideoDevice');\n        const audioDeviceConfigured = localStorage.getItem('preferredAudioDevice');\n        const audioOutputConfigured = localStorage.getItem('preferredAudioOutput');\n        \n        if (videoDeviceConfigured || audioDeviceConfigured || audioOutputConfigured) {\n          // If any device is configured, hide the button\n          this.deviceTesterTarget.classList.add('hidden');\n          this.deviceTesterTarget.classList.remove('animate-pulse');\n        } else {\n          // If no device is configured, show the button\n          this.deviceTesterTarget.classList.remove('hidden');\n          this.deviceTesterTarget.classList.add('animate-pulse');\n        }\n      }\n    }\n\n  handleTabFocused(event) {\n    const { meetingId, otherParticipantUserId, otherParticipantRole } = event.detail    \n    if (otherParticipantRole === 'candidate') {\n      document.getElementById('candidate_details').src = this.candidatePaneUrlValue.replace('candidateId', otherParticipantUserId)\n    }\n    if (meetingId && this.mainRoomIdValue && meetingId !== this.mainRoomIdValue) {\n      Alpine.evaluate(this.element, 'chat = \"private\"')\n    }\n  }\n  \n  handleTabCountChanged(event) {\n    const { tabCount } = event.detail\n    if (tabCount === 0) {\n      this.noChatMessageTarget.classList.remove('hidden')\n      this.privateChatContainerTarget.classList.add('hidden')\n    } else {\n      this.noChatMessageTarget.classList.add('hidden')\n      this.privateChatContainerTarget.classList.remove('hidden')\n    }\n  }\n\n  handleBlinkNotification(event) {\n    const { meetingId } = event.detail\n\n    if (meetingId && this.mainRoomIdValue && meetingId !== this.mainRoomIdValue) {\n      const isPrivateTabActive = Alpine.evaluate(this.element, 'chat === \"private\"')\n      \n      if (!isPrivateTabActive) {\n        this.privateTabTarget.classList.add(...this.blinkingClasses)\n      }\n    }\n  }\n  \n  handleTabClosed(event) {\n    const { meetingId, otherParticipantUserId, otherParticipantRole } = event.detail\n    \n    if (meetingId) {\n      const url = this.endPrivateUrlValue.replace('meetingId', meetingId)\n      \n      const request = new FetchRequest('GET', url, { responseKind: 'turbo-stream' })\n      request.perform()\n        .catch(error => {\n          console.error('Error ending private meeting:', error)\n        })\n      \n      if (otherParticipantRole === 'candidate') {\n        document.getElementById('client_event_modal').src = `${this.ratingUrlValue}?candidate_id=${otherParticipantUserId}`\n      }\n    }\n  }\n\n  tabClicked(event) {\n    const panel = document.getElementById('private_room_panel')\n    const tab = panel.querySelector('.animate-blink-primary') \n    if (tab) {\n      tab.click()\n    }\n    event.target.classList.remove(...this.blinkingClasses)\n    const meetingId = event.currentTarget.dataset.meetingId\n    state.activeMeetingId = meetingId\n    state.fetchActiveMeetingBroadcast()\n    this.dispatch('tab-focused', {detail: {meetingId: meetingId}, bubbles: true, prefix: false })\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n  static targets = ['field', 'errors', 'parent'];\n  static values = { field: String, validators: String, form: String }\n  \n  parsedValidators() {\n    return JSON.parse(this.validatorsValue)\n  }\n  \n  connect() {\n\n  }\n  \n  async validate(event) {\n    var errors = await this.collectValidationErrors()\n    if (errors.length > 0) {\n      this.errorsTarget.innerHTML = errors.join(\", \")\n      this.errorsTarget.classList.remove(\"hidden\")\n      this.fieldTarget.classList.add(\"border-red-500\")\n    } else {\n      this.errorsTarget.classList.add(\"hidden\")\n      this.fieldTarget.classList.remove(\"border-red-500\")\n      this.errorsTarget.innerHTML = \"\"\n    }    \n  }\n\n  async clearValidationErrors(event) {\n    var errors = await this.runClientSideValidations()\n    if (errors.length == 0) {\n      this.errorsTarget.classList.add(\"hidden\")\n      this.fieldTarget.classList.remove(\"border-red-500\")\n      this.errorsTarget.innerHTML = \"\"\n    }\n  }\n\n  async collectValidationErrors() {\n    const clientErrors = await this.runClientSideValidations()\n    const serverErrors = await this.runServerSideValidations()\n    return clientErrors.concat(serverErrors)\n  }\n\n  async runServerSideValidations() {\n    const errors = []\n    for (const validator of this.parsedValidators()) {\n      if (validator.name == \"server\"){\n        const error = await this.validateServer(validator)\n        if (error) {\n          errors.push(error)\n        }\n      }\n    }\n    return errors\n  }\n\n  async runClientSideValidations() {\n    const errors = []\n    for (const validator of this.parsedValidators()) {\n      if (validator.name == \"required\"){\n        const error = await this.validateRequired(validator)\n        if (error) {\n          errors.push(error)\n        }\n      }\n      if (validator.name == \"format\"){\n        const error = await this.validateFormat(validator)\n        if (error) {\n          errors.push(error)\n        }\n      }\n    }\n\n    // because the confirm validation live on the password field instead of the password_confirmation field\n    // we need to check if the password_confirmation field is present and if it is, we need to validate it against \n    // the password field if the password field is present and has the confirm validator\n    if (this.fieldTarget.name.indexOf(\"_confirmation\") > -1) {\n      const passwordField = this.fieldTarget.form.querySelector(`input[name='${this.fieldTarget.name.replace('_confirmation', '')}']`) //this is okay, but needs to be built from the confirmation and use some sort of contains becuase the way rails builds element names\n\n      if (passwordField) {\n        const passwordParent = passwordField.parentNode.parentNode.parentNode // would be better if it traveresed up the dom until it found the parent with the data-client-validations-parent-target\n\n        const passwordValidators = JSON.parse(passwordParent.dataset.clientValidationsValidatorsValue)\n        if (passwordValidators.some(validator => validator.name == \"confirmation\")) {\n          const error = await this.validateConfirm(passwordField.value, this.fieldTarget.value)\n          if (error) {\n            errors.push(error)\n          }\n        }\n      }\n    }\n\n    return errors\n  }\n\n  async validateConfirm(value, confirmationValue) {\n    if (value != confirmationValue) {\n      return \"doesn't match\"\n    }\n  }\n\n  async validateRequired(validator) {\n    const value = this.fieldTarget.value\n    if (value == \"\") {\n      return \"can't be blank\"\n    }\n  }\n\n  async validateFormat(validator) {\n    const value = this.fieldTarget.value\n    const regex = new RegExp(validator.options.with.replace(/\\\\A|\\\\z/g, \"\"), \"g\")\n    if (!regex.test(value)) {\n      return validator.options.message || \"is invalid format\"\n    }\n  }\n\n  async validateServer(validator) {\n    try {\n      const value = this.fieldTarget.value\n      const request = new FetchRequest('post', `${window.location.origin}/api/v1/field_validation/`, {\n        body: JSON.stringify({field: this.fieldValue, form: this.formValue, inputs: this.cleanedFormState()})\n      })\n\n      const response = await request.perform()\n      const body = await response.json\n\n      if (body.errors.length > 0) {\n        return body.errors\n      } else {\n        return null\n      }\n    } catch (error) {\n      return null\n    }\n  }\n\n  formState() {\n    const formData = new FormData(this.fieldTarget.form)\n    const formState = {}\n    formData.forEach((value, key) => {\n      if (key.indexOf(\"[]\") > -1) {\n        if(formState[key]) {\n          formState[key].push(value)\n        } else {\n          formState[key] = [value]\n        }\n      } else {\n        formState[key] = value\n      }\n    })\n    return formState\n  }\n\n  cleanedFormState() {\n    const fieldDenylist = [\"password_confirmation\",\"middle_name\",\"verify_email\",\"user_languages\"]\n    const formState = this.formState()\n\n    Object.keys(formState).forEach(key => {\n      if (fieldDenylist.some(element => key.includes(element))) {\n        delete formState[key]\n      }\n    })\n\n    return formState\n  }\n}", "/*\nTurbo 7.3.0\nCopyright \u00A9 2023 37signals LLC\n */\n(function () {\n    if (window.Reflect === undefined ||\n        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 = 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 = window.Event.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    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    static get observedAttributes() {\n        return [\"disabled\", \"complete\", \"loading\", \"src\"];\n    }\n    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        return this.delegate.sourceURLReloaded();\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\n        }\n        else if (name == \"complete\") {\n            this.delegate.completeChanged();\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\":\n            return FrameLoadingStyle.lazy;\n        default:\n            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|php))$/);\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 ? url.href.slice(0, -(anchor.length + 1)) : 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 activateScriptElement(element) {\n    if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n        return element;\n    }\n    else {\n        const createdScriptElement = document.createElement(\"script\");\n        const cspNonce = getMetaContent(\"csp-nonce\");\n        if (cspNonce) {\n            createdScriptElement.nonce = cspNonce;\n        }\n        createdScriptElement.textContent = element.textContent;\n        createdScriptElement.async = false;\n        copyElementAttributes(createdScriptElement, element);\n        return createdScriptElement;\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of sourceElement.attributes) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction createDocumentFragment(html) {\n    const template = document.createElement(\"template\");\n    template.innerHTML = html;\n    return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, {\n        cancelable,\n        bubbles: true,\n        composed: true,\n        detail,\n    });\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.from({ length: 36 })\n        .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    })\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 hasAttribute(attributeName, ...elements) {\n    return elements.some((element) => element && element.hasAttribute(attributeName));\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}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n    return new Promise((resolve) => {\n        const onComplete = () => {\n            element.removeEventListener(\"error\", onComplete);\n            element.removeEventListener(\"load\", onComplete);\n            resolve();\n        };\n        element.addEventListener(\"load\", onComplete, { once: true });\n        element.addEventListener(\"error\", onComplete, { once: true });\n        setTimeout(resolve, timeoutInMilliseconds);\n    });\n}\nfunction getHistoryMethodForAction(action) {\n    switch (action) {\n        case \"replace\":\n            return history.replaceState;\n        case \"advance\":\n        case \"restore\":\n            return history.pushState;\n    }\n}\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n    const action = getAttribute(\"data-turbo-action\", ...elements);\n    return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n    return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n    const element = getMetaElement(name);\n    return element && element.content;\n}\nfunction setMetaContent(name, content) {\n    let element = getMetaElement(name);\n    if (!element) {\n        element = document.createElement(\"meta\");\n        element.setAttribute(\"name\", name);\n        document.head.appendChild(element);\n    }\n    element.setAttribute(\"content\", content);\n    return element;\n}\nfunction findClosestRecursively(element, selector) {\n    var _a;\n    if (element instanceof Element) {\n        return (element.closest(selector) ||\n            findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\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\":\n            return FetchMethod.get;\n        case \"post\":\n            return FetchMethod.post;\n        case \"put\":\n            return FetchMethod.put;\n        case \"patch\":\n            return FetchMethod.patch;\n        case \"delete\":\n            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        const { fetchOptions } = this;\n        this.delegate.prepareRequest(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                if (this.willDelegateErrorHandling(error)) {\n                    this.delegate.requestErrored(this, error);\n                }\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\", {\n            cancelable: true,\n            detail: { fetchResponse },\n            target: this.target,\n        });\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.isSafe ? 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 isSafe() {\n        return this.method === FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\n    }\n    acceptResponseType(mimeType) {\n        this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\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    willDelegateErrorHandling(error) {\n        const event = dispatch(\"turbo:fetch-request-error\", {\n            target: this.target,\n            cancelable: true,\n            detail: { request: this, error: error },\n        });\n        return !event.defaultPrevented;\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    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(createDocumentFragment(message));\n        }\n        else {\n            return message;\n        }\n    }\n    constructor(fragment) {\n        this.fragment = importStreamElements(fragment);\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n    for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n        const streamElement = document.importNode(element, true);\n        for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n            inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n        }\n        element.replaceWith(streamElement);\n    }\n    return fragment;\n}\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:\n            return FormEnctype.multipart;\n        case FormEnctype.plain:\n            return FormEnctype.plain;\n        default:\n            return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\n    static confirmMethod(message, _element, _submitter) {\n        return Promise.resolve(confirm(message));\n    }\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    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        if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n            return this.submitter.getAttribute(\"formaction\") || \"\";\n        }\n        else {\n            return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n        }\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 isSafe() {\n        return this.fetchRequest.isSafe;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n        if (typeof confirmationMessage === \"string\") {\n            const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\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    prepareRequest(request) {\n        if (!request.isSafe) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                request.headers[\"X-CSRF-Token\"] = token;\n            }\n        }\n        if (this.requestAcceptsTurboStreamResponse(request)) {\n            request.acceptResponseType(StreamMessage.contentType);\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        this.setSubmitsWith();\n        dispatch(\"turbo:submit-start\", {\n            target: this.formElement,\n            detail: { formSubmission: this },\n        });\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        this.resetSubmitterText();\n        dispatch(\"turbo:submit-end\", {\n            target: this.formElement,\n            detail: Object.assign({ formSubmission: this }, this.result),\n        });\n        this.delegate.formSubmissionFinished(this);\n    }\n    setSubmitsWith() {\n        if (!this.submitter || !this.submitsWith)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.originalSubmitText = this.submitter.innerHTML;\n            this.submitter.innerHTML = this.submitsWith;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            this.originalSubmitText = input.value;\n            input.value = this.submitsWith;\n        }\n    }\n    resetSubmitterText() {\n        if (!this.submitter || !this.originalSubmitText)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.submitter.innerHTML = this.originalSubmitText;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            input.value = this.originalSubmitText;\n        }\n    }\n    requestMustRedirect(request) {\n        return !request.isSafe && this.mustRedirect;\n    }\n    requestAcceptsTurboStreamResponse(request) {\n        return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n    }\n    get submitsWith() {\n        var _a;\n        return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\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) {\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 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 activeElement() {\n        return this.element.ownerDocument.activeElement;\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        const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n        for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n            if (element.closest(inertDisabledOrHidden) == null)\n                return element;\n            else\n                continue;\n        }\n        return null;\n    }\n    get permanentElements() {\n        return queryPermanentElementsAll(this.element);\n    }\n    getPermanentElementById(id) {\n        return getPermanentElementById(this.element, id);\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}\nfunction getPermanentElementById(node, id) {\n    return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n    return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.submitCaptured = () => {\n            this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n            this.eventTarget.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                    submissionDoesNotDismissDialog(form, submitter) &&\n                    submissionDoesNotTargetIFrame(form, submitter) &&\n                    this.delegate.willSubmitForm(form, submitter)) {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.delegate.formSubmitted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n    return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n    if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n        const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n        for (const element of document.getElementsByName(target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\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                await this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n                const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.delegate.preloadOnLoadLinksForView(this.element);\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(renderer.reloadReason);\n        }\n    }\n    invalidate(reason) {\n        this.delegate.viewInvalidated(reason);\n    }\n    async prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        await 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    missing() {\n        this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\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, event.detail.originalEvent)) {\n                    this.clickEvent.preventDefault();\n                    event.preventDefault();\n                    this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n                }\n            }\n            delete this.clickEvent;\n        });\n        this.willVisit = ((_event) => {\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 ? target : target instanceof Node ? target.parentElement : null;\n        return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n}\n\nclass LinkClickObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.clickCaptured = () => {\n            this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n            this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link && doesNotTargetIFrame(link)) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.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        return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\nfunction doesNotTargetIFrame(anchor) {\n    if (anchor.hasAttribute(\"target\")) {\n        for (const element of document.getElementsByName(anchor.target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass FormLinkClickObserver {\n    constructor(delegate, element) {\n        this.delegate = delegate;\n        this.linkInterceptor = new LinkClickObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n    }\n    willFollowLinkToLocation(link, location, originalEvent) {\n        return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n            link.hasAttribute(\"data-turbo-method\"));\n    }\n    followedLinkToLocation(link, location) {\n        const form = document.createElement(\"form\");\n        const type = \"hidden\";\n        for (const [name, value] of location.searchParams) {\n            form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n        }\n        const action = Object.assign(location, { search: \"\" });\n        form.setAttribute(\"data-turbo\", \"true\");\n        form.setAttribute(\"action\", action.href);\n        form.setAttribute(\"hidden\", \"\");\n        const method = link.getAttribute(\"data-turbo-method\");\n        if (method)\n            form.setAttribute(\"method\", method);\n        const turboFrame = link.getAttribute(\"data-turbo-frame\");\n        if (turboFrame)\n            form.setAttribute(\"data-turbo-frame\", turboFrame);\n        const turboAction = getVisitAction(link);\n        if (turboAction)\n            form.setAttribute(\"data-turbo-action\", turboAction);\n        const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n        if (turboConfirm)\n            form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n        const turboStream = link.hasAttribute(\"data-turbo-stream\");\n        if (turboStream)\n            form.setAttribute(\"data-turbo-stream\", \"\");\n        this.delegate.submittedFormLinkToLocation(link, location, form);\n        document.body.appendChild(form);\n        form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n        requestAnimationFrame(() => form.requestSubmit());\n    }\n}\n\nclass Bardo {\n    static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n        const bardo = new this(delegate, permanentElementMap);\n        bardo.enter();\n        await callback();\n        bardo.leave();\n    }\n    constructor(delegate, permanentElementMap) {\n        this.delegate = delegate;\n        this.permanentElementMap = permanentElementMap;\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n            this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\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            this.delegate.leavingBardo(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, renderElement, isPreview, willRender = true) {\n        this.activeElement = null;\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.renderElement = renderElement;\n        this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n    }\n    get shouldRender() {\n        return true;\n    }\n    get reloadReason() {\n        return;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    async preservingPermanentElements(callback) {\n        await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\n        }\n    }\n    enteringBardo(currentPermanentElement) {\n        if (this.activeElement)\n            return;\n        if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n            this.activeElement = this.currentSnapshot.activeElement;\n        }\n    }\n    leavingBardo(currentPermanentElement) {\n        if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n            this.activeElement.focus();\n            this.activeElement = null;\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}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(currentElement);\n        destinationRange.deleteContents();\n        const frameElement = newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            currentElement.appendChild(sourceRange.extractContents());\n        }\n    }\n    constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n        this.delegate = delegate;\n    }\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        this.delegate.willRenderFrame(this.currentElement, this.newElement);\n        this.renderElement(this.currentElement, this.newElement);\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            const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n            if (element) {\n                element.scrollIntoView({ block, behavior });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = activateScriptElement(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}\nfunction readScrollBehavior(value, defaultValue) {\n    if (value == \"auto\" || value == \"smooth\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\n\nclass ProgressBar {\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: 2147483647;\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    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    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        if (this.cspNonce) {\n            element.nonce = this.cspNonce;\n        }\n        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\n    }\n    get cspNonce() {\n        return getMetaContent(\"csp-nonce\");\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 ? element.getAttribute(\"content\") : 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.localName;\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.localName;\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.localName;\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.localName;\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    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    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\n    clone() {\n        const clonedElement = this.element.cloneNode(true);\n        const selectElements = this.element.querySelectorAll(\"select\");\n        const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n        for (const [index, source] of selectElements.entries()) {\n            const clone = clonedSelectElements[index];\n            for (const option of clone.selectedOptions)\n                option.selected = false;\n            for (const option of source.selectedOptions)\n                clone.options[option.index].selected = true;\n        }\n        for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n            clonedPasswordInput.value = \"\";\n        }\n        return new PageSnapshot(clonedElement, 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    updateHistory: true,\n    shouldCacheSnapshot: true,\n    acceptsStreamResponse: false,\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.shouldCacheSnapshot = true;\n        this.acceptsStreamResponse = 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, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\n        this.snapshot = snapshot;\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.updateHistory = updateHistory;\n        this.scrolled = !willRender;\n        this.shouldCacheSnapshot = shouldCacheSnapshot;\n        this.acceptsStreamResponse = acceptsStreamResponse;\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.followRedirect();\n            if (!this.followedRedirect) {\n                this.adapter.visitCompleted(this);\n                this.delegate.visitCompleted(this);\n            }\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 && this.updateHistory) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = 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                if (this.shouldCacheSnapshot)\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, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\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, this);\n                    this.performScroll();\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                shouldCacheSnapshot: false,\n                willRender: false,\n            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.performScroll();\n                this.changeHistory();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    prepareRequest(request) {\n        if (this.acceptsStreamResponse) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(_request, _response) { }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\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({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(_request, _error) {\n        this.recordResponse({\n            statusCode: SystemStatusCode.networkFailure,\n            redirected: false,\n        });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled && !this.view.forceReloaded) {\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\":\n                return history.replaceState;\n            case \"advance\":\n            case \"restore\":\n                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(this.snapshot).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    }\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, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n    }\n    visitStarted(visit) {\n        this.location = visit.location;\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\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                    reason: \"request_failed\",\n                    context: {\n                        statusCode,\n                    },\n                });\n            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(_visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(_visit) { }\n    pageInvalidated(reason) {\n        this.reload(reason);\n    }\n    visitFailed(_visit) { }\n    visitRendered(_visit) { }\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(reason) {\n        var _a;\n        dispatch(\"turbo:reload\", { detail: reason });\n        window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.selector = \"[data-turbo-temporary]\";\n        this.deprecatedSelector = \"[data-turbo-cache=false]\";\n        this.started = false;\n        this.removeTemporaryElements = ((_event) => {\n            for (const element of this.temporaryElements) {\n                element.remove();\n            }\n        });\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    get temporaryElements() {\n        return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n    }\n    get temporaryElementsWithDeprecation() {\n        const elements = document.querySelectorAll(this.deprecatedSelector);\n        if (elements.length) {\n            console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n        }\n        return [...elements];\n    }\n}\n\nclass FrameRedirector {\n    constructor(session, element) {\n        this.session = session;\n        this.element = element;\n        this.linkInterceptor = new LinkInterceptor(this, element);\n        this.formSubmitObserver = new FormSubmitObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n        this.formSubmitObserver.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n        this.formSubmitObserver.stop();\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldRedirect(element);\n    }\n    linkClickIntercepted(element, url, event) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.linkClickIntercepted(element, url, event);\n        }\n    }\n    willSubmitForm(element, submitter) {\n        return (element.closest(\"turbo-frame\") == null &&\n            this.shouldSubmit(element, submitter) &&\n            this.shouldRedirect(element, submitter));\n    }\n    formSubmitted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.delegate.formSubmitted(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 isNavigatable = element instanceof HTMLFormElement\n            ? this.session.submissionIsNavigatable(element, submitter)\n            : this.session.elementIsNavigatable(element);\n        if (isNavigatable) {\n            const frame = this.findFrameElement(element, submitter);\n            return frame ? frame != element.closest(\"turbo-frame\") : false;\n        }\n        else {\n            return false;\n        }\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 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                const shouldCacheSnapshot = formSubmission.isSafe;\n                if (!shouldCacheSnapshot) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = {\n                    action,\n                    shouldCacheSnapshot,\n                    response: { statusCode, responseHTML, redirected },\n                };\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, this.currentVisit);\n            }\n            else {\n                await this.view.renderPage(snapshot, false, true, this.currentVisit);\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({ submitter, formElement }) {\n        return getVisitAction(submitter, formElement) || \"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 StreamMessageRenderer {\n    render({ fragment }) {\n        Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n    }\n    enteringBardo(currentPermanentElement, newPermanentElement) {\n        newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n    }\n    leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n    const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n    const permanentElementMap = {};\n    for (const permanentElementInDocument of permanentElementsInDocument) {\n        const { id } = permanentElementInDocument;\n        for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n            const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n            if (elementInStream) {\n                permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n            }\n        }\n    }\n    return permanentElementMap;\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(StreamMessage.wrap(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    static renderElement(currentElement, newElement) {\n        const { documentElement, body } = document;\n        documentElement.replaceChild(newElement, body);\n    }\n    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head } = document;\n        documentElement.replaceChild(this.newHead, head);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = activateScriptElement(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    static renderElement(currentElement, newElement) {\n        if (document.body && newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(newElement);\n        }\n        else {\n            document.documentElement.appendChild(newElement);\n        }\n    }\n    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    get reloadReason() {\n        if (!this.newSnapshot.isVisitable) {\n            return {\n                reason: \"turbo_visit_control_is_reload\",\n            };\n        }\n        if (!this.trackedElementsAreIdentical) {\n            return {\n                reason: \"tracked_element_mismatch\",\n            };\n        }\n    }\n    async prepareToRender() {\n        await this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            await 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    async mergeHead() {\n        const mergedHeadElements = this.mergeProvisionalElements();\n        const newStylesheetElements = this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        await mergedHeadElements;\n        await newStylesheetElements;\n    }\n    async replaceBody() {\n        await this.preservingPermanentElements(async () => {\n            this.activateNewBody();\n            await this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    async copyNewHeadStylesheetElements() {\n        const loadingElements = [];\n        for (const element of this.newHeadStylesheetElements) {\n            loadingElements.push(waitForLoad(element));\n            document.head.appendChild(element);\n        }\n        await Promise.all(loadingElements);\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(activateScriptElement(element));\n        }\n    }\n    async mergeProvisionalElements() {\n        const newHeadElements = [...this.newHeadProvisionalElements];\n        for (const element of this.currentHeadProvisionalElements) {\n            if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n                document.head.removeChild(element);\n            }\n        }\n        for (const element of newHeadElements) {\n            document.head.appendChild(element);\n        }\n    }\n    isCurrentElementInElementList(element, elementList) {\n        for (const [index, newElement] of elementList.entries()) {\n            if (element.tagName == \"TITLE\") {\n                if (newElement.tagName != \"TITLE\") {\n                    continue;\n                }\n                if (element.innerHTML == newElement.innerHTML) {\n                    elementList.splice(index, 1);\n                    return true;\n                }\n            }\n            if (newElement.isEqualNode(element)) {\n                elementList.splice(index, 1);\n                return true;\n            }\n        }\n        return false;\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 = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    async assignNewBody() {\n        await this.renderElement(this.currentElement, this.newElement);\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        this.forceReloaded = false;\n    }\n    renderPage(snapshot, isPreview = false, willRender = true, visit) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n        if (!renderer.shouldRender) {\n            this.forceReloaded = true;\n        }\n        else {\n            visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        }\n        return this.render(renderer);\n    }\n    renderError(snapshot, visit) {\n        visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot(snapshot = this.snapshot) {\n        if (snapshot.isCacheable) {\n            this.delegate.viewWillCacheSnapshot();\n            const { 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}\n\nclass Preloader {\n    constructor(delegate) {\n        this.selector = \"a[data-turbo-preload]\";\n        this.delegate = delegate;\n    }\n    get snapshotCache() {\n        return this.delegate.navigator.view.snapshotCache;\n    }\n    start() {\n        if (document.readyState === \"loading\") {\n            return document.addEventListener(\"DOMContentLoaded\", () => {\n                this.preloadOnLoadLinksForView(document.body);\n            });\n        }\n        else {\n            this.preloadOnLoadLinksForView(document.body);\n        }\n    }\n    preloadOnLoadLinksForView(element) {\n        for (const link of element.querySelectorAll(this.selector)) {\n            this.preloadURL(link);\n        }\n    }\n    async preloadURL(link) {\n        const location = new URL(link.href);\n        if (this.snapshotCache.has(location)) {\n            return;\n        }\n        try {\n            const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n            const responseText = await response.text();\n            const snapshot = PageSnapshot.fromHTMLString(responseText);\n            this.snapshotCache.put(location, snapshot);\n        }\n        catch (_) {\n        }\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(this);\n        this.preloader = new Preloader(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, window);\n        this.formSubmitObserver = new FormSubmitObserver(this, document);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n        this.frameRedirector = new FrameRedirector(this, document.documentElement);\n        this.streamMessageRenderer = new StreamMessageRenderer();\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n        this.formMode = \"on\";\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.start();\n            this.formLinkClickObserver.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.preloader.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.formLinkClickObserver.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        const frameElement = options.frame ? document.getElementById(options.frame) : null;\n        if (frameElement instanceof FrameElement) {\n            frameElement.src = location.toString();\n            frameElement.loaded;\n        }\n        else {\n            this.navigator.proposeVisit(expandURL(location), options);\n        }\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        this.streamMessageRenderer.render(StreamMessage.wrap(message));\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\n    }\n    setFormMode(mode) {\n        this.formMode = mode;\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, {\n                action: \"restore\",\n                historyChanged: true,\n            });\n        }\n        else {\n            this.adapter.pageInvalidated({\n                reason: \"turbo_disabled\",\n            });\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willSubmitFormLinkToLocation(link, location) {\n        return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n    }\n    submittedFormLinkToLocation() { }\n    willFollowLinkToLocation(link, location, event) {\n        return (this.elementIsNavigatable(link) &&\n            locationIsVisitable(location, this.snapshot.rootLocation) &&\n            this.applicationAllowsFollowingLinkToLocation(link, location, event));\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n        this.visit(location.href, { action, acceptsStreamResponse });\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        if (!visit.acceptsStreamResponse) {\n            markAsBusy(document.documentElement);\n        }\n        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\n        clearBusyState(document.documentElement);\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.submissionIsNavigatable(form, 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 }, options) {\n        const event = this.notifyApplicationBeforeRender(element, options);\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    preloadOnLoadLinksForView(element) {\n        this.preloader.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated(reason) {\n        this.adapter.pageInvalidated(reason);\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location, ev) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n        return dispatch(\"turbo:click\", {\n            target: link,\n            detail: { url: location.href, originalEvent: event },\n            cancelable: true,\n        });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", {\n            detail: { url: location.href },\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, options) {\n        return dispatch(\"turbo:before-render\", {\n            detail: Object.assign({ newBody }, options),\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        return dispatch(\"turbo:load\", {\n            detail: { url: this.location.href, timing },\n        });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", {\n            oldURL: oldURL.toString(),\n            newURL: newURL.toString(),\n        }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", {\n            detail: { fetchResponse },\n            target: frame,\n            cancelable: true,\n        });\n    }\n    submissionIsNavigatable(form, submitter) {\n        if (this.formMode == \"off\") {\n            return false;\n        }\n        else {\n            const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n            if (this.formMode == \"optin\") {\n                return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n            }\n            else {\n                return submitterIsNavigatable && this.elementIsNavigatable(form);\n            }\n        }\n    }\n    elementIsNavigatable(element) {\n        const container = findClosestRecursively(element, \"[data-turbo]\");\n        const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n        if (this.drive || withinFrame) {\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        return getVisitAction(link) || \"advance\";\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\nclass Cache {\n    constructor(session) {\n        this.session = session;\n    }\n    clear() {\n        this.session.clearCache();\n    }\n    resetCacheControl() {\n        this.setCacheControl(\"\");\n    }\n    exemptPageFromCache() {\n        this.setCacheControl(\"no-cache\");\n    }\n    exemptPageFromPreview() {\n        this.setCacheControl(\"no-preview\");\n    }\n    setCacheControl(value) {\n        setMetaContent(\"turbo-cache-control\", value);\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((targetElement) => {\n            targetElement.innerHTML = \"\";\n            targetElement.append(this.templateContent);\n        });\n    },\n};\n\nconst session = new Session();\nconst cache = new Cache(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    console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n    session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    cache: cache,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\n    FrameRenderer: FrameRenderer,\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    setFormMode: setFormMode,\n    StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\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.ignoredAttributes = new Set();\n        this.action = null;\n        this.visitCachedSnapshot = ({ element }) => {\n            const frame = element.querySelector(\"#\" + this.element.id);\n            if (frame && this.previousFrameElement) {\n                frame.replaceChildren(...this.previousFrameElement.children);\n            }\n            delete this.previousFrameElement;\n        };\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n        this.linkInterceptor = new LinkInterceptor(this, this.element);\n        this.restorationIdentifier = uuid();\n        this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            else {\n                this.loadSourceURL();\n            }\n            this.formLinkClickObserver.start();\n            this.linkInterceptor.start();\n            this.formSubmitObserver.start();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkInterceptor.stop();\n            this.formSubmitObserver.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.isIgnoringChangesTo(\"src\"))\n            return;\n        if (this.element.isConnected) {\n            this.complete = false;\n        }\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLReloaded() {\n        const { src } = this.element;\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            this.element.removeAttribute(\"complete\");\n        });\n        this.element.src = null;\n        this.element.src = src;\n        return this.element.loaded;\n    }\n    completeChanged() {\n        if (this.isIgnoringChangesTo(\"complete\"))\n            return;\n        this.loadSourceURL();\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.enabled && this.isActive && !this.complete && this.sourceURL) {\n            this.element.loaded = this.visit(expandURL(this.sourceURL));\n            this.appearanceObserver.stop();\n            await this.element.loaded;\n            this.hasBeenLoaded = true;\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 document = parseHTMLDocument(html);\n                const pageSnapshot = PageSnapshot.fromDocument(document);\n                if (pageSnapshot.isVisitable) {\n                    await this.loadFrameResponse(fetchResponse, document);\n                }\n                else {\n                    await this.handleUnvisitableFrameResponse(fetchResponse);\n                }\n            }\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(element) {\n        this.proposeVisitIfNavigatedWithAction(element, element);\n        this.loadSourceURL();\n    }\n    willSubmitFormLinkToLocation(link) {\n        return this.shouldInterceptNavigation(link);\n    }\n    submittedFormLinkToLocation(link, _location, form) {\n        const frame = this.findFrameElement(link);\n        if (frame)\n            form.setAttribute(\"data-turbo-frame\", frame.id);\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldInterceptNavigation(element);\n    }\n    linkClickIntercepted(element, location) {\n        this.navigateFrame(element, location);\n    }\n    willSubmitForm(element, submitter) {\n        return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmitted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareRequest(fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareRequest(request) {\n        var _a;\n        request.headers[\"Turbo-Frame\"] = this.id;\n        if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\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    async requestFailedWithResponse(request, response) {\n        await this.loadResponse(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        frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n        if (!formSubmission.isSafe) {\n            session.clearCache();\n        }\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n        session.clearCache();\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender({ element: newFrame }, options) {\n        const event = dispatch(\"turbo:before-frame-render\", {\n            target: this.element,\n            detail: Object.assign({ newFrame }, options),\n            cancelable: true,\n        });\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) { }\n    preloadOnLoadLinksForView(element) {\n        session.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated() { }\n    willRenderFrame(currentElement, _newElement) {\n        this.previousFrameElement = currentElement.cloneNode(true);\n    }\n    async loadFrameResponse(fetchResponse, document) {\n        const newFrameElement = await this.extractForeignFrameElement(document.body);\n        if (newFrameElement) {\n            const snapshot = new Snapshot(newFrameElement);\n            const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n            if (this.view.renderPromise)\n                await this.view.renderPromise;\n            this.changeHistory();\n            await this.view.render(renderer);\n            this.complete = true;\n            session.frameRendered(fetchResponse, this.element);\n            session.frameLoaded(this.element);\n            this.fetchResponseLoaded(fetchResponse);\n        }\n        else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n            this.handleFrameMissingFromResponse(fetchResponse);\n        }\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        frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        this.withCurrentNavigationElement(element, () => {\n            frame.src = url;\n        });\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        this.action = getVisitAction(submitter, element, frame);\n        if (this.action) {\n            const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n            const { visitCachedSnapshot } = frame.delegate;\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                    const options = {\n                        response,\n                        visitCachedSnapshot,\n                        willRender: false,\n                        updateHistory: false,\n                        restorationIdentifier: this.restorationIdentifier,\n                        snapshot: pageSnapshot,\n                    };\n                    if (this.action)\n                        options.action = this.action;\n                    session.visit(frame.src, options);\n                }\n            };\n        }\n    }\n    changeHistory() {\n        if (this.action) {\n            const method = getHistoryMethodForAction(this.action);\n            session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n        }\n    }\n    async handleUnvisitableFrameResponse(fetchResponse) {\n        console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n        await this.visitResponse(fetchResponse.response);\n    }\n    willHandleFrameMissingFromResponse(fetchResponse) {\n        this.element.setAttribute(\"complete\", \"\");\n        const response = fetchResponse.response;\n        const visit = async (url, options = {}) => {\n            if (url instanceof Response) {\n                this.visitResponse(url);\n            }\n            else {\n                session.visit(url, options);\n            }\n        };\n        const event = dispatch(\"turbo:frame-missing\", {\n            target: this.element,\n            detail: { response, visit },\n            cancelable: true,\n        });\n        return !event.defaultPrevented;\n    }\n    handleFrameMissingFromResponse(fetchResponse) {\n        this.view.missing();\n        this.throwFrameMissingError(fetchResponse);\n    }\n    throwFrameMissingError(fetchResponse) {\n        const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n        throw new TurboFrameMissingError(message);\n    }\n    async visitResponse(response) {\n        const wrapped = new FetchResponse(response);\n        const responseHTML = await wrapped.responseHTML;\n        const { location, redirected, statusCode } = wrapped;\n        return session.visit(location, { response: { redirected, statusCode, responseHTML } });\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            element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n            if (element) {\n                return element;\n            }\n            element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n            if (element) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            return new FrameElement();\n        }\n        return null;\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.elementIsNavigatable(element)) {\n            return false;\n        }\n        if (submitter && !session.elementIsNavigatable(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    set sourceURL(sourceURL) {\n        this.ignoringChangesToAttribute(\"src\", () => {\n            this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        });\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n    get complete() {\n        return this.element.hasAttribute(\"complete\");\n    }\n    set complete(value) {\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            if (value) {\n                this.element.setAttribute(\"complete\", \"\");\n            }\n            else {\n                this.element.removeAttribute(\"complete\");\n            }\n        });\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    isIgnoringChangesTo(attributeName) {\n        return this.ignoredAttributes.has(attributeName);\n    }\n    ignoringChangesToAttribute(attributeName, callback) {\n        this.ignoredAttributes.add(attributeName);\n        callback();\n        this.ignoredAttributes.delete(attributeName);\n    }\n    withCurrentNavigationElement(element, callback) {\n        this.currentNavigationElement = element;\n        callback();\n        delete this.currentNavigationElement;\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\nclass StreamElement extends HTMLElement {\n    static async renderElement(newElement) {\n        await newElement.performAction();\n    }\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            const event = this.beforeRenderEvent;\n            if (this.dispatchEvent(event)) {\n                await nextAnimationFrame();\n                await event.detail.render(this);\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 === null) {\n            const template = this.ownerDocument.createElement(\"template\");\n            this.appendChild(template);\n            return template;\n        }\n        else 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\", {\n            bubbles: true,\n            cancelable: true,\n            detail: { newStream: this, render: StreamElement.renderElement },\n        });\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\nclass StreamSourceElement extends HTMLElement {\n    constructor() {\n        super(...arguments);\n        this.streamSource = null;\n    }\n    connectedCallback() {\n        this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n        connectStreamSource(this.streamSource);\n    }\n    disconnectedCallback() {\n        if (this.streamSource) {\n            disconnectStreamSource(this.streamSource);\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\") || \"\";\n    }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n    customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n    customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n    customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    element = element.parentElement;\n    while (element) {\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        element = element.parentElement;\n    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "import { cable } from \"@hotwired/turbo-rails\"\n\nlet subscription = null\nlet disconnectedAt = null\n\nexport function getDisconnectedAt() { return disconnectedAt }\nexport function isConnected() { return disconnectedAt === null }\n\nexport async function subscribe() {\n  if (subscription) return\n\n  const consumer = await cable.getConsumer()\n\n  subscription = consumer.subscriptions.create(\"ConnectionHealthChannel\", {\n    connected() {\n      const wasDisconnected = disconnectedAt !== null\n      const now = Date.now()\n\n      if (wasDisconnected) {\n        const duration = now - disconnectedAt\n        document.dispatchEvent(new CustomEvent('cable:reconnected', {\n          detail: { disconnectedAt, reconnectedAt: now, duration }\n        }))\n      }\n\n      disconnectedAt = null\n      document.dispatchEvent(new CustomEvent('cable:connected'))\n    },\n\n    disconnected() {\n      disconnectedAt = Date.now()\n      document.dispatchEvent(new CustomEvent('cable:disconnected', {\n        detail: { disconnectedAt }\n      }))\n    },\n\n    rejected() {\n      document.dispatchEvent(new CustomEvent('cable:rejected'))\n    }\n  })\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport * as Turbo from \"@hotwired/turbo\"\nimport { subscribe as subscribeConnectionHealth } from \"../channels/connection_health_channel\"\n\nexport default class extends Controller {\n  static values = {\n    reconnectThreshold: { type: Number, default: 300000 },\n    reconnectJitter: { type: Number, default: 3000 }\n  }\n\n  connect() {\n    this.pageLeaving = false\n\n    // This controller only mounts on the live event pages, so subscribing here (rather than\n    // globally at import) keeps the ConnectionHealthChannel off every other page. subscribe()\n    // is idempotent, so multiple monitors on a page share one subscription.\n    subscribeConnectionHealth()\n\n    this.boundOnReconnected = this.onReconnected.bind(this)\n    this.boundOnDisconnected = this.onDisconnected.bind(this)\n    this.boundOnPageLeave = () => { this.pageLeaving = true }\n\n    document.addEventListener('cable:reconnected', this.boundOnReconnected)\n    document.addEventListener('cable:disconnected', this.boundOnDisconnected)\n    window.addEventListener('beforeunload', this.boundOnPageLeave)\n    document.addEventListener('turbo:before-visit', this.boundOnPageLeave)\n  }\n\n  disconnect() {\n    clearTimeout(this.reconnectTimer)\n    document.removeEventListener('cable:reconnected', this.boundOnReconnected)\n    document.removeEventListener('cable:disconnected', this.boundOnDisconnected)\n    window.removeEventListener('beforeunload', this.boundOnPageLeave)\n    document.removeEventListener('turbo:before-visit', this.boundOnPageLeave)\n  }\n\n  onDisconnected() {\n    if (this.pageLeaving) return\n    this.showReconnectingBanner()\n  }\n\n  onReconnected(event) {\n    this.hideReconnectingBanner()\n    const { duration, disconnectedAt } = event.detail\n\n    // Spread the recovery work across clients. A cable instance recycling (or a shared blip) drops many\n    // sockets at once and they reconnect near-simultaneously; firing the reload / catch-up / presence /\n    // pending-notification requests in the same instant is a thundering herd. Defer by a random delay up\n    // to reconnectJitter, and coalesce a flapping connection's repeated reconnects into the latest one.\n    clearTimeout(this.reconnectTimer)\n    this.reconnectTimer = setTimeout(() => {\n      if (this.pageLeaving) return\n\n      if (duration > this.reconnectThresholdValue) {\n        Turbo.visit(window.location.href, { action: \"replace\" })\n        return\n      }\n\n      // Dispatch catch-up event for domain controllers\n      document.dispatchEvent(new CustomEvent('cable:catch-up', {\n        detail: { disconnectedAt }\n      }))\n\n      // Mark non-visible meeting panels as stale\n      this.markNonVisiblePanelsStale()\n\n      // Fetch pending notifications\n      this.fetchPendingNotifications()\n    }, Math.random() * this.reconnectJitterValue)\n  }\n\n  markNonVisiblePanelsStale() {\n    const panels = this.element.querySelectorAll('[data-meeting-panel]')\n    panels.forEach(panel => {\n      if (panel.classList.contains('hidden') || panel.offsetParent === null) {\n        panel.dataset.stale = \"true\"\n      }\n    })\n  }\n\n  async fetchPendingNotifications() {\n    const request = new FetchRequest('get', '/notifications/pending', { responseKind: 'turbo-stream' })\n    try {\n      await request.perform()\n    } catch (error) {\n      // Idempotent and re-run on the next reconnect; a failure here must not surface as an unhandled\n      // rejection.\n      console.warn('Pending-notifications catch-up failed', error)\n    }\n  }\n\n  showReconnectingBanner() {\n    if (this.reconnectingBanner) return\n\n    this.reconnectingBanner = document.createElement('div')\n    this.reconnectingBanner.id = 'reconnecting-banner'\n    this.reconnectingBanner.className = 'fixed top-0 left-0 right-0 z-50 bg-yellow-500 text-center text-sm py-1 text-white font-medium'\n    this.reconnectingBanner.textContent = 'Connection lost. Reconnecting...'\n    document.body.prepend(this.reconnectingBanner)\n  }\n\n  hideReconnectingBanner() {\n    if (this.reconnectingBanner) {\n      this.reconnectingBanner.remove()\n      this.reconnectingBanner = null\n    }\n  }\n}\n", "import dayjs from 'dayjs'\nimport timezone from 'dayjs/plugin/timezone'\nimport advancedFormat from 'dayjs/plugin/advancedFormat'\ndayjs.extend(timezone)\ndayjs.extend(advancedFormat)\n\nexport default {\n  dateWithTimeZone: function(date) {\n    return dayjs(date).format('dddd, MMMM D, YYYY | hh:mm A z')\n  },\n\n  fullDate: function(date) {\n    return dayjs(date).format('dddd, MMMM D, YYYY')\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport DateTimeFormatter from \"../utils/date_time_formatter\"\nimport dayjs from 'dayjs'\nimport duration from 'dayjs/plugin/duration'\ndayjs.extend(duration)\n\nexport default class extends Controller {\n  static targets = ['startDateTime', 'output']\n\n  connect() {\n    this.updateCountDown()\n    this.interval = setInterval(() => { this.updateCountDown() }, 6000)\n  }\n\n  disconnect() {\n    clearInterval(this.interval)\n  }\n\n  updateCountDown() {\n    const startDate = dayjs(this.startDateTimeTarget.innerText);\n    const currentDate = dayjs();\n    const duration = dayjs.duration(startDate.diff(currentDate));\n\n    const days = duration.days();\n    const hours = duration.hours();\n    const minutes = duration.minutes();\n    const milliseconds = duration.asMilliseconds();\n\n    if (days < -1) {\n        this.outputTarget.textContent = \"Event has passed\";\n    } else if (milliseconds < 0) {\n        this.outputTarget.textContent = \"Event has started\";\n    } else if (days === 0 && milliseconds > 0) {\n        this.outputTarget.innerHTML= `<span class='text-primary-1 font-bold'>Countdown to Kickoff</span><br/>${hours} Hours ${minutes.toString().padStart(2, '0')} Mins Remaining`;\n    } else {\n        this.outputTarget.textContent = DateTimeFormatter.fullDate(startDate);\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"roleSelector\"]\n\n  connect() {\n    this.roleSelectorTarget.addEventListener('change', (e) => {\n      const value = e.target.value;\n      const url = {\n        \"Candidate\": \"/candidate/dashboard\",\n        \"Employer\": \"/employer/dashboard\",\n        \"Staff\": \"/staff/dashboard\"\n      }[value]\n\n      if(url) {\n        window.location = url;\n      } else {\n        console.error(\"Could not determine redirect!\")\n      }\n    })\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"dateInput\", \"tmpDisplay\"]\n  static values = {defaultDate: String, flatpickr: String}\n\n  connect() {\n    this.initDatePicker();\n    console.log(\"date picker connected\", this)\n  }\n\n  disconnect() {\n    this.findAndRemoveElement('.flatpickr-calendar');\n    this.findAndRemoveElement(\".date-range-picker[readonly='readonly']\");\n  }\n\n  initDatePicker(input = null, options = {}) {\n    options = Object.assign(JSON.parse(this.flatpickrValue || \"{}\"), options)\n    options = Object.assign({\n      mode: 'range',\n      altInput: true,\n      allowInvalidPreload: true,\n      altFormat: 'M d, Y',\n      dateFormat: 'm/d/Y',\n      plugins: [],\n      onReady: function (selectedDates, dateStr, instance) {\n          instance._initStartDate = selectedDates[0];\n          instance._initEndDate = selectedDates[1];\n          if(selectedDates.length > 0) {\n            this.setDisplayDate(selectedDates, instance);\n          } else if(this.defaultDateValue) {\n            this.setDisplayText(instance, this.defaultDateValue)\n          } else {\n            this.setDisplayText(instance, 'Not Selected')\n          }\n      }.bind(this),\n      onClose: function (selectedDates, dateStr, instance) {\n        this.setDisplayDate(selectedDates, instance);\n      }.bind(this),\n    }, options)\n\n    window.flatpickr(input || this.dateInputTarget, options)\n  }\n\n  findAndRemoveElement(selector) {\n    const elem = this.element.querySelector(selector);\n    elem ? elem.parentNode.removeChild(elem) : null;\n  }\n\n  getSelectedDates(selectedDates, instance) {\n    let startDate = selectedDates[0];\n    let endDate = selectedDates[1];\n    if (!endDate) {\n        endDate = new Date();\n    }\n    if (startDate > endDate) {\n        let tempDate = startDate;\n        startDate = endDate;\n        endDate = tempDate;\n    }\n    startDate = instance.formatDate(startDate, instance.config.dateFormat);\n    endDate = instance.formatDate(endDate, instance.config.dateFormat);\n    return { startDate, endDate };\n  }\n\n  setDisplayDate(selectedDates, instance, displayTarget = this.tmpDisplayTarget) {\n    const formattedStartDate = selectedDates[0] ? instance.formatDate(selectedDates[0], instance.config.altFormat) : null;\n    const formattedEndDate = selectedDates[1] ? instance.formatDate(selectedDates[1], instance.config.altFormat) : null;\n\n    if (formattedStartDate && formattedEndDate) {\n      const displayDate = `${formattedStartDate} to ${formattedEndDate}`;\n      this.setDisplayText(instance, displayDate, displayTarget)\n    }\n  }\n\n  setDisplayText(instance, text, displayTarget = this.tmpDisplayTarget) {\n    displayTarget.innerText = instance.altInput.value = text;\n    displayTarget.hidden = true;\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n// import dayjs from 'dayjs'\n// import quarterOfYear from 'dayjs/plugin/quarterOfYear'\n// dayjs.extend(quarterOfYear)\n\nexport default class extends Controller {\n  static targets = [\"output\", \"options\", \"optionTemplate\", \"rangeStartDate\", \"rangeEndDate\", \"actual\"]\n\n  connect() {\n    this.updateOutput();\n  }\n\n  updateOutput() {\n    const outputTarget = this.outputTarget;\n    const actualTarget = this.actualTarget;\n    const startDate = this.data.get(\"startDate\")? this.data.get(\"startDate\") : null // ? Date.parse(this.data.get(\"startDate\")) : null;\n    const endDate = this.data.get(\"endDate\") ? this.data.get(\"endDate\") : null // Date.parse(this.data.get(\"endDate\")) : null;\n    outputTarget.innerHTML = `<p> ${this.formatDateRangeLabel(startDate, endDate)}</p>`;\n    actualTarget.value = this.formatDateRangeLabel(startDate, endDate);\n  }\n\n  handleRangeSubmit(event) {\n    event.preventDefault();\n    const startDate = this.rangeStartDateTarget.value;\n    const endDate = this.rangeEndDateTarget.value;\n    this.selectDateRange(startDate, endDate);\n  }\n\n  selectDateRange(startDate, endDate) {    \n    this.setDateRange(startDate, endDate)\n    this.updateOutput()\n\n  }\n\n  setDateRange(startDate, endDate) {\n    startDate ? this.data.set(\"startDate\", startDate) : this.data.delete(\"startDate\");\n    endDate ? this.data.set(\"endDate\", endDate) : this.data.delete(\"endDate\");\n  }\n\n  formatDateRangeLabel(startDate, endDate) {\n    if (startDate && !endDate) {\n      return `after ${this.formatDate(startDate)}`;\n    } else if (!startDate && endDate) {\n      return `before ${this.formatDate(endDate)}`;\n    } else if (startDate && endDate) {\n      return `${this.formatDate(startDate)} to ${this.formatDate(endDate)}`;\n    } else {\n      return `Select Range`;\n    }\n  }\n\n  formatDate(date) {\n    return date\n    // return dayjs(date).format(\"YYYY-MM-DD\");\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    'status', 'videoSource', 'audioSource', 'audioOutput',\n    'videoContainer', 'audioMeter',\n    'startTest', 'stopTest', 'toggleMute', 'toggleVideo',\n    'successMessage', 'errorMessage', 'errorText',\n    'permissionButton', 'deviceSelectors',\n    'playTestSound', 'stopTestSound' // Add new targets\n  ]\n  \n  static values = { \n    apiKey: String, \n    sessionId: String, \n    token: String,\n    callbackPath: String\n  }\n\n  connect() {\n    this.devices = []\n    this.publisher = null\n    this.audioLevel = 0\n    this.audioAnalyzer = null\n    this.audioContext = null\n    this.audioSource = null\n    this.audioMuted = false\n    this.videoEnabled = true\n    this.mediaStream = null\n    this.testAudio = null\n    \n    this.session = OT.initSession(this.apiKeyValue, this.sessionIdValue)\n    \n    // Show initial permission screen instead of immediately trying to list devices\n    this.statusTarget.textContent = 'Permission needed to access your camera and microphone'\n    \n    // Add event listener for modal close\n    this.modalCloseHandler = this.handleModalClose.bind(this)\n    document.addEventListener('modalClose', this.modalCloseHandler)\n  }\n  \n  // New method to request permissions first\n  async requestDevicePermissions() {\n    try {\n      this.statusTarget.textContent = 'Requesting camera and microphone access...'\n      \n      // Request both audio and video permissions\n      const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true })\n      \n      // Store the stream temporarily so we can stop it after getting device info\n      this.tempStream = stream\n      \n      // After permission is granted, get the device list\n      await this.getDevices()\n      \n      // Clean up the temporary stream\n      this.tempStream.getTracks().forEach(track => track.stop())\n      this.tempStream = null\n      \n      // Show the device selector UI\n      this.permissionButtonTarget.classList.add('hidden')\n      this.deviceSelectorsTarget.classList.remove('hidden')\n      \n    } catch (error) {\n      if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {\n        this.handleError('Camera and microphone access denied. Please allow access and try again.', error)\n      } else {\n        this.handleError('Error accessing media devices', error)\n      }\n    }\n  }\n  \n  async getDevices() {\n    try {\n      let allDevices = [];\n      \n      // First try the native browser API for maximum device info\n      try {\n        const mediaDevices = await navigator.mediaDevices.enumerateDevices();\n        allDevices = mediaDevices;\n        console.log(\"Browser API devices:\", mediaDevices);\n      } catch (err) {\n        console.warn(\"Error enumerating devices with browser API:\", err);\n      }\n      \n      // Then try OpenTok's API as backup or to supplement\n      try {\n        const otDevices = await new Promise((resolve, reject) => {\n          OT.getDevices((err, deviceList) => {\n            if (err) reject(err);\n            else resolve(deviceList);\n          });\n        });\n        \n        // Merge devices if we have both sets\n        if (allDevices.length > 0) {\n          // Use OT devices to supplement labels when possible\n          allDevices.forEach(device => {\n            const matchingDevice = otDevices.find(d => d.deviceId === device.deviceId);\n            if (matchingDevice && matchingDevice.label && !device.label) {\n              device.label = matchingDevice.label;\n            }\n          });\n        } else {\n          allDevices = otDevices;\n        }\n        \n        console.log(\"OpenTok devices:\", otDevices);\n      } catch (err) {\n        console.warn(\"Error getting devices through OpenTok:\", err);\n      }\n      \n      this.devices = allDevices;\n      console.log(\"Combined devices:\", this.devices);\n      \n      // Fix video input device detection - check for both casings\n      const videoDevices = this.devices.filter(device => \n        device.kind === 'videoinput' || device.kind === 'videoInput'\n      );\n      console.log(\"Video devices:\", videoDevices);\n      \n      this.videoSourceTarget.innerHTML = '';\n      \n      if (videoDevices.length === 0) {\n        this.addOption(this.videoSourceTarget, '', 'No cameras found');\n      } else {\n        // Check for previously selected device\n        const previousDevice = localStorage.getItem('preferredVideoDevice');\n        \n        videoDevices.forEach(device => {\n          const label = device.label || `Camera ${videoDevices.indexOf(device) + 1}`;\n          this.addOption(this.videoSourceTarget, device.deviceId, label);\n          \n          // Select previously used device if it exists\n          if (previousDevice && device.deviceId === previousDevice) {\n            this.videoSourceTarget.value = device.deviceId;\n          }\n        });\n      }\n    \n      // Fix audio input device detection - check for both casings\n      const audioDevices = this.devices.filter(device => \n        device.kind === 'audioinput' || device.kind === 'audioInput'\n      );\n      console.log(\"Audio input devices:\", audioDevices);\n      \n      this.audioSourceTarget.innerHTML = '';\n      \n      if (audioDevices.length === 0) {\n        this.addOption(this.audioSourceTarget, '', 'No microphones found');\n      } else {\n        // Check for previously selected device\n        const previousDevice = localStorage.getItem('preferredAudioDevice');\n        \n        audioDevices.forEach(device => {\n          const label = device.label || `Microphone ${audioDevices.indexOf(device) + 1}`;\n          this.addOption(this.audioSourceTarget, device.deviceId, label);\n          \n          // Select previously used device if it exists\n          if (previousDevice && device.deviceId === previousDevice) {\n            this.audioSourceTarget.value = device.deviceId;\n          }\n        });\n      }\n\n      // Process audio output devices - NOTE: Using lowercase 'audiooutput'\n      const audioOutputDevices = this.devices.filter(device => \n        device.kind === 'audiooutput' || device.kind === 'audioOutput'\n      );\n      \n      console.log(\"Audio output devices:\", audioOutputDevices);\n      \n      this.audioOutputTarget.innerHTML = '';\n      \n      if (audioOutputDevices.length === 0) {\n        // Add default option even when no devices found\n        this.addOption(this.audioOutputTarget, 'default', 'System Default');\n        this.addOption(this.audioOutputTarget, '', 'No additional speakers found');\n      } else {\n        // Add default option first\n        this.addOption(this.audioOutputTarget, 'default', 'System Default');\n        \n        // Add detected devices\n        const previousDevice = localStorage.getItem('preferredAudioOutput');\n        \n        audioOutputDevices.forEach(device => {\n          const label = device.label || `Speaker ${audioOutputDevices.indexOf(device) + 1}`;\n          this.addOption(this.audioOutputTarget, device.deviceId, label);\n          \n          if (previousDevice && device.deviceId === previousDevice) {\n            this.audioOutputTarget.value = device.deviceId;\n          }\n        });\n      }\n      \n      this.statusTarget.textContent = 'Devices detected. Click \"Start Test\" to begin.'\n      \n    } catch (error) {\n      this.handleError('Could not access devices', error)\n    }\n  }\n\n  addOption(selectElement, value, text) {\n    const option = document.createElement('option')\n    option.value = value\n    option.text = text\n    selectElement.add(option)\n  }\n  \n  startDeviceTest() {\n    const videoSourceId = this.videoSourceTarget.value\n    const audioSourceId = this.audioSourceTarget.value\n    \n    this.statusTarget.textContent = 'Initializing devices...'\n    \n    const publisherOptions = {\n      insertMode: 'append',\n      width: '100%',\n      height: '100%',\n      showControls: false\n    }\n    \n    if (videoSourceId && videoSourceId !== '') {\n      publisherOptions.videoSource = true\n    }\n    \n    if (audioSourceId && audioSourceId !== '') {\n      publisherOptions.audioSource = true\n    }\n    \n    try {\n      if (this.publisher) {\n        this.publisher.destroy()\n        this.publisher = null\n      }\n      \n      this.videoContainerTarget.innerHTML = ''\n      \n      this.publisher = OT.initPublisher(\n        this.videoContainerTarget,\n        publisherOptions,\n        (error) => {\n          if (error) {\n            if (error.name === 'OT_USER_MEDIA_ACCESS_DENIED' || error.name === 'OverconstrainedError') {\n              this.tryWithDefaultDevices()\n              return\n            }\n            this.handleError('Failed to initialize devices', error)\n            return\n          }\n          \n          this.session.connect(this.tokenValue, (error) => {\n            if (error) {\n              console.warn(\"Session connection error, continuing with preview\")\n            }\n            \n            this.statusTarget.textContent = 'Devices working! Testing audio and video...'\n            this.setupAudioLevelMonitor()\n            this.showTestControls()\n            this.successMessageTarget.classList.remove('hidden')\n          })\n        }\n      )\n\n      // After initializing publisher, apply the audio output\n      this.publisher.on('videoElementCreated', (event) => {\n        const audioOutputId = this.audioOutputTarget.value\n        if (audioOutputId && 'setSinkId' in HTMLMediaElement.prototype) {\n          event.element.setSinkId(audioOutputId).catch(err => {\n            console.warn(\"Error setting audio output:\", err)\n          })\n        }\n      })\n      \n\n      //save the current seletions\n      this.saveDeviceSettings()\n\n    } catch (error) {\n      this.handleError('Error starting device test', error)\n    }\n  }\n  \n  tryWithDefaultDevices() {\n    this.statusTarget.textContent = 'Using default devices instead...'\n    \n    const defaultOptions = {\n      insertMode: 'append',\n      width: '100%',\n      height: '100%',\n      showControls: false,\n      videoSource: true,\n      audioSource: true\n    }\n    \n    this.publisher = OT.initPublisher(\n      this.videoContainerTarget,\n      defaultOptions,\n      (error) => {\n        if (error) {\n          this.handleError('Failed to initialize default devices', error)\n          return\n        }\n        \n        this.session.connect(this.tokenValue, (error) => {\n          if (error) {\n            console.warn(\"Session connection error, continuing with preview\")\n          }\n          \n          this.statusTarget.textContent = 'Using default devices. Testing audio and video...'\n          this.setupAudioLevelMonitor()\n          this.showTestControls()\n          this.successMessageTarget.classList.remove('hidden')\n        })\n      }\n    )\n  }\n  \n  setupAudioLevelMonitor() {\n    if (!this.publisher || !this.publisher.getAudioSource) {\n      return\n    }\n    \n    try {\n      if (!this.audioContext) {\n        this.audioContext = new (window.AudioContext || window.webkitAudioContext)()\n      }\n      \n      const audioSource = this.publisher.getAudioSource()\n      \n      if (!audioSource) {\n        return\n      }\n      \n      const analyser = this.audioContext.createAnalyser()\n      analyser.fftSize = 256\n      const bufferLength = analyser.frequencyBinCount\n      const dataArray = new Uint8Array(bufferLength)\n      \n      const source = this.audioContext.createMediaStreamSource(new MediaStream([audioSource]))\n      source.connect(analyser)\n      \n      this.audioAnalyzer = analyser\n      this.audioSource = source\n      \n      this.audioLevelInterval = setInterval(() => {\n        analyser.getByteFrequencyData(dataArray)\n        \n        let sum = 0\n        for (let i = 0; i < bufferLength; i++) {\n          sum += dataArray[i]\n        }\n        const average = sum / bufferLength\n        const level = Math.min(100, Math.round((average / 128) * 100))\n        \n        this.audioMeterTarget.style.width = `${level}%`\n      }, 100)\n      \n    } catch (error) {\n      console.error(\"Error setting up audio monitor:\", error)\n    }\n  }\n  \n  stopDeviceTest() {\n    if (this.publisher) {\n      this.publisher.destroy()\n      this.publisher = null\n    }\n    \n    if (this.audioLevelInterval) {\n      clearInterval(this.audioLevelInterval)\n    }\n    \n    if (this.audioSource) {\n      this.audioSource.disconnect()\n      this.audioSource = null\n    }\n    \n    this.hideTestControls()\n    this.successMessageTarget.classList.add('hidden')\n    this.statusTarget.textContent = 'Test stopped. Click \"Start Test\" to try again.'\n\n    this.saveDeviceSettings()\n  }\n  \n  changeVideoDevice() {\n    if (this.publisher) {\n      this.stopDeviceTest()\n      this.startDeviceTest()\n    }\n  }\n  \n  changeAudioDevice() {\n    if (this.publisher) {\n      this.stopDeviceTest()\n      this.startDeviceTest()\n    }\n  }\n  \n  // Modify the changeAudioOutput method to not play sound automatically\n  async changeAudioOutput() {\n    const audioOutputId = this.audioOutputTarget.value\n    if (!audioOutputId) return\n    \n    try {\n      // Check if the browser supports setSinkId\n      if (!('setSinkId' in HTMLMediaElement.prototype)) {\n        console.warn(\"This browser doesn't support output device selection\")\n        return\n      }\n      \n      // Find any audio/video elements created by the publisher\n      const mediaElements = this.videoContainerTarget.querySelectorAll('audio, video')\n      \n      // Apply the new audio output to all media elements\n      for (const element of mediaElements) {\n        await element.setSinkId(audioOutputId)\n      }\n      \n      // No longer automatically plays a test sound\n      \n    } catch (error) {\n      console.error(\"Error changing audio output:\", error)\n      if (error.name === 'NotAllowedError') {\n        this.handleError('Permission denied to change audio output. This requires HTTPS.', error)\n      } else {\n        this.handleError('Failed to change audio output device', error)\n      }\n    }\n  }\n  \n  // Add methods to play and stop test sounds\n  playTestSound() {\n    // Stop any previous test sound\n    this.stopTestSoundAction()\n    \n    const deviceId = this.audioOutputTarget.value\n    if (!deviceId) return\n    \n    this.testAudio = new Audio('https://assets.recruitmilitary.com/mp3/test.mp3')\n    \n    try {\n      if ('setSinkId' in this.testAudio && deviceId !== 'default') {\n        this.testAudio.setSinkId(deviceId).then(() => {\n          this.testAudio.play()\n            .then(() => {\n              this.playTestSoundTarget.classList.add('hidden')\n              this.stopTestSoundTarget.classList.remove('hidden')\n            })\n            .catch(err => {\n              console.error(\"Error playing test sound:\", err)\n              this.handleError('Failed to play test sound', err)\n            })\n        }).catch(err => {\n          console.error(\"Error setting sink ID:\", err)\n          this.handleError('Failed to select audio device', err)\n        })\n      } else {\n        this.testAudio.play()\n          .then(() => {\n            this.playTestSoundTarget.classList.add('hidden')\n            this.stopTestSoundTarget.classList.remove('hidden')\n          })\n          .catch(err => {\n            console.error(\"Error playing test sound:\", err)\n            this.handleError('Failed to play test sound', err)\n          })\n      }\n      \n      this.testAudio.onended = () => {\n        this.stopTestSoundAction()\n      }\n    } catch (error) {\n      console.error(\"Error with test sound:\", error)\n      this.handleError('Error testing audio output', error)\n    }\n  }\n  \n  stopTestSoundAction() {\n    if (this.testAudio) {\n      this.testAudio.pause()\n      this.testAudio.currentTime = 0\n      this.testAudio = null\n    }\n    \n    this.playTestSoundTarget.classList.remove('hidden')\n    this.stopTestSoundTarget.classList.add('hidden')\n  }\n  \n  toggleMute() {\n    if (!this.publisher) return\n    \n    this.audioMuted = !this.audioMuted\n    this.publisher.publishAudio(!this.audioMuted)\n    \n    this.toggleMuteTarget.textContent = this.audioMuted ? 'Unmute' : 'Mute'\n    this.toggleMuteTarget.classList.toggle('bg-blue-500', !this.audioMuted)\n    this.toggleMuteTarget.classList.toggle('bg-red-500', this.audioMuted)\n  }\n  \n  toggleVideo() {\n    if (!this.publisher) return\n    \n    this.videoEnabled = !this.videoEnabled\n    this.publisher.publishVideo(this.videoEnabled)\n    \n    this.toggleVideoTarget.textContent = this.videoEnabled ? 'Turn Off Camera' : 'Turn On Camera'\n    this.toggleVideoTarget.classList.toggle('bg-blue-500', this.videoEnabled)\n    this.toggleVideoTarget.classList.toggle('bg-red-500', !this.videoEnabled)\n  }\n  \n  showTestControls() {\n    this.startTestTarget.classList.add('hidden')\n    this.stopTestTarget.classList.remove('hidden')\n    this.toggleMuteTarget.classList.remove('hidden')\n    this.toggleVideoTarget.classList.remove('hidden')\n  }\n  \n  hideTestControls() {\n    this.startTestTarget.classList.remove('hidden')\n    this.stopTestTarget.classList.add('hidden')\n    this.toggleMuteTarget.classList.add('hidden')\n    this.toggleVideoTarget.classList.add('hidden')\n  }\n  \n  continueToMeeting() {\n    this.saveDeviceSettings()\n    \n    this.stopDeviceTest()        \n\n\n  }\n  \n  handleError(message, error) {\n    console.error(message, error)\n    this.statusTarget.textContent = 'Error testing devices'\n    this.errorTextTarget.textContent = error ? error.message || error.toString() : message\n    this.errorMessageTarget.classList.remove('hidden')\n    this.hideTestControls()\n  }\n  \n  // Add a new method to handle modal close events\n  handleModalClose(event) {\n    // Clean up all resources when modal is closed\n    this.stopTestSoundAction()\n    \n    if (this.publisher) {\n      this.publisher.destroy()\n      this.publisher = null\n    }\n    \n    if (this.audioLevelInterval) {\n      clearInterval(this.audioLevelInterval)\n      this.audioLevelInterval = null\n    }\n    \n    if (this.audioSource) {\n      this.audioSource.disconnect()\n      this.audioSource = null\n    }\n    \n    if (this.session) {\n      this.session.disconnect()\n    }\n    \n    if (this.audioContext && this.audioContext.state !== 'closed') {\n      this.audioContext.close().catch(e => console.error(\"Error closing audio context:\", e))\n      this.audioContext = null\n    }\n    \n    // Release any tracks from temporary stream\n    if (this.tempStream) {\n      this.tempStream.getTracks().forEach(track => track.stop())\n      this.tempStream = null\n    }\n  }\n  \n  // Update the disconnect method to remove the event listener\n  disconnect() {\n    // Remove the modal close event listener\n    document.removeEventListener('modalClose', this.modalCloseHandler)\n    \n    // Existing cleanup code\n    this.stopTestSoundAction()\n    \n    if (this.publisher) {\n      this.publisher.destroy()\n    }\n    \n    if (this.audioLevelInterval) {\n      clearInterval(this.audioLevelInterval)\n    }\n    \n    if (this.session) {\n      this.session.disconnect()\n    }\n    \n    if (this.audioContext) {\n      this.audioContext.close().catch(e => {})\n    }\n    \n    // Release any tracks from temporary stream\n    if (this.tempStream) {\n      this.tempStream.getTracks().forEach(track => track.stop())\n      this.tempStream = null\n    }\n  }\n\n  saveDeviceSettings() {\n    if (this.videoSourceTarget.value) {\n      localStorage.setItem('preferredVideoDevice', this.videoSourceTarget.value)\n    }\n    \n    if (this.audioSourceTarget.value) {\n      localStorage.setItem('preferredAudioDevice', this.audioSourceTarget.value)\n    }\n    \n    if (this.audioOutputTarget.value) {\n      localStorage.setItem('preferredAudioOutput', this.audioOutputTarget.value)\n    }\n    // Dispatch event to notify that settings were updated\n    document.dispatchEvent(new CustomEvent('device-settings-updated'));\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = { text: String }\n\n  connect() {\n    this.originalText = this.element.innerHTML\n    this.isDisabled = false\n  }\n\n  click(event) {\n    if (this.isDisabled) {\n      event.preventDefault()\n      event.stopImmediatePropagation()\n      return false\n    }\n\n    this.disable()\n  }\n\n  disable() {\n    this.isDisabled = true\n    this.element.style.pointerEvents = 'none'\n    this.element.style.opacity = '0.6'\n    this.element.innerHTML = this.textValue || 'Loading...'\n    this.element.classList.add('disabled')\n  }\n\n  enable() {\n    this.isDisabled = false\n    this.element.style.pointerEvents = ''\n    this.element.style.opacity = ''\n    this.element.innerHTML = this.originalText\n    this.element.classList.remove('disabled')\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['results', 'query'];\n  static values = {url: String, action: String, debounceTimer: Number }\n\n  search() {\n    this.debounce(this.performSearch.bind(this), 500);\n  }\n\n  performSearch() {\n    var frame = document.getElementById(`${this.actionValue}`)\n    frame.src = this.urlValue.replace(/%s/g, encodeURIComponent(this.queryTarget.value))\n  }\n\n  debounce(callback, time) {\n    clearTimeout(this.debounceTimerValue);\n    this.debounceTimerValue = setTimeout(callback, time);\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport { state } from \"../state\"\n\nexport default class extends Controller {\n  static targets = ['tab', 'query', 'panel', 'online', 'rms', 'warning', 'stat', 'boothStatus', 'repCount'];\n  static classes = ['active', 'blinking'];\n  static values = { endPrivateUrl: String }\n\n  connect() {\n    this.boundHandleBlinkNotification = this.handleBlinkNotification.bind(this)\n    document.addEventListener('blink-notification', this.boundHandleBlinkNotification)\n    \n    this.boundHandleTabClosed = this.handleTabClosed.bind(this)\n    document.addEventListener('tab-closed', this.boundHandleTabClosed)\n\n    this.boundHandleTabFocused = this.handleTabFocused.bind(this)\n    document.addEventListener('tab-focused', this.boundHandleTabFocused)\n\n    // A room may already be open on load (e.g. after a refresh). Seed activeMeetingId from the visible\n    // panel now \u2014 synchronously, before the panel's broadcast receiver connects and checks it \u2014 otherwise\n    // the receiver sees a null activeMeetingId and unloads itself before any tab-focused event fires.\n    const activePanel = this.panelTargets.find(panel => !panel.classList.contains('hidden'))\n    if (activePanel) {\n      state.activeMeetingId = activePanel.dataset.panelId\n    }\n\n    // if there is a main room id in the URL, activate that room\n    const urlParams = new URLSearchParams(window.location.search);\n    if (urlParams.has('main_room_id')) {\n      const roomId = urlParams.get('main_room_id')\n      this.activatePanel(roomId)      \n    }\n  }\n  \n  disconnect() {\n    document.removeEventListener('blink-notification', this.boundHandleBlinkNotification)\n    document.removeEventListener('tab-closed', this.boundHandleTabClosed)\n    document.removeEventListener('tab-focused', this.boundHandleTabFocused)\n  }\n  \n\n  // when the target is connected if the active panel has the same mainId as the tab, activate the tab\n  tabTargetConnected(element) {\n    const activePanel = this.panelTargets.find(panel => !panel.classList.contains('hidden'))\n    if (activePanel) {\n      this.activate_tab(activePanel.dataset.panelId)\n    }\n    // does this get triggered when the number in the tab changes?\n  }\n\n  boothStatusTargetConnected(element) {\n    this.maybeSetWarning(element.parentElement)\n  }\n\n  repCountTargetConnected(element) {\n    this.maybeSetWarning(element.parentElement.parentElement.parentElement)\n  }\n\n  statTargetConnected(element) {\n    const currentValue = parseInt(element.innerText || '0', 10);\n    \n    if (!this.previousValues) {\n      this.previousValues = {};\n    }\n    \n    const id = element.id;\n    \n    if (this.previousValues[id] !== undefined) {\n      const previousValue = this.previousValues[id];\n      if (currentValue > previousValue) {\n        this.pulseElement(element, 'text-green-500', 'scale-up');\n      } else if (currentValue < previousValue) {\n        this.pulseElement(element, 'text-red-500', 'scale-down');\n      }\n    }\n\n    this.previousValues[id] = currentValue;\n  }\n\n  pulseElement(element, colorClass, scaleType, times = 3) {\n    let count = 0;\n    \n    const pulse = () => {    \n      const item = document.getElementById(element.id);\n      if (!item) return;\n\n      item.classList.add(colorClass);\n      \n      if (scaleType === 'scale-up') {\n        item.style.transform = 'scale(1.2)';\n      } else {\n        item.style.transform = 'scale(0.8)';\n      }\n      \n      item.style.transition = 'all 0.3s ease-in-out';\n      \n      setTimeout(() => {\n        item.classList.remove(colorClass);\n        item.style.transform = 'scale(1)';\n        \n        count++;\n        if (count < times) {\n          setTimeout(pulse, 300);\n        } else {\n          setTimeout(() => {\n            item.style.transition = '';\n            item.style.transform = '';\n          }, 300);\n        }\n      }, 300);\n    };\n\n    pulse();\n  }\n\n  toggleFilters(_event) {\n    const onlineChecked = this.onlineTarget.checked\n    const rmsChecked = this.rmsTarget.checked\n    const warningChecked = this.warningTarget.checked\n\n    this.tabTargets.forEach((exhibitor) => {\n      const isOnline = exhibitor.dataset.inRoom === \"true\"\n      const isRms = exhibitor.dataset.rms === \"true\"\n      const isWarning = exhibitor.dataset.warning === \"true\"\n\n      let shouldShow = true\n      \n      // Apply online filter if checked\n      if (onlineChecked) {\n        shouldShow = shouldShow && isOnline\n      }\n      if (rmsChecked) {\n        shouldShow = shouldShow && isRms\n      }\n      if (warningChecked) {\n        shouldShow = shouldShow && isWarning\n      }\n      // Show or hide based on combined filter results\n      if (shouldShow) {\n        exhibitor.classList.remove('hidden')\n      } else {\n        exhibitor.classList.add('hidden')\n      }\n    })\n    \n    // Call search to apply any text filtering on top of checkbox filters\n    if (!rmsChecked && !onlineChecked && !warningChecked) {this.search()}\n  }\n\n  exitRoom(event) {\n    const roomId = event.params.room\n    const panel = this.roomPanel(roomId)\n    const tab = this.roomTab(roomId)\n    panel.remove()\n    tab.classList.remove(...this.activeClasses)\n  }\n\n  handleBlinkNotification(event) {\n    const { mainRoomId } = event.detail\n    \n    if (mainRoomId) {\n      const tab = this.roomTab(mainRoomId)\n      \n      if (tab) {\n        // Check if this tab is currently active\n        const isActive = tab.classList.contains(this.activeClasses[0])\n        \n        // Only add blinking if this isn't the active tab\n        if (!isActive) {\n          tab.classList.add(...this.blinkingClasses)\n        }\n      }\n    }\n  }\n\n  handleTabClosed(event) {\n    const { meetingId, mainRoomId } = event.detail\n    \n    if (meetingId) {\n      const panel = this.roomPanel(meetingId)\n      const tab = this.roomTab(meetingId)\n      \n      if (panel && tab) {\n        const isActive = tab.classList.contains(this.activeClasses[0])\n        const otherTab = this.tabTargets.find(t => t !== tab)\n        \n        panel.remove()\n        tab.remove()\n        \n        if (isActive && otherTab) {\n          this.activatePanel(otherTab.dataset.tabId)\n        }\n      }\n      \n      if (this.hasEndPrivateUrlValue) {\n        const url = this.endPrivateUrlValue.replace('meetingId', meetingId).replace('mainRoomId', mainRoomId)\n        const request = new FetchRequest('GET', url, { responseKind: 'turbo-stream' })\n        request.perform().catch(error => {\n          console.error('Error ending private meeting:', error)\n        })\n      }\n    }\n  }\n\n  //whenever a panel is connected, we want to make sure that the tab is selected\n  panelTargetConnected(element) {\n    const roomId = element.dataset.panelId\n    this.activatePanel(roomId)\n  }\n\n  search() {\n    this.tabTargets.forEach((exhibitor) => {\n      if (exhibitor.innerText.toLowerCase().includes(this.queryTarget.value.toLowerCase())) {\n        exhibitor.classList.remove('hidden')\n      } else {\n        exhibitor.classList.add('hidden')\n      }\n    })\n  }\n\n  async activateRoom(event) {\n    const roomId = event.params.room\n    this.activatePanel(roomId)\n  }\n\n  async activatePanel(roomId) {\n    const element = this.roomTab(roomId).querySelector('[data-event-control-center-url-param]')\n    const url = element.dataset.eventControlCenterUrlParam\n    const panel = this.roomPanel(roomId)\n    if (!panel) { await Turbo.visit(url) }\n    this.hideAll()\n    this.activate_tab(roomId)\n  }\n\n  // if the room is open, but there are no reps, we want to show a warning\n  maybeSetWarning(element) {\n    const status = element.querySelector( '[data-event-control-center-target=\"boothStatus\"]').dataset.status\n    const repCount = element.querySelector( '[data-event-control-center-target=\"repCount\"]').innerHTML\n    if (status == 'open' && repCount == 0) {\n      element.classList.add('bg-red-300')\n      element.dataset.warning = 'true'\n    } else {\n      element.classList.remove('bg-red-300')\n      element.removeAttribute('data-warning')\n    }\n  }\n\n  roomTab(id) {\n    const tab = this.tabTargets.find(tab => tab.dataset.tabId == id)\n    return tab\n  }\n\n  roomPanel(id) {\n    const panel = document.querySelector( `[data-panel-id='${id}']`)\n    return panel\n  }\n\n  activate_tab(id) {\n    const tab = this.roomTab(id)\n    const panel = this.roomPanel(id)\n    tab.classList.add(...this.activeClasses)\n    tab.classList.remove(this.blinkingClasses)\n    // if the panel was just loaded form the server, this may be null, but that is okay because new panels are already visible\n    if (panel != null) {panel.classList.remove('hidden')}\n    this.dispatch('tab-focused', {detail: {meetingId: id}, bubbles: true, prefix: false })\n  }\n\n  hideAll() {\n    this.panelTargets.forEach((exhibitor) => {exhibitor.classList.add('hidden')})\n    this.tabTargets.forEach((exhibitor) => {exhibitor.classList.remove('bg-primary', 'text-white')})\n  }\n\n  handleTabFocused(event) {\n    state.activeMeetingId = event.detail.meetingId\n    state.fetchActiveMeetingBroadcast()\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { cable } from '@hotwired/turbo-rails'\n\nexport default class extends Controller {\n  connect() {\n    javascript.innerHTML = \"Javascript Support: \u2705\"\n\n    cable.getConsumer().then(consumer => {\n      setTimeout(() => {\n        if (consumer.connection.isProtocolSupported() && consumer.connection.isOpen()) {\n          websocket.innerHTML = \"Websocket Support: \u2705\"\n        } else {\n          websocket.innerHTML = `Websocket Support: \u274C\n            Your network maybe blocking websockets. <br/>\n            RecruitMilitary's Virtual Event make use of websockets to provide real-time updates to your browser.<br/>\n            Please contact your network administrator to allow websockets through your firewall.<br/>\n            Websockets connect to the following URL: https://my.recruitmilitary.com/cable\n          `\n        }\n      }, 1000) // Make sure there's time for the connection to be established\n    });\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport { state } from \"../state\"\n\nexport default class extends Controller {\n  static targets = [\"container\", \"notifications\", \"count\", \"expandIcon\", \"collapseIcon\"]\n  static values = { numberOfNotifications: Number }\n  \n  connect() {\n    this.updateVisibility()\n  }\n\n  toggleOpen() {\n    this.open = !this.open\n    this.countTarget.classList.remove('animate-bounce')\n    this.updateVisibility()\n  }\n  \n  notificationTargetConnected(element) {\n    // Client-side dedup: reconnect catch-up re-delivers notifications that may already be on\n    // screen. If this id is already present, drop the duplicate without counting it or playing\n    // a sound. Flag it so the disconnect callback doesn't decrement the count for a removal we\n    // never counted.\n    if (element.id && document.querySelectorAll(`#${CSS.escape(element.id)}`).length > 1) {\n      element.dataset.duplicate = \"true\"\n      element.remove()\n      return\n    }\n\n    this.numberOfNotificationsValue += 1\n    this.countTarget.textContent = this.numberOfNotificationsValue\n    this.countTarget.classList.add('animate-bounce')\n\n    if (element.dataset.playSound === \"true\") {\n      this.playNotificationSound()\n    }\n    this.updateVisibility()\n  }\n\n  notificationTargetDisconnected(element) {\n    if (element.dataset.duplicate === \"true\") return\n\n    this.numberOfNotificationsValue -= 1\n    this.countTarget.textContent = this.numberOfNotificationsValue\n    this.updateVisibility()\n  }\n  \n  updateVisibility() {\n    if (this.numberOfNotificationsValue > 0) {\n      this.containerTarget.classList.remove('hidden')\n      this.element.classList.remove(\"hidden\");\n      \n      if (this.open && !state.onCall) {\n        this.containerTarget.classList.add('w-full', 'sm:w-40screen')\n        this.containerTarget.classList.remove('w-10screen')\n        this.notificationsTarget.classList.remove('hidden')\n        this.expandIconTarget.classList.add('hidden')\n        this.collapseIconTarget.classList.remove('hidden')\n      } else {\n        this.containerTarget.classList.remove('w-full', 'sm:w-40screen')\n        this.containerTarget.classList.add('w-10screen')\n        this.notificationsTarget.classList.add('hidden')\n        this.expandIconTarget.classList.remove('hidden')\n        this.collapseIconTarget.classList.add('hidden')\n      }\n    } else {\n      this.containerTarget.classList.add('hidden')\n      this.notificationsTarget.classList.add('hidden')\n      this.element.classList.add(\"hidden\");\n    }\n  }\n\n  playNotificationSound() {\n    if (state.onCall) return\n\n    const audio = new Audio('https://assets.recruitmilitary.com/mp3/new-notification.mp3')\n    audio.play()\n  }\n  \n  get open() {\n    return this.element.dataset.open === \"true\"\n  }\n  \n  set open(value) {\n    this.element.dataset.open = value\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"availableCheckbox\", \"soldOutContainer\", \"emptyMessage\"]\n\n  connect() {\n    this.updateSoldOutVisibility()\n  }\n\n  togglePackage(event) {\n    this.updateSoldOutVisibility()\n  }\n\n  updateSoldOutVisibility() {\n    const availablePackageIds = this.availableCheckboxTargets\n      .filter(cb => cb.checked)\n      .map(cb => cb.value)\n\n    this.soldOutContainerTargets.forEach(container => {\n      const packageId = container.dataset.packageId\n      const checkbox = container.querySelector('input[type=\"checkbox\"]')\n\n      if (availablePackageIds.includes(packageId)) {\n        container.style.display = 'flex'\n      } else {\n        container.style.display = 'none'\n        if (checkbox) {\n          checkbox.checked = false\n        }\n      }\n    })\n\n    if (this.hasEmptyMessageTarget) {\n      const anyAvailable = availablePackageIds.length > 0\n      this.emptyMessageTarget.style.display = anyAvailable ? 'none' : 'block'\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"monthContainer\", \"monthSelect\", \"prevBtn\", \"nextBtn\", \"eventDayTemplate\", \"regularDayTemplate\"]\n  static values = {\n    startMonth: Number,\n    startYear: Number,\n    selectedDate: String,\n    physicalEventDates: Array,\n    virtualEventDates: Array,\n    monthYearOptions: Array,\n    numberOfMonths: Number\n  }\n  static classes = [\n    \"selected\",\n    \"eventDay\",\n    \"today\",\n    \"regular\",\n    \"todayRing\",\n    \"selectedTime\",\n    \"physicalEvent\",\n    \"virtualEvent\",\n    \"bothEvent\"\n  ]\n\n  connect() {\n    this.currentMonth = this.selectedDateValue ? this.getMonthIndexForDate(this.selectedDateValue) : 0\n    this.today = new Date()\n    this.generateAllMonths()\n    this.updateDisplay()\n  }\n\n  getMonthIndexForDate(dateString) {\n    if (!dateString) return 0\n    const date = new Date(dateString)\n    const startDate = new Date(this.startYearValue, this.startMonthValue - 1)\n    const diffMonths = (date.getFullYear() - startDate.getFullYear()) * 12 + (date.getMonth() - startDate.getMonth())\n    return Math.max(0, Math.min(diffMonths, this.numberOfMonthsValue - 1))\n  }\n\n  generateAllMonths() {\n    this.monthContainerTarget.innerHTML = ''\n\n    for (let monthOffset = 0; monthOffset < this.numberOfMonthsValue; monthOffset++) {\n      const monthDiv = this.createMonthDiv(monthOffset)\n      this.monthContainerTarget.appendChild(monthDiv)\n    }\n  }\n\n  createMonthDiv(monthOffset) {\n    const monthDiv = document.createElement('div')\n    monthDiv.className = 'w-full'\n    monthDiv.style.display = monthOffset === this.currentMonth ? 'block' : 'none'\n    monthDiv.dataset.monthIndex = monthOffset\n\n    const currentDate = new Date(this.startYearValue, this.startMonthValue - 1 + monthOffset, 1)\n\n    // Create header\n    const header = this.createCalendarHeader()\n    monthDiv.appendChild(header)\n\n    // Create calendar grid\n    const grid = this.createCalendarGrid(currentDate, monthOffset)\n    monthDiv.appendChild(grid)\n\n    return monthDiv\n  }\n\n  createCalendarHeader() {\n    const header = document.createElement('div')\n    header.className = 'grid grid-cols-7 gap-1 text-center text-xs leading-6 bg-rm-light-blue text-white'\n    header.innerHTML = `\n      <div>S</div>\n      <div>M</div>\n      <div>T</div>\n      <div>W</div>\n      <div>T</div>\n      <div>F</div>\n      <div>S</div>\n    `\n    return header\n  }\n\n  createCalendarGrid(monthDate, monthOffset) {\n    const grid = document.createElement('div')\n    grid.className = 'mt-2 grid grid-cols-7 gap-1 text-sm'\n\n    const firstDay = new Date(monthDate.getFullYear(), monthDate.getMonth(), 1)\n    const lastDay = new Date(monthDate.getFullYear(), monthDate.getMonth() + 1, 0)\n    const startDayOfWeek = firstDay.getDay()\n    const daysInMonth = lastDay.getDate()\n\n    // Add empty cells for days before the first day of the month\n    for (let i = 0; i < startDayOfWeek; i++) {\n      const emptyCell = document.createElement('div')\n      emptyCell.className = 'h-5 w-8'\n      grid.appendChild(emptyCell)\n    }\n\n    // Add days of the month\n    for (let day = 1; day <= daysInMonth; day++) {\n      const dayDate = new Date(monthDate.getFullYear(), monthDate.getMonth(), day)\n      const dateString = this.formatDate(dayDate)\n      const dayCell = this.createDayCell(day, dateString, dayDate)\n      grid.appendChild(dayCell)\n    }\n\n    return grid\n  }\n\n  createDayCell(day, dateString, dayDate) {\n    const isEventDay = this.isEventDay(dateString)\n    const isSelected = this.selectedDateValue === dateString\n    const isToday = this.isToday(dayDate)\n\n    let dayCell\n    if (isEventDay) {\n      // Clone the event day template\n      dayCell = this.eventDayTemplateTarget.cloneNode(true)\n      dayCell.href = isSelected ? '/events/schedule' : `/events/schedule?date=${dateString}`\n\n      this.addDayCellClasses(dayCell, isSelected, isEventDay, isToday, dateString)\n\n      const time = dayCell.querySelector('time')\n      time.dateTime = dateString\n      time.textContent = day\n      if (isSelected) {\n        time.classList.add(...this.selectedTimeClasses)\n      }\n    } else {\n      // Clone the regular day template\n      dayCell = this.regularDayTemplateTarget.cloneNode(true)\n\n      this.addDayCellClasses(dayCell, isSelected, isEventDay, isToday, dateString)\n\n      const time = dayCell.querySelector('time')\n      time.dateTime = dateString\n      time.textContent = day\n    }\n\n    return dayCell\n  }\n\n  addDayCellClasses(dayCell, isSelected, isEventDay, isToday, dateString) {\n    if (isSelected) {\n      dayCell.classList.add(...this.selectedClasses)\n    } else if (isEventDay) {\n      dayCell.classList.add(...this.eventDayClasses)\n      dayCell.classList.add(...this.getEventTypeClass(dateString))\n      if (isToday) {\n        dayCell.classList.add(...this.todayRingClasses)\n      }\n    } else if (isToday) {\n      dayCell.classList.add(...this.todayClasses)\n    } else {\n      dayCell.classList.add(...this.regularClasses)\n    }\n  }\n\n\n  getEventTypeClass(dateString) {\n    const isPhysical = this.isPhysicalEventDay(dateString)\n    const isVirtual = this.isVirtualEventDay(dateString)\n\n    if (isPhysical && isVirtual) {\n      return this.bothEventClasses\n    } else if (isPhysical) {\n      return this.physicalEventClasses\n    } else if (isVirtual) {\n      return this.virtualEventClasses\n    }\n    return []\n  }\n\n  isEventDay(dateString) {\n    return this.isPhysicalEventDay(dateString) || this.isVirtualEventDay(dateString)\n  }\n\n  isPhysicalEventDay(dateString) {\n    return this.physicalEventDatesValue.some(eventDate => this.datesMatch(eventDate, dateString))\n  }\n\n  isVirtualEventDay(dateString) {\n    return this.virtualEventDatesValue.some(eventDate => this.datesMatch(eventDate, dateString))\n  }\n\n  datesMatch(eventDate, dateString) {\n    // Handle both ISO format (2025-10-02T00:00:00.000Z) and simple format (2025-10-02)\n    const eventDateFormatted = new Date(eventDate).toISOString().split('T')[0]\n    return eventDateFormatted === dateString\n  }\n\n  isToday(date) {\n    return date.toDateString() === this.today.toDateString()\n  }\n\n  formatDate(date) {\n    return date.toISOString().split('T')[0]\n  }\n\n  // Navigation methods\n  nextMonth() {\n    if (this.currentMonth < this.numberOfMonthsValue - 1) {\n      this.currentMonth++\n      this.updateDisplay()\n    }\n  }\n\n  prevMonth() {\n    if (this.currentMonth > 0) {\n      this.currentMonth--\n      this.updateDisplay()\n    }\n  }\n\n  selectMonth(event) {\n    this.currentMonth = parseInt(event.target.value)\n    this.updateDisplay()\n  }\n\n  updateDisplay() {\n    // Hide all months\n    this.monthContainerTarget.querySelectorAll('[data-month-index]').forEach(month => {\n      month.style.display = 'none'\n    })\n\n    // Show current month\n    const currentMonthDiv = this.monthContainerTarget.querySelector(`[data-month-index=\"${this.currentMonth}\"]`)\n    if (currentMonthDiv) {\n      currentMonthDiv.style.display = 'block'\n    }\n\n    // Update month select\n    this.monthSelectTarget.value = this.currentMonth\n\n    // Update button states\n    this.prevBtnTarget.disabled = this.currentMonth === 0\n    this.nextBtnTarget.disabled = this.currentMonth === this.numberOfMonthsValue - 1\n\n    // Update button classes\n    this.updateButtonClass(this.prevBtnTarget, this.currentMonth === 0)\n    this.updateButtonClass(this.nextBtnTarget, this.currentMonth === this.numberOfMonthsValue - 1)\n  }\n\n  updateButtonClass(button, isDisabled) {\n    if (isDisabled) {\n      button.className = button.className.replace('text-gray-500 hover:text-gray-800', 'text-gray-300')\n    } else {\n      button.className = button.className.replace('text-gray-300', 'text-gray-500 hover:text-gray-800')\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = {\n    interestedIds: Array\n  }\n  static targets = ['checkboxes']\n\n  connect() {\n    this.boundNewInterestId = this.newInterestId.bind(this)\n    this.element.addEventListener('interest:added', this.boundNewInterestId)\n  }\n\n  disconnect() {\n    this.element.removeEventListener('interest:added', this.boundNewInterestId)\n  }\n\n  checkboxTargetConnected(element) {\n    const id = element.dataset.interestExhibitorIdValue\n\n    if (this.interestedIdsValue.includes(id)) {\n      element.checked = true\n      element.dataset.interestInitialInterestedValue = true\n    }\n\n}\n\n  newInterestId(event) {\n    this.interestedIdsValue.push(event.detail.exhibitorId)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n// Drives the one-off exhibitor message form: keeps the recipient count in sync with the\n// selected exhibitor groups and gates the send behind a typed confirmation of that count.\nexport default class extends Controller {\n  static targets = [\"recipientCountUrl\", \"sendModal\", \"confirmationEntry\", \"actualCount\", \"sendContainer\", \"sendButton\", \"editor\"]\n\n  editorTargetConnected() {\n    let config = Object.assign({ target: this.editorTarget }, TinyMCERails.configuration.default)\n    tinymce.init(config)\n  }\n\n  editorTargetDisconnected() {\n    tinymce.remove()\n  }\n\n  async count(event) {\n    const frm = event.target.nodeName == 'FORM' ? event.target : event.target.form\n    const formData = new FormData(frm)\n    formData.delete(\"_method\")\n    const request = new FetchRequest('post', this.recipientCountUrlTarget.value, { responseKind: 'turbo-stream', body: formData })\n    const response = await request.perform()\n    this.confirmCount()\n    return response\n  }\n\n  showSend(event) {\n    event.preventDefault()\n    this.sendModalTarget.classList.remove('hidden')\n  }\n\n  closeSend(event) {\n    event.preventDefault()\n    this.sendModalTarget.classList.add('hidden')\n  }\n\n  confirmCount() {\n    if (this.confirmed) {\n      this.sendContainerTarget.classList.remove('text-red-800', 'bg-red-200')\n      this.sendContainerTarget.classList.add('text-green-800', 'bg-green-200')\n    } else {\n      this.sendContainerTarget.classList.remove('text-green-800', 'bg-green-200')\n      this.sendContainerTarget.classList.add('text-red-800', 'bg-red-200')\n    }\n    this.sendButtonTarget.disabled = !this.confirmed\n  }\n\n  selectDeliveryOption(event) {\n    const container = event.target.labels[0].parentNode\n\n    container.querySelectorAll(\"label\").forEach((el) => {\n      el.classList.remove('bg-slate-50')\n    })\n    event.target.labels[0].classList.add('bg-slate-50')\n\n    container.querySelectorAll(\".delivery-options\").forEach((el) => {\n      el.classList.add('hidden')\n    })\n\n    const options = event.target.labels[0].querySelector(\".delivery-options\")\n    if (options) options.classList.remove('hidden')\n\n    this.confirmCount()\n  }\n\n  get confirmed() {\n    return this.actualCountTarget.innerText.trim() === this.confirmationEntryTarget.value.trim()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = {\n    minCharacters: Number,\n    delay: Number\n  }\n\n  connect() {\n    this.timeout = null\n  }\n\n  submit(event) {\n    if (this.timeout) {\n      clearTimeout(this.timeout)\n    }\n\n    const query = event.target.value\n\n    if (query.length >= this.minCharactersValue) {\n      this.timeout = setTimeout(() => {\n        this.element.requestSubmit()\n      }, this.delayValue)\n    }\n  }\n}\n\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Turbo } from \"@hotwired/turbo-rails\"\n\nexport default class extends Controller {\n  static targets = [\"input\", \"results\"]\n\n  search() {\n    clearTimeout(this.timeout)\n    this.timeout = setTimeout(() => {\n      const baseUrl = window.location.origin\n      const path = this.inputTarget.dataset.url\n      const url = new URL(path, baseUrl)\n      url.searchParams.set('q', this.inputTarget.value)\n      \n      fetch(url.toString())\n        .then(response => response.text())\n        .then(html => {\n          const parser = new DOMParser();\n          const doc = parser.parseFromString(html, 'text/html');\n          const newResults = doc.querySelector('[data-featured-jobs-search-target=\"results\"]');\n          if (newResults) {\n            // Store currently checked boxes\n            const currentChecked = Array.from(this.resultsTarget.querySelectorAll('input[type=\"checkbox\"]:checked'))\n              .map(cb => cb.value);\n            \n            // Update the results content\n            this.resultsTarget.innerHTML = newResults.innerHTML;\n            \n            // Restore checked state\n            currentChecked.forEach(value => {\n              const checkbox = this.resultsTarget.querySelector(`input[type=\"checkbox\"][value=\"${value}\"]`);\n              if (checkbox) checkbox.checked = true;\n            });\n          }\n        })\n        .catch(error => console.error('Search error:', error))\n    }, 300)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Simple feedback card. Whether it appears at all is decided server-side\n// (Ui::Candidate::FeedbackPopupComponent#render? only renders it when relevant), so this\n// controller just handles the rating click and the dismiss click -- no page navigation or\n// reload either way. The floating (bottom-corner) variant also starts hidden and reveals\n// itself after a short delay, so it appears as a deliberate nudge instead of competing with\n// the page for attention the instant it loads.\nconst FLOATING_REVEAL_DELAY_MS = 2500\n\nexport default class extends Controller {\n  static values = { context: String, submitUrl: String, floating: Boolean }\n  static targets = [\"ratingStep\", \"thanksStep\"]\n\n  connect() {\n    if (this.floatingValue) {\n      this.revealTimeout = setTimeout(() => this.element.classList.remove(\"hidden\"), FLOATING_REVEAL_DELAY_MS)\n    }\n  }\n\n  disconnect() {\n    clearTimeout(this.revealTimeout)\n  }\n\n  dismiss() {\n    this.element.classList.add(\"hidden\")\n  }\n\n  async rate(event) {\n    const rating = event.params.rating\n    this.ratingStepTarget.classList.add(\"hidden\")\n    this.thanksStepTarget.classList.remove(\"hidden\")\n\n    try {\n      await fetch(this.submitUrlValue, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]').content\n        },\n        body: JSON.stringify({ context: this.contextValue, trigger: \"registration_wizard_complete\", rating })\n      })\n    } catch (err) {\n      // Best-effort: candidate already sees the thank-you state either way.\n    }\n\n    setTimeout(() => this.element.classList.add(\"hidden\"), 1800)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Turbo } from \"@hotwired/turbo-rails\"\n\nexport default class extends Controller {\n  static targets = [ \"hiddenId\", \"controller\", \"input\", \"dropzone\", \"preview\", \"previews\", \"uploading\"]\n  static values = {\n  }\n\n  connect() {\n  }\n\n  dragover() {\n    this.highlight()\n  }\n\n  dragleave() {\n    this.lowlight() \n  }\n\n  drop(event) {\n    this.lowlight()\n    this.file_attached(event)\n  }\n\n  change(event) {\n    this.file_attached(event)\n  }\n\n  remove(event) {\n    const preview = event.target.closest(\"[data-file-upload-target=preview]\")\n    const checkbox = preview.querySelector(\"input[type=checkbox]\")\n    if(checkbox) {\n      this.lowlight()\n      preview.classList.add(\"hidden\")\n      this.dropzoneTarget.closest(\"div\").classList.remove(\"hidden\")\n      checkbox.checked = true\n    } else {\n      console.error(\"Could not find checkbox to mark file for deletion\")\n    }\n  }\n\n  async file_attached(event) {\n\n    this.dropzoneTarget.classList.add(\"hidden\")\n\n    const files = this.inputTarget.files\n    for(let i = 0; i < files.length; i++) {\n      const file = files[i]\n      const preview = this.previewTarget.cloneNode(true)\n      preview.classList.remove(\"hidden\")\n      preview.querySelector(\".preview-filename\").textContent = `Uploading ${file.name}`\n      this.previewsTarget.appendChild(preview)\n    }\n\n    this.submitForm()\n  }\n\n  async submitForm(){\n    const form = this.controllerTarget.closest('form')\n    const formData = new FormData(form)\n\n    const response = await fetch(form.action, {\n      method: \"PATCH\",\n      body: formData,\n      headers: {\n        'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').content,\n      }\n    })\n    Turbo.renderStreamMessage(await response.text());\n  }\n\n  highlight() {\n    this.dropzoneTarget.classList.remove(\"bg-gray-50\")\n    this.dropzoneTarget.classList.remove(\"hover:bg-gray-100\")\n    this.dropzoneTarget.classList.add(\"bg-blue-200\")\n    this.dropzoneTarget.classList.add(\"text-black\")\n    this.dropzoneTarget.classList.add(\"border-primary-2\")\n  }\n\n  lowlight() {\n    this.dropzoneTarget.classList.add(\"bg-gray-50\")\n    this.dropzoneTarget.classList.add(\"hover:bg-gray-100\")\n    this.dropzoneTarget.classList.remove(\"bg-blue-200\")\n    this.dropzoneTarget.classList.remove(\"text-black\")\n    this.dropzoneTarget.classList.remove(\"border-primary-2\")\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  connect() {\n    setTimeout(() => {\n      let formEntries = new FormData(this.element).entries()\n      let initialFormValue = JSON.stringify(Object.fromEntries(formEntries))\n      this.element.dataset.initialFormValue = initialFormValue\n    }, 1000);\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Turbo } from \"@hotwired/turbo-rails\"\n\nexport default class extends Controller {\n  submit(event) {\n    if (event.detail.success) {\n      const response = event.detail.fetchResponse\n      if (!response.redirected) return\n\n      Turbo.visit(response.response.url)\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['queryInput', 'resultsContainer'];\n  static values = { debounceTimer: Number, selectUrl: String, usOnly: Boolean };\n\n  inputHandler() {\n    this.debounce(this.search.bind(this), 500);\n  }\n\n  search() {\n    if (this.queryInputTarget.value.length > 0) {\n      const service = new google.maps.places.AutocompleteService();\n      var options = { input: this.queryInputTarget.value, types: [\"(regions)\"]}\n      if (this.usOnlyValue) {\n        options.componentRestrictions = {country: 'us'}\n        options.region = 'us'\n      }\n      service.getPlacePredictions(options, this.displaySuggestions.bind(this));\n    }\n  }\n\n  displaySuggestions(predictions, status) {\n    if (status == google.maps.places.PlacesServiceStatus.OK) {\n      this.resultsContainerTarget.innerHTML = \"\"\n      var ul = this.resultsContainerTarget.appendChild(document.createElement(\"ul\"))\n      ul.classList = 'list-none flex flex-col gap-2 w-full'\n      this.buildSuggestionHTML(predictions[0])\n      predictions.forEach((prediction) => {\n        var li = ul.appendChild(document.createElement(\"li\"))\n        li.innerHTML = this.buildSuggestionHTML(prediction)\n      })\n    } else if (status == google.maps.places.PlacesServiceStatus.ZERO_RESULTS) {\n      this.resultsContainerTarget.innerHTML = \"\"\n      var ul = this.resultsContainerTarget.appendChild(document.createElement(\"ul\"))\n      ul.classList = 'list-none flex flex-col gap-2 w-full'\n      var li = ul.appendChild(document.createElement(\"li\"))\n      li.innerHTML = \"<li class='text-gray-700 hover:bg-gray-100 cursor-pointer w-full px-2 py-3'>No results found</li>\"\n    }\n  }\n\n  buildSuggestionHTML(prediction) {\n    var text = prediction.description\n    var matched_substring = prediction.matched_substrings[0]\n    var matched_text = text.substring(matched_substring.offset, matched_substring.offset + matched_substring.length)\n    var display_text = text.replace(matched_text, \"<strong>\" + matched_text + \"</strong>\")\n    if(this.selectUrlValue !== '') {\n      var href = this.selectUrlValue.replace(/%s/g, encodeURIComponent(text))\n      return `<li class=\"w-full flex\"><a class=\"text-gray-700 hover:bg-gray-100 cursor-pointer w-full px-2 py-3\" href=\"${href}\">${display_text}</a></li>`\n    } else {\n      return `<li class=\"w-full flex\"><a class=\"text-gray-700 hover:bg-gray-100 cursor-pointer w-full px-2 py-3\" data-action=\"click->google-place-predictions#select\" data-text=\"${text}\">${display_text}</a></li>` \n    }\n  }\n\n  select(event) {\n    if (event.target.tagName === 'A') {\n      this.queryInputTarget.value = event.target.dataset.text\n    } else {\n      this.queryInputTarget.value = event.target.parentElement.dataset.text\n    }\n    this.queryInputTarget.form.submit();\n  }\n\n  debounce(callback, time) {\n    clearTimeout(this.debounceTimerValue);\n    this.debounceTimerValue = setTimeout(callback, time);\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n  static targets = [\"loadingMoreContainer\", \"nextPageUrl\"]\n  INTERSECTION_THRESHOLD = 0.9\n\n  connect() {\n    var observer = new IntersectionObserver(changes => {\n      for (const change of changes) {\n        if (change.intersectionRatio >= this.INTERSECTION_THRESHOLD) {\n          this.loadNextPage();\n          return;\n        }\n      }\n    }, { threshold: [0.9] });\n\n    if (this.hasLoadingMoreContainerTarget) {\n      observer.observe(this.loadingMoreContainerTarget);\n    }\n  }\n\n  loadNextPage() {\n    const request = new FetchRequest('get', this.nextPageUrlTarget.value, { responseKind: 'turbo-stream' });\n    request.perform();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  reloadStats(event) {\n    const selectedValue = event.target.value;\n    const url = new URL(window.location.href);\n    const { non_filter_params, filter_params } = this._buildParamsHash(url.searchParams);\n    const updated_filter_params = this._updateFilterParams(filter_params, selectedValue);\n    const updated_params = this._rebuildParams(non_filter_params, updated_filter_params);\n    url.search = updated_params.toString();\n    Turbo.visit(url.href);\n  }\n\n  _buildParamsHash(params) {\n    const non_filter_params = []\n    const filter_params = []\n    for(const [key, value] of params) {\n      if (!key.startsWith('filters[')) {\n        non_filter_params.push([key, value])\n      }\n    }\n\n    let current = {}\n    for (const [key, value] of params) {\n      if (key == 'filters[][field]') {\n        if (Object.keys(current).length) filter_params.push(current);\n        current = { field: value }\n      } else if (key == 'filters[][term]') {\n        current.term = value\n      } else if (key == 'filters[][label]') {\n        current.label = value\n      }\n    }\n    if (Object.keys(current).length) filter_params.push(current);\n    return {non_filter_params, filter_params}\n  }\n\n  _updateFilterParams(filter_params, selectedValue) {\n    if(selectedValue == 'All') {\n      filter_params = filter_params.filter(filter => filter.field !== 'transition_installation');\n    } else {\n      const filter_to_update = filter_params.find(filter => filter.field === 'transition_installation');\n      if (filter_to_update) {\n        filter_to_update.term = selectedValue;\n        filter_to_update.label = selectedValue;\n      } else {\n        filter_params.push({\n          field: 'transition_installation',\n          term: selectedValue,\n          label: selectedValue\n        });\n      } \n    }\n    return filter_params;\n  }\n\n  _rebuildParams(non_filter_params, filter_params) {\n    const url_params = new URLSearchParams();\n    non_filter_params.forEach(([k, v]) => url_params.append(k, v));\n    for (const filter of filter_params) {\n      url_params.append('filters[][field]', filter.field);\n      url_params.append('filters[][term]', filter.term);\n      url_params.append('filters[][label]', filter.label);\n    }\n    return url_params;\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n  static values = {\n    url: String,\n    exhibitorId: String,\n    initialInterested: { type: Boolean, default: false }\n  }\n\n  async toggle(event) {\n    const interested = event.target.checked\n\n    const body = {\n      pre_event: {\n        exhibitor_registration_id: this.exhibitorIdValue,\n        interested: interested\n      }\n    }\n\n    const request = new FetchRequest('post', this.urlValue, { responseKind: 'turbo-stream', body: body })\n\n    try {\n      const response = await request.perform()\n\n      if (!response.ok) {\n        throw new Error('Network response was not ok')\n      }\n\n      const elements = document.querySelectorAll(`[data-interest-exhibitor-id-value=\"${this.exhibitorIdValue}\"]`)\n      elements.forEach(element => {\n        element.checked = interested\n      })\n\n      if (interested) {\n        const customEvent = new CustomEvent('interest:added', {\n          detail: { exhibitorId: this.exhibitorIdValue },\n          bubbles: true\n        })\n        this.element.dispatchEvent(customEvent)\n      }\n\n      const event = new CustomEvent('interestUpdated', {\n        detail: { interested }\n      })\n      window.dispatchEvent(event)\n\n    } catch (error) {\n      console.error('Error:', error)\n      event.target.checked = !interested\n    }\n  }\n}\n\n", "import { Controller } from \"@hotwired/stimulus\"\n\n\nexport default class extends Controller {\n  static targets = ['searchContainer', 'queryInput', 'resultsContainer', 'resultsFrame',\n                    'selectedContainer', 'selectedTemplate', 'selectedList',\n                    'selectedOptionTemplate', 'selectedOptions']\n  static values = { minLength: Number, debounceTimer: Number, selected: Array, country: String, region: String, maxSelections: Number }\n\n  connect() {\n    this.selected = this.selectedValue\n    this.selected.forEach((selected) => {\n      this.renderSelectedItem(selected.id, selected.label)\n    })\n\n    if (this.maxSelectionsValue === 1 && this.selected.length > 0) {\n      this.hideElement(this.searchContainerTarget)\n    }\n  }\n\n  inputHandler(event) {\n    this.debounce(this.debouncedInputHandler.bind(this, event), 500)\n  }\n\n  debouncedInputHandler(event) {\n    if (event.target.value.length > this.minLengthValue) {\n      this.search()\n    } else {\n      this.hideElement(this.resultsContainerTarget)\n    }\n  }\n\n  blurHandler(event) {\n    if (!this.resultsContainerTarget.contains(event.relatedTarget) && !this.searchContainerTarget.contains(event.relatedTarget)) {\n      this.hideElement(this.resultsContainerTarget)\n    }\n    event.preventDefault()\n  }\n\n  search() {\n    const service = new google.maps.places.AutocompleteService();\n    var options = {\n      input: this.queryInputTarget.value, types: [\"(regions)\"],\n      componentRestrictions: { country: this.countryValue },\n      region: this.regionValue\n    }\n    service.getPlacePredictions(options, this.displaySuggestions.bind(this));\n    this.showElement(this.resultsContainerTarget)\n  }\n\n  displaySuggestions(predictions, status) {\n    if (status == google.maps.places.PlacesServiceStatus.OK) {\n      this.resultsContainerTarget.innerHTML = \"\"\n      var ul = this.resultsContainerTarget.appendChild(document.createElement(\"ul\"))\n      ul.classList = 'relative divide-y divide-gray-200'\n      this.buildSuggestionHTML(predictions[0])\n      this.addRemoteResult(ul)\n      predictions.forEach((prediction) => {\n        var li = ul.appendChild(document.createElement(\"li\"))\n        li.innerHTML = this.buildSuggestionHTML(prediction)\n      })\n    } else if (status == google.maps.places.PlacesServiceStatus.ZERO_RESULTS) {\n      this.resultsContainerTarget.innerHTML = \"\"\n      var ul = this.resultsContainerTarget.appendChild(document.createElement(\"ul\"))\n      ul.classList = 'relative divide-y divide-gray-200'\n      var li = ul.appendChild(document.createElement(\"li\"))\n      li.innerHTML = \"<li class='text-gray-700 hover:bg-gray-100 cursor-pointer w-full px-2 py-3'>No results found</li>\"\n    }\n  }\n\n  buildSuggestionHTML(prediction) {\n    var text = prediction.description\n    var matched_substring = prediction.matched_substrings[0]\n    var matched_text = text.substring(matched_substring.offset, matched_substring.offset + matched_substring.length)\n    var display_text = text.replace(matched_text, \"<strong>\" + matched_text + \"</strong>\")\n    return `<li role=\"option\" tabindex=\"-1\"><a href=\"\" class=\"flex px-3 py-2 relative hover:cursor-pointer hover:bg-gray-100 focus-within:ring-2 focus-within:ring-inset focus-within:ring-rm-dark-blue\" data-action=\"click->location-picker#select\" data-location-picker-id-param=\"${text}\" data-location-picker-value-param=\"${text}\">${display_text}</a></li>`\n  }\n\n  select(event) {\n    var selectedId = event.params.id\n    var selectedValue = event.params.value\n\n    this.hideElement(this.resultsContainerTarget)\n    this.queryInputTarget.value = \"\"\n\n    if (this.maxSelectionsValue === 1) {\n      this.clearAllSelections()\n    }\n\n    this.renderSelectedItem(selectedId, selectedValue)\n    this.selectedOptionsTarget.dispatchEvent(new Event('change'))\n\n    if (this.maxSelectionsValue === 1) {\n      this.hideElement(this.searchContainerTarget)\n    }\n\n    this.queryInputTarget.focus()\n    event.preventDefault()\n  }\n\n  clear(event) {\n    var id = event.params.id\n\n    this.removeSelectedItem(id)\n    this.selectedOptionsTarget.dispatchEvent(new Event('change'))\n\n    if (this.maxSelectionsValue === 1) {\n      this.showElement(this.searchContainerTarget)\n    }\n\n    this.queryInputTarget.focus()\n    event.preventDefault()\n  }\n\n  renderSelectedItem(id, label) {\n    let item = this.selectedTemplateTarget.content.cloneNode(true);\n    item.querySelector(\".chip-box\").setAttribute(\"data-id\", id)\n    item.querySelector('.chip-label').innerText = label;\n    item.querySelector('.remove-button').dataset.locationPickerIdParam = id;\n    this.selectedListTarget.appendChild(item);\n    let option = this.selectedOptionTemplateTarget.content.cloneNode(true);\n    option.querySelector('option').value = id;\n    option.querySelector('option').innerText = label;\n    this.selectedOptionsTarget.appendChild(option);\n  }\n\n  removeSelectedItem(id) {\n    this.selectedOptionsTarget.querySelector(`option[value=\"${id}\"]`).remove()\n    this.selectedListTarget.querySelector(`.chip-box[data-id=\"${id}\"]`).remove()\n  }\n\n  clearAllSelections() {\n    this.selectedOptionsTarget.querySelectorAll('option.selected-option').forEach(option => option.remove())\n    this.selectedListTarget.querySelectorAll('.chip-box').forEach(chip => chip.remove())\n  }\n\n  hideElement(elem) {\n    elem.classList.remove(\"visible\")\n    elem.classList.add(\"hidden\")\n  }\n\n  showElement(elem) {\n    elem.classList.remove(\"hidden\")\n    elem.classList.add(\"visible\")\n  }\n\n  debounce(callback, time) {\n    clearTimeout(this.debounceTimerValue);\n    this.debounceTimerValue = setTimeout(callback, time);\n  }\n\n  addRemoteResult(ul) {\n    const termsToMatch = ['remote', 'telecommute', 'telecommuting']\n    const matchedTerms = termsToMatch.filter(term => term.includes(this.queryInputTarget.value.toLowerCase()))\n    if (matchedTerms.length > 0) {\n      var li = ul.appendChild(document.createElement(\"li\"))\n      li.innerHTML = `<li role=\"option\" tabindex=\"-1\"><a href=\"\" class=\"flex px-3 py-2 relative hover:cursor-pointer hover:bg-gray-100 focus-within:ring-2 focus-within:ring-inset focus-within:ring-rm-dark-blue\" data-action=\"click->location-picker#select\" data-location-picker-id-param=\"Remote/Telecommuting\" data-location-picker-value-param=\"Remote/Telecommuting\">Remote/Telecommuting</a></li>`\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n  static targets = [\"recipientCountUpdateUrl\", \"launchModal\", \"confirmationEntry\", \"actualCount\", \"launchContainer\", \"launchButton\", \"launchDialogButton\", \"editor\"]\n  static values = { sendTestPath: String }\n\n  editorTargetConnected() {\n    let config = Object.assign({ target: this.editorTarget }, TinyMCERails.configuration.default )\n    tinymce.init(config)\n  }\n\n  editorTargetDisconnected() {\n    tinymce.remove()\n  }\n\n  async count(event) {\n    this.disableLaunch() //force save after changes to launch\n    event.preventDefault()\n    const frm = event.target.nodeName == 'FORM' ? event.target : event.target.form\n    const formData = new FormData(frm)\n    formData.delete(\"_method\")\n    const request = new FetchRequest('post', this.recipientCountUpdateUrlTarget.value, { responseKind: 'turbo-stream', body: formData })\n    return await request.perform()\n  }\n\n  async sendTest(event) {\n    event.preventDefault()\n    const frm = event.target.form\n    const formData = new FormData(frm)\n    formData.delete(\"_method\")\n    const request = new FetchRequest('post', this.sendTestPathValue, { responseKind: 'turbo-stream', body: formData })\n    return await request.perform()\n  }\n\n  disableLaunch() {\n    this.launchDialogButtonTarget.disabled = true\n    this.launchDialogButtonTarget.innerHTML = \"Save changes before launching\"\n  }\n\n  showLaunch(event) {\n    event.preventDefault()\n    this.launchModalTarget.classList.remove('hidden')\n  }\n\n  closeLaunch(event) {\n    event.preventDefault()\n    this.launchModalTarget.classList.add('hidden')\n  }\n\n  confirmCount(event) {\n    event.preventDefault()\n    if (this.actualCountTarget.innerText == this.confirmationEntryTarget.value){\n      this.launchContainerTarget.classList.remove('text-red-800', 'bg-red-200')\n      this.launchContainerTarget.classList.add('text-green-800', 'bg-green-200')\n    }else{\n      this.launchContainerTarget.classList.remove('text-green-800', 'bg-green-200')\n      this.launchContainerTarget.classList.add('text-red-800', 'bg-red-200')\n    }\n  }\n\n  selectDeliveryOption(event) {\n    if (this.actualCountTarget.innerText == this.confirmationEntryTarget.value){\n      this.launchButtonTarget.disabled = false\n    }\n\n    const container = event.target.labels[0].parentNode\n    const deliveryOption = event.target.value\n\n    container.querySelectorAll(\"label\").forEach((el) => {\n      el.classList.remove('bg-slate-50')\n    })\n    event.target.labels[0].classList.add('bg-slate-50')\n\n    container.querySelectorAll(\"#options\").forEach((el) => {\n      el.classList.add('hidden')\n    })\n\n    event.target.labels[0].querySelector(\"#options\").classList.remove('hidden')\n  }\n\n\n\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = { addEventListener: Boolean, confirmClose: Boolean, confirmCloseMessage: String }\n\n  connect() {\n    if(this.addEventListenerValue) {\n      document.addEventListener('turbo:submit-end', this.handleSubmit);\n      document.addEventListener('turbo:submit-start', this.handleShowLoading);\n    }\n    document.body.style.overflow = 'hidden';\n  }\n\n  disconnect() {\n    document.removeEventListener('turbo:submit-end', this.handleSubmit);\n    document.body.style.overflow = 'auto';\n  }\n\n  close() {\n    // Remove src reference from parent frame element\n    // Without this, turbo won't re-open the modal on subsequent clicks\n    let result = true;\n    if (this.confirmCloseValue) result = confirm(this.confirmCloseMessageValue); \n    if (result) {\n      this.element.closest(\"turbo-frame\").src = undefined;\n      this.element.remove();\n    }\n  }\n\n  handleKeyup(e) {\n    if (e.code == \"Escape\") {\n      this.close();\n    }\n  }\n\n  handleShowLoading(e) {\n    let elements_to_disable = e.srcElement.closest('turbo-frame').getElementsByClassName('can-show-loading')\n    Array.from(elements_to_disable).forEach(element => {\n      element.classList.add('is-loading');\n      element.setAttribute('disabled', true);\n    });\n  }\n\n  handleHideShowLoading(e) {\n    let elements_to_disable = e.srcElement.closest('turbo-frame').getElementsByClassName('can-show-loading');\n    Array.from(elements_to_disable).forEach(element => {\n      element.classList.remove('is-loading');\n      element.removeAttribute('disabled');\n    });\n  }\n\n  handleSubmit = (e) => {\n    this.handleHideShowLoading(e);\n    if (e.detail.success) {\n      this.close();\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"dateInput\"]\n  static values = {defaultDate: String, frameSelector: String}\n\n  connect() {\n    this.initDatePicker();\n  }\n\n  initDatePicker() {\n    window.flatpickr((this.dateInputTarget), {\n      defaultDate: this.defaultDateValue,\n      disableMobile: \"true\",\n      plugins: [\n        new monthSelectPlugin({\n          shorthand: true,\n          dateFormat: \"F Y\",\n          altFormat: \"F Y\",\n        })\n      ],\n      onClose: function (selectedDates, dateStr, instance) {\n        this.dispatch(\"monthYearClosed\", {});\n      }.bind(this),\n    });\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class PickerController extends Controller {\n  static targets = ['resultsContainer', 'searchContainer']\n\n  connect() {\n    this.initializeBlurHandling()\n    this.boundPositionDropdown = this.positionDropdown.bind(this)\n  }\n\n  initializeBlurHandling() {\n    this.mouseInContainer = false\n\n    this.resultsContainerTarget.addEventListener('mouseenter', () => {\n      this.mouseInContainer = true\n    })\n\n    this.resultsContainerTarget.addEventListener('mouseleave', () => {\n      this.mouseInContainer = false\n    })\n\n    this.outsideClickHandler = (e) => {\n      // Check if the clicked element has a data attribute or is a specific interactive element\n      // that should be allowed to receive clicks while the picker is open\n      const isAllowedInteractive =\n        e.target.closest('[data-picker-ignore]') ||\n        e.target.closest('a[href]') ||\n        e.target.closest('button');\n\n      if (!this.resultsContainerTarget.contains(e.target) &&\n          !this.searchContainerTarget.contains(e.target) &&\n          !this.mouseInContainer &&\n          !isAllowedInteractive) {\n        this.hideElement(this.resultsContainerTarget)\n      }\n    }\n\n    document.addEventListener('mousedown', this.outsideClickHandler)\n  }\n\n  disconnect() {\n    document.removeEventListener('mousedown', this.outsideClickHandler)\n  }\n\n  debouncedInputHandler(event) {\n    if (event.target.value.length >= this.minLengthValue) {\n      this.search()\n    }\n  }\n\n  blurHandler(event) {\n    if (event.type === 'keydown' && event.key === 'Escape' && this.isResultVisible()) {\n      event.preventDefault()\n      event.stopPropagation()\n      this.hideElement(this.resultsContainerTarget)\n      this.queryTarget.value = \"\"\n      return\n    }\n\n    if (this.mouseInContainer) {\n      return\n    }\n\n    if (!this.resultsContainerTarget.contains(event.relatedTarget) &&\n        !this.searchContainerTarget.contains(event.relatedTarget)) {\n      this.hideElement(this.resultsContainerTarget)\n      this.queryTarget.value = \"\"\n    }\n\n    event.preventDefault()\n  }\n\n  hideElement(elem) {\n    elem.classList.remove(\"visible\")\n    elem.classList.add(\"hidden\")\n    window.removeEventListener('scroll', this.boundPositionDropdown)\n    window.removeEventListener('resize', this.boundPositionDropdown)\n  }\n\n  showElement(elem) {\n    elem.classList.remove(\"hidden\")\n    elem.classList.add(\"visible\")\n    this.positionDropdown()\n    window.addEventListener('scroll', this.boundPositionDropdown)\n    window.addEventListener('resize', this.boundPositionDropdown)\n  }\n\n  debounce(callback, time) {\n    clearTimeout(this.debounceTimerValue);\n    this.debounceTimerValue = setTimeout(callback, time);\n  }\n\n  positionDropdown() {\n    const rect = this.searchContainerTarget.getBoundingClientRect()\n    const modal = this.searchContainerTarget.closest('[data-picker-modal-locator=\"true\"]')\n    const modalRect = modal ? modal.getBoundingClientRect() : null\n    if (modalRect) {\n      this.resultsContainerTarget.style.top = `${rect.bottom - modalRect.top}px`\n      this.resultsContainerTarget.style.left = `${rect.left - modalRect.left}px`\n    } else {\n      this.resultsContainerTarget.style.position = 'absolute';\n      this.resultsContainerTarget.style.top = `${rect.height}px`\n      this.resultsContainerTarget.style.left = '0px'\n    }\n    this.resultsContainerTarget.style.width = `${rect.width}px`\n  }\n\n  isResultVisible() {\n    return this.resultsContainerTarget.classList.contains(\"visible\")\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport PickerController from \"./picker_controller\"\n\nexport default class MultiChipPickerController extends PickerController {\n  static targets = [...PickerController.targets, 'query', 'selectedContainer', 'selectedTemplate',\n                    'selectedList', 'selectedOptionTemplate', 'selectedOptions', 'resultsFrame', 'selectedSummary']\n\n  static values = { url: String, minLength: Number, debounceTimer: Number, selected: Array, allowNew: Boolean, collapsibleSelected: Boolean, submitOnBlur: Boolean}\n\n  connect() {\n    super.connect()\n    this.selected = this.selectedValue || []\n    this.render({ focus: false })\n    this.resultsFrameTarget.addEventListener('turbo:frame-load', () => {\n      this.render()\n    })\n  }\n\n  inputHandler(event) {\n    event.preventDefault()\n    event.target.value = event.target.value.substr(0, 50)\n    event.target.value = event.target.value.replace(/[^a-zA-Z0-9,\\/\\&\\(\\)\\- ]/g, \"\")\n\n    if (this.allowNewValue && (event.target.value.includes(\",\") || event.key == \"Enter\")) {\n      const [item, ...rest] = event.target.value.split(\",\").map(it => it.trim()).filter(it => it)\n      event.target.value = rest;\n      if (!item || item.length == 0) return;\n      this.add(item, item)\n      this.inputHandler(event)\n    } else {\n      this.debounce(this.debouncedInputHandler.bind(this, event), 500)\n    }\n  }\n\n  search() {\n    this.resultsFrameTarget.src = this.urlValue.replace(/%s/g, encodeURIComponent(this.queryTarget.value))\n    this.showElement(this.resultsContainerTarget)\n  }\n\n  select(event) {\n    event.preventDefault()\n    this.toggle(event)\n    this.selectedOptionsTarget.dispatchEvent(new Event('change'))\n    this.queryTarget.form.dispatchEvent(new Event('change'))\n    this.render()\n  }\n\n  clear(event) {\n    this.remove(event.params.id)\n    this.selectedOptionsTarget.dispatchEvent(new Event('change'))\n    this.queryTarget.form.dispatchEvent(new Event('change'))\n    event.preventDefault()\n  }\n\n  renderSelectedItem(id, label, additionalValues) {\n    let item = this.selectedTemplateTarget.content.cloneNode(true);\n    item.querySelector(\".chip-box\").setAttribute(\"data-id\", id)\n    item.querySelector(\".chip-box\").setAttribute(\"data-additional-values\", JSON.stringify(additionalValues))\n    item.querySelector('.chip-box').setAttribute(\"data-label\", label);\n    item.querySelector('.chip-label').innerText = label;\n    item.querySelector('.remove-button').dataset.multiChipPickerIdParam = id;\n    this.selectedListTarget.appendChild(item);\n    let option = this.selectedOptionTemplateTarget.content.cloneNode(true);\n    option.querySelector('option').value = id;\n    option.querySelector('option').innerText = label;\n    this.selectedOptionsTarget.appendChild(option);\n  }\n\n  toggle(event) {\n    const icon = event.currentTarget.querySelector(\".results-component-icon\")\n    if(this.isSelected(event.currentTarget.dataset.multiChipPickerIdParam, event.currentTarget.dataset.multiChipPickerValueParam)) {\n      this.remove(event.currentTarget.dataset.multiChipPickerIdParam)\n      icon.classList.add(\"opacity-0\")\n    } else {\n      this.add(event.currentTarget.dataset.multiChipPickerIdParam, event.currentTarget.dataset.multiChipPickerValueParam)\n      icon.classList.remove(\"opacity-0\")\n    }\n  }\n\n  add(id, label, additionalValues) {\n    const idExists = this.selected.find(selected => selected.id == id)\n    const labelExists = this.selected.find(selected => selected.label == label)\n    if(idExists || labelExists) return\n\n    this.selected.push({ id: id, label: label, additional_values: additionalValues })\n    this.render()\n  }\n\n  remove(id) {\n    this.selected = this.selected.filter(selected => selected.id != id)\n    this.selectedOptionsTarget.querySelector(`option[value=\"${id}\"]`).remove()\n    this.selectedListTarget.querySelector(`.chip-box[data-id=\"${id}\"]`).remove()\n  }\n\n  render({ focus = true } = {}) {\n    this.selectedListTarget.innerHTML = \"\"\n    this.selectedOptionsTarget.querySelectorAll('option')?.forEach(option => option.remove())\n    const displayed_dropdown = Array.from(this.resultsFrameTarget.querySelectorAll('a'))?.map(anchor => {\n      return {\n        icon: anchor.querySelector(\".results-component-icon\"),\n        id: anchor.dataset['multiChipPickerIdParam'],\n        label: anchor.dataset['multiChipPickerValueParam'],\n      }\n    })\n    this.selected.forEach(selected => {\n      this.renderSelectedItem(selected.id, selected.label, selected.additional_values)\n      const anchor = displayed_dropdown.find(item => item.id == selected.id || item.label == selected.label)\n      if(anchor) {\n        anchor.icon.classList.remove(\"opacity-0\")\n      }\n    })\n    if (focus) this.queryTarget.focus()\n    this.selectedOptionsTarget.dispatchEvent(new Event('change'))\n    this.updateSelectedSummary()\n  }\n\n  isSelected(id, label) {\n    return this.selected.find(selected => selected.id == id || selected.label == label)\n  }\n\n  toggleSelectedList() {\n    this.selectedListTarget.classList.toggle(\"hidden\")\n  }\n\n  submitOnBlurHandler(event) {\n    if (!this.submitOnBlurValue) return\n    if (this.mouseInContainer) return\n    if (this.resultsContainerTarget.contains(event.relatedTarget) ||\n        this.searchContainerTarget.contains(event.relatedTarget)) {\n      return\n    }\n    this.queryTarget.form.requestSubmit()\n  }\n\n  updateSelectedSummary() {\n    if (!this.hasSelectedSummaryTarget) return\n    const count = this.selected.length\n    this.selectedSummaryTarget.innerText = count === 0 ? \"None selected\" : `${count} selected`\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['results'];\n  static values = { url: String }\n\n  connect() {\n    console.log(\"multi search controller is connected\");\n  }\n\n  initialize() {\n    console.log(\"multi-search controller is initialized\")\n  }\n\n  search(event) {\n    var frame = document.getElementById(\"multisearch_frame\")\n    var container = document.getElementById(\"multisearchResults\")\n\n    if (event.target.value.length > 2) {\n      frame.src = this.urlValue.replace(/%s/g, encodeURIComponent(event.target.value))\n      container.classList.remove(\"hidden\")\n      container.classList.add(\"visible\")\n    } else {\n      container.classList.remove(\"visible\")      \n      container.classList.add(\"hidden\")\n    }\n  }\n\n  hideResult() {\n    var result_container = document.getElementById(\"multisearchResults\")\n    result_container.classList.remove(\"visible\")\n    result_container.classList.add(\"hidden\")\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['searchContainer', 'query', 'hiddenIdField', 'resultsContainer', 'resultsFrame', 'selectedContainer', 'selectedValue'];\n  static values = { url: String }\n\n  search(event) {\n    if (event.target.value.length > 2) {\n      this.resultsFrameTarget.src = this.urlValue.replace(/%s/g, encodeURIComponent(event.target.value))\n      this.showElement(this.resultsContainerTarget)\n    } else {\n      this.hideElement(this.resultsContainerTarget)\n    }\n  }\n\n  select(event) {\n    var selectedId = event.params.id\n    var selectedValue = event.params.value\n\n    this.hideElement(this.resultsContainerTarget)\n    this.hideElement(this.searchContainerTarget)\n    this.showElement(this.selectedContainerTarget)\n    this.selectedValueTarget.innerText = selectedValue\n    this.hiddenIdFieldTarget.value = selectedId\n    event.preventDefault()\n  }\n\n  clear(event) {\n    this.selectedValueTarget.innerText = \"\"\n    this.hiddenIdFieldTarget.value = \"\"\n    this.queryTarget.value = \"\"\n    this.showElement(this.searchContainerTarget)\n    this.hideElement(this.selectedContainerTarget)\n    this.queryTarget.focus()\n    event.preventDefault()\n  }\n\n  hideElement(elem) {\n    elem.classList.remove(\"visible\")\n    elem.classList.add(\"hidden\")\n  }\n\n  showElement(elem) {\n    elem.classList.remove(\"hidden\")\n    elem.classList.add(\"visible\")\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"amount\", \"amountDisplay\", \"surchargeDisplay\", \"totalDisplay\"]\n\n  connect() {\n    this.updatePaymentCalculation()\n  }\n\n  updatePaymentCalculation() {\n    const amount = parseFloat(this.amountTarget.value) || 0\n    const surcharge = Math.round(amount * 3.75) / 100\n    const total = amount + surcharge\n\n    this.amountDisplayTarget.textContent = '$' + amount.toFixed(2)\n    this.surchargeDisplayTarget.textContent = '$' + surcharge.toFixed(2)\n    this.totalDisplayTarget.textContent = '$' + total.toFixed(2)\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"icon\", \"spinner\", \"text\"]\n\n  async download(event) {\n    event.preventDefault()\n    this._setLoading(true)\n\n    try {\n      const response = await fetch(this.element.href)\n\n      if (!response.ok) {\n        throw new Error(`PDF export failed (${response.status})`)\n      }\n\n      const blob = await response.blob()\n      const disposition = response.headers.get(\"Content-Disposition\") || \"\"\n      const filename = disposition.match(/filename=\"?([^\";\\n]+)\"?/)?.[1] || \"report.pdf\"\n\n      const url = URL.createObjectURL(blob)\n      const a = document.createElement(\"a\")\n      a.href = url\n      a.download = filename\n      a.click()\n      URL.revokeObjectURL(url)\n    } catch (error) {\n      if (this.hasTextTarget) this.textTarget.textContent = error.message\n    } finally {\n      this._setLoading(false)\n    }\n  }\n\n  _setLoading(loading) {\n    if (loading) {\n      if (this.hasIconTarget)    this.iconTarget.classList.add(\"hidden\")\n      if (this.hasSpinnerTarget) this.spinnerTarget.classList.remove(\"hidden\")\n      if (this.hasTextTarget)    this.textTarget.textContent = \"Generating\u2026\"\n      this.element.classList.add(\"opacity-60\", \"pointer-events-none\", \"cursor-not-allowed\")\n    } else {\n      if (this.hasIconTarget)    this.iconTarget.classList.remove(\"hidden\")\n      if (this.hasSpinnerTarget) this.spinnerTarget.classList.add(\"hidden\")\n      if (this.hasTextTarget)    this.textTarget.textContent = \"Export as PDF\"\n      this.element.classList.remove(\"opacity-60\", \"pointer-events-none\", \"cursor-not-allowed\")\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = {phone: String}\n\n  dial() {\n    document.getElementById('dialpad-frame').contentWindow.postMessage({\n      'api': 'opencti_dialpad',\n      'version': '1.0',\n      'method': 'initiate_call',\n      'payload': {\n        'enable_current_tab': false,\n        'phone_number': this.phoneValue,\n        'custom_data': 'any string'\n      }\n    }, 'https://dialpad.com');\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\n// Highlights form fields that were pre-filled from a parsed resume with a\n// green background, then clears the highlight after `duration` ms so the\n// form settles back to its normal look.\nexport default class extends Controller {\n  static values = {\n    fields: Array,\n    formId: String,\n    duration: { type: Number, default: 5000 }\n  }\n\n  connect() {\n    const form = document.getElementById(this.formIdValue)\n    if (!form) return\n\n    const highlighted = []\n    this.fieldsValue.forEach((name) => {\n      form.querySelectorAll(`[name$=\"[${name}]\"]`).forEach((el) => {\n        if (el.type === \"hidden\") return\n        el.classList.add(\"bg-green-50\", \"border-green-400\")\n        highlighted.push(el)\n      })\n    })\n\n    if (highlighted.length) {\n      this.timeout = setTimeout(() => {\n        highlighted.forEach((el) => el.classList.remove(\"bg-green-50\", \"border-green-400\"))\n      }, this.durationValue)\n    }\n  }\n\n  disconnect() {\n    if (this.timeout) clearTimeout(this.timeout)\n  }\n}\n", "// Shared peer-media presentation for OpenTok broadcast rooms.\n//\n// Owns ONLY the stream->tile core that is identical for the audience viewer and a co-hosting\n// broadcaster: subscribe to a session's streams, build/track/remove tiles, and toggle peer audio.\n// It does NOT own the session connection, container visibility policy, layout-modifier classes,\n// custom events, or the unload-on-empty decision -- those are host-controller concerns. The host\n// passes an already-connected session plus the mount elements, and reacts via the onChange callback.\nexport class PeerMediaPresenter {\n  // session: a connected OT.Session.\n  // mounts:  { cameras, screen } DOM elements to subscribe tiles into.\n  // opts:    { excludeConnectionId, onChange }\n  //   excludeConnectionId -- skip streams from this connection during the initial scan (our own\n  //     publisher streams). streamCreated never fires for our own streams, so only the scan needs it.\n  //   onChange(counts) -- called after every subscribe/unsubscribe with counts() so the host can\n  //     re-run its own visibility/layout logic.\n  constructor(session, mounts, { excludeConnectionId = null, onChange = () => {} } = {}) {\n    this.session = session;\n    this.mounts = mounts;\n    this.excludeConnectionId = excludeConnectionId;\n    this.onChange = onChange;\n    this.subscribers = [];\n    this.tiles = {};\n    this.boundStreamCreated = (event) => this.subscribe(event.stream);\n    this.boundStreamDestroyed = (event) => this.unsubscribe(event.stream.id);\n    this.boundStreamPropertyChanged = (event) => this.handleStreamPropertyChanged(event);\n  }\n\n  // Register the session stream handlers. Call this BEFORE session.connect() so no streamCreated is\n  // missed during the connect handshake (the viewer path); the publish path connects first and uses\n  // start() instead.\n  attach() {\n    this.session.on('streamCreated', this.boundStreamCreated);\n    this.session.on('streamDestroyed', this.boundStreamDestroyed);\n    this.session.on('streamPropertyChanged', this.boundStreamPropertyChanged);\n  }\n\n  // A broadcaster toggling their camera mid-stream (publishVideo) flips the tile between video and\n  // initials in place -- no resubscribe; the OT element under the overlay keeps playing audio. The\n  // event fires for every stream in the session, so the tiles lookup skips our own publisher streams.\n  handleStreamPropertyChanged(event) {\n    if (event.changedProperty !== 'hasVideo') return;\n    const tile = this.tiles[event.stream.id];\n    if (!tile) return;\n    if (this.streamType(event.stream) === 'screen') return;\n    tile.classList.toggle('broadcast-tile--novideo', !event.newValue);\n    this.onChange(this.counts());\n  }\n\n  // Subscribe to streams already present in the session (broadcasters who were live before us). Call\n  // this once the session is connected (its `streams` dictionary is only populated post-connect).\n  subscribeExisting() {\n    const streams = this.session.streams;\n    if (!streams) return;\n\n    Object.values(streams).forEach((stream) => {\n      if (!stream || typeof stream !== 'object' || !stream.id) return;\n      if (this.excludeConnectionId &&\n          stream.connection &&\n          stream.connection.connectionId === this.excludeConnectionId) {\n        return;\n      }\n      try {\n        this.subscribe(stream);\n      } catch (err) {\n        console.error('Error handling existing stream:', err);\n      }\n    });\n  }\n\n  // Convenience for an already-connected session (the publish path): attach handlers and pick up any\n  // streams already in the session in one call.\n  start() {\n    this.attach();\n    this.subscribeExisting();\n  }\n\n  // Classify a stream into the container it belongs in. Multiple broadcasters can publish\n  // simultaneously, so routing is driven purely by per-stream metadata, never broadcast_type.\n  // A video-less stream is still a camera tile -- it renders as an initials card in the same grid,\n  // so audio-only broadcasters occupy normal grid space instead of a separate audio-only mode.\n  streamType(stream) {\n    return stream.videoType === 'screen' ? 'screen' : 'camera';\n  }\n\n  counts() {\n    const tally = { cameras: 0, screen: 0, total: 0 };\n    (this.subscribers || []).forEach((sub) => {\n      if (!sub.stream) return;\n      if (this.streamType(sub.stream) === 'screen') tally.screen += 1;\n      else tally.cameras += 1;\n      tally.total += 1;\n    });\n    return tally;\n  }\n\n  // Build a tile (aspect-locked, named) and the inner element OpenTok subscribes into. All\n  // dimensions live in CSS (.broadcast-tile* in application.tailwind.css); here we only pick classes.\n  buildTile(stream, type) {\n    const tile = document.createElement('div');\n    tile.dataset.streamId = stream.id;\n    tile.className = type === 'screen'\n      ? 'broadcast-tile broadcast-tile--screen'\n      : 'broadcast-tile broadcast-tile--camera';\n\n    const mount = document.createElement('div');\n    mount.className = 'broadcast-tile__mount';\n    tile.appendChild(mount);\n\n    if (stream && stream.name) {\n      const label = document.createElement('div');\n      label.textContent = stream.name;\n      label.className = 'broadcast-tile__label';\n      tile.appendChild(label);\n    }\n\n    // Every camera tile carries an initials overlay; --novideo reveals it over the OT mount when the\n    // stream has no video (audio-only broadcaster, or a camera toggled off mid-stream).\n    if (type !== 'screen') {\n      const overlay = document.createElement('div');\n      overlay.className = 'broadcast-tile__initials';\n      const badge = document.createElement('div');\n      badge.className = 'broadcast-tile__initials-badge';\n      badge.textContent = this.initialsFor(stream.name);\n      overlay.appendChild(badge);\n      tile.appendChild(overlay);\n      tile.classList.toggle('broadcast-tile--novideo', !stream.hasVideo);\n    }\n\n    return { tile, mount };\n  }\n\n  // \"Clark Marx\" -> \"CM\", single word -> its first letter. Stream names carry a role suffix --\n  // \"Clark Marx (RecruitMilitary)\", \"Jane Doe (Recruiter)\" -- so parentheticals are stripped before\n  // picking words. Publishers always set a name (see publish_broadcast_controller's initPublisher\n  // options), so '?' only guards a malformed stream.\n  initialsFor(name) {\n    const words = (name || '').replace(/\\(.*?\\)/g, ' ').trim().split(/\\s+/).filter(Boolean);\n    if (words.length === 0) return '?';\n    const first = words[0][0];\n    const last = words.length > 1 ? words[words.length - 1][0] : '';\n    return (first + last).toUpperCase();\n  }\n\n  subscribe(stream) {\n    // Idempotent: a stream can reach us both via the streamCreated event and the initial scan. Only\n    // the first wins, so attaching the handler before connect AND scanning after never doubles a tile.\n    if (this.subscribers.some((sub) => sub.stream && sub.stream.id === stream.id)) return;\n\n    const type = this.streamType(stream);\n    const style = {\n      buttonDisplayMode: 'off',\n      nameDisplayMode: 'off', // we render our own name label per tile\n      audioLevelDisplayMode: 'off',\n      audioBlockedDisplayMode: 'off'\n    };\n\n    const container = type === 'screen' ? this.mounts.screen : this.mounts.cameras;\n    const { tile, mount } = this.buildTile(stream, type);\n    container.appendChild(tile);\n\n    const subscriber = this.session.subscribe(\n      stream,\n      mount,\n      {\n        insertMode: 'append',\n        width: '100%',\n        height: '100%',\n        fitMode: type === 'screen' ? 'contain' : 'cover',\n        style,\n        showControls: false\n      },\n      this.handleCallback.bind(this)\n    );\n\n    if (type !== 'screen') this.attachSpeakingIndicator(subscriber, tile);\n\n    this.tiles[stream.id] = tile;\n    this.subscribers.push(subscriber);\n\n    this.onChange(this.counts());\n  }\n\n  // Pulse the initials badge while its broadcaster speaks -- on an audio-only tile this is the only\n  // sign the stream is alive. audioLevelUpdated fires ~60x/s, so the moving average + hangover keep\n  // DOM writes down to actual speaking-state transitions.\n  attachSpeakingIndicator(subscriber, tile) {\n    let movingAvg = 0;\n    let speaking = false;\n    let quietSince = null;\n    const handler = (event) => {\n      movingAvg = 0.7 * movingAvg + 0.3 * event.audioLevel;\n      const level = Math.log(movingAvg) / Math.LN10 / 1.5 + 1;\n      if (level > 0.5) {\n        quietSince = null;\n        if (!speaking) {\n          speaking = true;\n          tile.classList.add('broadcast-tile--speaking');\n        }\n      } else if (speaking) {\n        if (quietSince === null) {\n          quietSince = Date.now();\n        } else if (Date.now() - quietSince > 500) {\n          speaking = false;\n          quietSince = null;\n          tile.classList.remove('broadcast-tile--speaking');\n        }\n      }\n    };\n    subscriber.on('audioLevelUpdated', handler);\n    subscriber.__speakingHandler = handler;\n  }\n\n  detachSpeakingIndicator(subscriber) {\n    if (subscriber && subscriber.__speakingHandler) {\n      subscriber.off('audioLevelUpdated', subscriber.__speakingHandler);\n      delete subscriber.__speakingHandler;\n    }\n  }\n\n  unsubscribe(streamId) {\n    this.subscribers = this.subscribers.filter((sub) => {\n      if (sub.stream && sub.stream.id === streamId) {\n        this.detachSpeakingIndicator(sub);\n        return false;\n      }\n      return true;\n    });\n\n    const tile = this.tiles[streamId];\n    if (tile) {\n      tile.remove();\n      delete this.tiles[streamId];\n    }\n\n    this.onChange(this.counts());\n  }\n\n  // Audio-bearing streams can come from several broadcasters at once; mute/unmute act on all of them.\n  audioSubscribers() {\n    return (this.subscribers || []).filter((sub) => sub.stream && sub.stream.hasAudio);\n  }\n\n  setAudioEnabled(enabled) {\n    this.audioSubscribers().forEach((sub) => sub.subscribeToAudio(enabled));\n  }\n\n  mute() {\n    this.setAudioEnabled(false);\n  }\n\n  unmute() {\n    this.setAudioEnabled(true);\n  }\n\n  // Detach from the session's stream events and clear our mounts. Does NOT disconnect the session --\n  // the host owns the connection lifecycle.\n  teardown() {\n    if (this.session) {\n      this.session.off('streamCreated', this.boundStreamCreated);\n      this.session.off('streamDestroyed', this.boundStreamDestroyed);\n      this.session.off('streamPropertyChanged', this.boundStreamPropertyChanged);\n    }\n    this.subscribers.forEach((sub) => this.detachSpeakingIndicator(sub));\n    this.subscribers = [];\n    this.tiles = {};\n    if (this.mounts.cameras) this.mounts.cameras.innerHTML = '';\n    if (this.mounts.screen) this.mounts.screen.innerHTML = '';\n  }\n\n  handleCallback(error) {\n    if (error) {\n      console.error('Error in subscribe callback:', error);\n    }\n  }\n}\n", "// Background blur for a publisher's camera, applied through the Vonage media processor \u2014 the same\n// applyVideoFilter path the 1:1 video chat uses. Collected here so the filter shape, the remembered\n// preference, and the browser-support gate have exactly one definition.\n//\n// Support is narrow (Chromium family, Firefox, and only very recent Safari), so callers must treat\n// blur as something that may not be available: supported() decides whether the control is offered at\n// all, and apply()/clear() resolve to whether the camera actually ended up blurred, so the UI can\n// reflect reality instead of the request.\n\nconst PREFERENCE_KEY = 'preferredBackgroundBlur'\n\n// 'low' and 'high' are the only strengths the SDK accepts; 'high' matches the 1:1 chat.\nconst FILTER = { type: 'backgroundBlur', blurStrength: 'high' }\n\nexport function supported() {\n  return typeof OT !== 'undefined' &&\n    typeof OT.hasMediaProcessorSupport === 'function' &&\n    OT.hasMediaProcessorSupport('video')\n}\n\n// Blur is remembered per browser, alongside the preferred camera/mic keys, so a broadcaster who\n// always blurs goes live blurred without touching the control.\nexport function preferred() {\n  return supported() && localStorage.getItem(PREFERENCE_KEY) === 'true'\n}\n\nexport function rememberPreference(enabled) {\n  localStorage.setItem(PREFERENCE_KEY, enabled ? 'true' : 'false')\n}\n\n// Options fragment for OT.initPublisher. Blurring from the moment the publisher is created is what\n// keeps unblurred frames from reaching the audience during the first seconds of a broadcast.\nexport function publisherOptions() {\n  return preferred() ? { videoFilter: { ...FILTER } } : {}\n}\n\n// apply/clear both resolve to whether the camera is blurred afterwards. A filter can be refused\n// (unsupported browser, non-camera source, no camera at all) and a running filter can fail to stop,\n// so neither result is assumed from the request.\nexport async function apply(publisher) {\n  if (!publisher || !supported()) return false\n\n  try {\n    await publisher.applyVideoFilter({ ...FILTER })\n    return true\n  } catch (error) {\n    console.warn('Background blur could not be applied:', error)\n    return false\n  }\n}\n\nexport async function clear(publisher) {\n  if (!publisher) return false\n\n  try {\n    await publisher.clearVideoFilter()\n    return false\n  } catch (error) {\n    console.warn('Background blur could not be cleared:', error)\n    return true\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport { PeerMediaPresenter } from \"../broadcast/peer_media_presenter\"\nimport * as backgroundBlur from \"../broadcast/background_blur\"\n\nexport default class extends Controller {\n  static targets = [\n    'publisher', \n    'audioPublisher', \n    'screenPublisher',\n    'notBroadcastingStatus', \n    'broadcastingStatus', \n    'startPublishing', \n    'stopPublishing',\n    'audioDeviceSelector', \n    'videoDeviceSelector',\n    'broadcastType',\n    'audioControls',\n    'muteButton',   \n    'unmuteButton',  \n    'videoControls',\n    'turnOffVideoButton',\n    'turnOnVideoButton',\n    'blurPreference',\n    'blurToggle',\n    'blurControls',\n    'blurBackgroundButton',\n    'unblurBackgroundButton',\n    'videoContainer',\n    'deviceSelectors',\n    'togglePreviewButton',\n    'hideBroadcastIcon',\n    'showBroadcastIcon',\n    'fullscreenButton',\n    'exitFullscreenButton',\n    'cameraRow',\n    'screenStage',\n    'peerScreenContainer',\n    'peerCameraContainer',\n    'livePill',\n    'liveTimer'\n  ];\n  \n  static values = { \n    apiKey: String, \n    sessionId: String,\n    token: String,\n    distributionUrl: String,\n    endUrl: String,\n    receiveUrl: String,\n    statusUrl: String,\n    broadcastType: { type: String, default: 'screen' },\n    broadcasterName: { type: String, default: 'Broadcaster' },\n    previewVisible: { type: Boolean, default: true },\n    broadcastingSince: { type: Number, default: 0 }\n  }\n  \n  // Define broadcast state enum\n  static STATES = {\n    IDLE: 'idle',\n    CONNECTING: 'connecting',\n    INITIALIZING: 'initializing',\n    PUBLISHING: 'publishing',\n    ACTIVE: 'active',\n    STOPPING: 'stopping',\n    ERROR: 'error'\n  }\n  \n  // Define max retry attempts\n  static MAX_STATUS_RETRIES = 10;\n\n  connect() {\n    this.subscribers = [];\n    this.state = this.constructor.STATES.IDLE;\n    this.statusRetryCount = 0;\n    this.isFullscreen = false;\n\n    // Co-broadcaster presenter: subscribes to the OTHER live broadcasters in this room. Their tiles\n    // flow into the shared camera row / screen stage; peer audio always plays regardless of visibility.\n    this.peerPresenter = null;\n\n    // Initialize session with connection events suppressed\n    const props = { connectionEventsSuppressed: true };\n    this.session = OT.initSession(this.apiKeyValue, this.sessionIdValue, props);\n    \n    // Initialize publisher references to null\n    this.publishers = {\n      audio: null,\n      video: null, \n      screen: null\n    };\n    \n    // Load available devices\n    this.loadAudioDevices();\n    this.loadVideoDevices();\n\n    // Background blur: remembered per browser, so a broadcaster who always blurs goes live blurred.\n    this.setupBackgroundBlur();\n\n    // Update UI based on broadcast type\n    this.updateBroadcastTypeUI();\n    \n    // Set up session listeners\n    this.setupSessionListeners();\n\n    // Tell the chat that this rep now has the broadcast studio open, so it can disable the join-\n    // broadcast buttons (you can't start a second broadcast while you're already in one). Dispatched\n    // from the moment the studio opens \u2014 i.e. before Start \u2014 not only once live.\n    this.notifyStudio('broadcast:studioOpened');\n  }\n\n  // If the element is torn down without an explicit Stop (e.g. Turbo navigation, or the chat panel\n  // being replaced by a Turbo Stream), make sure timers, peer subscriptions, and \u2014 critically \u2014 live\n  // publishers don't leak. stop() takes the state to STOPPING/IDLE before its innerHTML clear triggers\n  // this, so tearing the session down only while still in a live state can't double-disconnect a\n  // session stop() already dropped.\n  disconnect() {\n    if (this.qualityCheckInterval) clearInterval(this.qualityCheckInterval);\n    this.stopLiveTimer();\n    this.teardownPeerPresenter();\n    this.teardownSessionListeners();\n\n    const { IDLE, STOPPING } = this.constructor.STATES;\n    if (this.state !== IDLE && this.state !== STOPPING) {\n      // Otherwise the OT publishers keep capturing camera/mic/screen with no UI left to stop them.\n      this.cleanupPublishers();\n      // Mark STOPPING (directly, not via setState) so the async sessionDisconnected handler doesn't\n      // try to setState against our now-detached targets as the session tears down.\n      this.state = STOPPING;\n      if (this.session && this.session.connection) this.session.disconnect();\n    }\n\n    // Studio gone -> re-enable the join-broadcast buttons.\n    this.notifyStudio('broadcast:studioClosed');\n  }\n\n  // Broadcast a studio open/close signal on document (not via the bubbling element event) so it still\n  // reaches the chat even when our element has already been detached during teardown.\n  notifyStudio(name) {\n    document.dispatchEvent(new CustomEvent(name, {\n      detail: { meetingId: this.element.dataset.meetingId }\n    }));\n  }\n  \n  // Set state with logging\n  setState(newState) {\n    const oldState = this.state;\n    this.state = newState;\n    this.dispatchEvent('broadcast:stateChanged', { oldState, newState });\n    this.updateBroadcastButton();\n    console.log(`Broadcast state changed: ${oldState} -> ${this.state}`);\n  }\n  \n  // Set up session event listeners. OT.initSession returns the SAME shared Session per sessionId per\n  // tab, so these handlers must be removed on teardown (teardownSessionListeners) \u2014 otherwise each\n  // open/close of the studio stacks another set closed over a dead controller, and one blip then fires\n  // N \"Reconnecting\" notifications and calls setState against detached targets.\n  setupSessionListeners() {\n    this.onSessionConnected = () => {\n      console.log(\"Session connected\");\n    };\n\n    this.onSessionDisconnected = event => {\n      console.log(\"Session disconnected\", event.reason);\n      // Ignore the disconnect we trigger ourselves to swap a subscriber token for our publisher token.\n      if (this._intentionalReconnect) return;\n      if (this.state !== this.constructor.STATES.STOPPING) {\n        this.setState(this.constructor.STATES.IDLE);\n      }\n    };\n\n    this.onSessionReconnecting = () => {\n      console.log(\"Session reconnecting...\");\n      this.showNotification(\"Reconnecting to broadcast\", \"warning\");\n    };\n\n    this.onSessionReconnected = () => {\n      console.log(\"Session reconnected\");\n      this.showNotification(\"Broadcast connection restored\", \"success\");\n    };\n\n    this.session.on(\"sessionConnected\", this.onSessionConnected);\n    this.session.on(\"sessionDisconnected\", this.onSessionDisconnected);\n    this.session.on(\"sessionReconnecting\", this.onSessionReconnecting);\n    this.session.on(\"sessionReconnected\", this.onSessionReconnected);\n  }\n\n  teardownSessionListeners() {\n    if (!this.session) return;\n    this.session.off(\"sessionConnected\", this.onSessionConnected);\n    this.session.off(\"sessionDisconnected\", this.onSessionDisconnected);\n    this.session.off(\"sessionReconnecting\", this.onSessionReconnecting);\n    this.session.off(\"sessionReconnected\", this.onSessionReconnected);\n  }\n  \n  loadAudioDevices() {\n    this.audioDeviceSelectorTarget.innerHTML = '<option value=\"\">Loading devices...</option>';\n    \n    OT.getDevices((err, devices) => {\n      if (err) {\n        this.showError(\"Error getting audio devices\", err);\n        return;\n      }\n      \n      const preferredAudioDevice = localStorage.getItem('preferredAudioDevice');\n      this.audioDeviceSelectorTarget.innerHTML = '';\n      \n      const noneOption = document.createElement('option');\n      noneOption.value = \"none\";\n      noneOption.text = \"Do not broadcast audio\";\n      this.audioDeviceSelectorTarget.add(noneOption);\n      \n      const audioDevices = devices.filter(device => \n        device.kind === 'audioInput' || device.kind === 'audioinput'\n      );\n      \n      if (audioDevices.length === 0) {\n        const option = document.createElement('option');\n        option.value = \"\";\n        option.text = \"No microphones found\";\n        this.audioDeviceSelectorTarget.add(option);\n      } else {\n        let matchedPreferred = false;\n        audioDevices.forEach(device => {\n          const option = document.createElement('option');\n          option.value = device.deviceId;\n\n          let deviceLabel = device.label || `Microphone ${audioDevices.indexOf(device) + 1}`;\n          const parenIndex = deviceLabel.indexOf('(');\n          if (parenIndex > 0) {\n            deviceLabel = deviceLabel.substring(0, parenIndex).trim();\n          }\n          option.text = deviceLabel;\n\n          this.audioDeviceSelectorTarget.add(option);\n\n          if (preferredAudioDevice && device.deviceId === preferredAudioDevice) {\n            option.selected = true;\n            matchedPreferred = true;\n          }\n        });\n\n        // Default to the first real microphone (index 1, after the \"none\" option) unless the stored\n        // preference matched an available device. Never default to \"Do not broadcast audio\" \u2014 a stale\n        // or missing preference must not leave the broadcaster silent by default.\n        if (!matchedPreferred) {\n          this.audioDeviceSelectorTarget.selectedIndex = 1;\n        }\n      }\n    });\n  }\n  \n  loadVideoDevices() {\n    if (!this.hasVideoDeviceSelectorTarget) return;\n    \n    this.videoDeviceSelectorTarget.innerHTML = '<option value=\"\">Loading cameras...</option>';\n    \n    OT.getDevices((err, devices) => {\n      if (err) {\n        this.showError(\"Error getting video devices\", err);\n        return;\n      }\n      \n      const preferredVideoDevice = localStorage.getItem('preferredVideoDevice');\n      this.videoDeviceSelectorTarget.innerHTML = '';\n      \n      const noneOption = document.createElement('option');\n      noneOption.value = \"none\";\n      noneOption.text = \"Do not use camera\";\n      this.videoDeviceSelectorTarget.add(noneOption);\n      \n      const videoDevices = devices.filter(device => \n        device.kind === 'videoInput' || device.kind === 'videoinput'\n      );\n      \n      if (videoDevices.length === 0) {\n        const option = document.createElement('option');\n        option.value = \"\";\n        option.text = \"No cameras found\";\n        this.videoDeviceSelectorTarget.add(option);\n      } else {\n        let matchedPreferred = false;\n        videoDevices.forEach(device => {\n          const option = document.createElement('option');\n          option.value = device.deviceId;\n\n          let deviceLabel = device.label || `Camera ${videoDevices.indexOf(device) + 1}`;\n          const parenIndex = deviceLabel.indexOf('(');\n          if (parenIndex > 0) {\n            deviceLabel = deviceLabel.substring(0, parenIndex).trim();\n          }\n          option.text = deviceLabel;\n\n          this.videoDeviceSelectorTarget.add(option);\n\n          if (preferredVideoDevice && device.deviceId === preferredVideoDevice) {\n            option.selected = true;\n            matchedPreferred = true;\n          }\n        });\n\n        // Default to the first real camera (index 1, after the \"none\" option) unless the stored\n        // preference matched an available device. Never default to \"Do not use camera\" \u2014 a stale or\n        // missing preference must not leave the broadcaster camera-less by default.\n        if (!matchedPreferred) {\n          this.videoDeviceSelectorTarget.selectedIndex = 1;\n        }\n      }\n    });\n  }\n  \n  onAudioDeviceChange() {\n    if (this.publishers.audio) {\n      this.session.unpublish(this.publishers.audio);\n      this.publishers.audio.destroy();\n      this.publishers.audio = null;\n      \n      if (this.audioDeviceSelectorTarget.value !== \"none\") {\n        this.publishAudioOnly();\n      }\n    }\n  }\n  \n  onVideoDeviceChange() {\n    if (this.publishers.video) {\n      this.session.unpublish(this.publishers.video);\n      this.publishers.video.destroy();\n      this.publishers.video = null;\n      \n      if (this.videoDeviceSelectorTarget.value !== \"none\" && \n          this.broadcastTypeValue === 'video') {\n        this.publishVideoAndAudio();\n      }\n    }\n  }\n  \n  async publish(event) {\n    try {\n      // Set broadcast type if specified\n      if (event?.params?.type) {\n        this.broadcastTypeValue = event.params.type;\n      }\n\n      // A camera/mic broadcast needs at least one source. If both are set to \"Do not\u2026\" there's nothing\n      // to send, so stop here (before hiding receivers or opening a session) and let them pick a device.\n      // Screen shares carry their own video, so they're exempt.\n      const noCamera = !this.hasVideoDeviceSelectorTarget || this.videoDeviceSelectorTarget.value === 'none';\n      const noMic = this.audioDeviceSelectorTarget.value === 'none';\n      if (this.broadcastTypeValue !== 'screen' && noCamera && noMic) {\n        this.showNotification(\"Select a camera or microphone before broadcasting.\", \"warning\");\n        return;\n      }\n\n      // Hide receivers\n      this.hideReceivers();\n      \n      // Update UI and state\n      this.updateBroadcastTypeUI();\n      this.setState(this.constructor.STATES.CONNECTING);\n      \n      // Attach the co-broadcaster stream handlers BEFORE connecting: the (re)connect is what delivers\n      // the streams of broadcasters who were already live, so attaching afterward makes a late joiner\n      // miss everyone who was already broadcasting.\n      this.preparePeerPresenter();\n\n      // Connect to session\n      await this.connectToSession();\n\n      // Belt-and-suspenders: also scan for anyone already streaming at connect time. Done before we\n      // publish our own streams, so the scan can't pick up our own (subscribe is idempotent regardless).\n      this.subscribeExistingPeers();\n\n      // Start publishing based on type\n      this.setState(this.constructor.STATES.INITIALIZING);\n      \n      if (this.broadcastTypeValue === 'video') {\n        await this.publishVideoAndAudio();\n      } else if (this.broadcastTypeValue === 'audio') {\n        await this.publishAudioOnly();\n      } else {\n        await this.publishScreenShare();\n        if (this.videoDeviceSelectorTarget.value !== \"none\") {\n          await this.publishVideoAndAudio();\n        } else if (this.audioDeviceSelectorTarget.value !== \"none\") {\n          await this.publishAudioOnly();\n        }\n      }\n      \n      // Update state to publishing\n      this.setState(this.constructor.STATES.PUBLISHING);\n      \n      // Activate broadcast with server\n      await this.activateBroadcast();\n      \n    } catch (error) {\n      // If we were stopped or torn down mid-start (e.g. the status poll bailed after stop()), the\n      // teardown already ran \u2014 don't show a spurious error or fight it with a second recovery.\n      const { STOPPING, IDLE } = this.constructor.STATES;\n      if (this.state === STOPPING || this.state === IDLE) return;\n\n      this.showError(\"Failed to start broadcast\", error);\n\n      // Roll back the aborted attempt so the rep can retry. No server-side broadcast was started in any\n      // of the failure modes that land here \u2014 cancelling the browser screen-share picker or denying\n      // camera/mic happen before activateBroadcast, and a rejected distribute is precisely the case where\n      // the registration did not take \u2014 so there is nothing to end. Tear down any half-created\n      // publishers and the peer strip, drop the publisher-token session we may have connected, restore\n      // the audience view hideReceivers() hid, and return to IDLE so the Start button re-enables (it is\n      // disabled for every non-IDLE state).\n      this.cleanupPublishers();\n      this.teardownPeerPresenter();\n      if (this.session && this.session.connection) {\n        this.session.disconnect();\n      }\n      this.setState(this.constructor.STATES.IDLE);\n      this.showReceivers();\n    }\n  }\n\n  // Create the co-broadcaster presenter and attach its stream handlers. Called BEFORE connecting (the\n  // publisher token already permits subscribing) so the (re)connect delivers the streams of any\n  // broadcasters already live to our handler \u2014 the reason a late joiner now sees who was already up.\n  preparePeerPresenter() {\n    if (!this.hasPeerCameraContainerTarget) return;\n    if (this.peerPresenter) this.peerPresenter.teardown();\n\n    this.peerPresenter = new PeerMediaPresenter(this.session, {\n      cameras: this.hasPeerCameraContainerTarget ? this.peerCameraContainerTarget : null,\n      screen: this.hasPeerScreenContainerTarget ? this.peerScreenContainerTarget : null\n    }, {\n      onChange: this.onPeersChanged.bind(this)\n    });\n\n    this.peerPresenter.attach();\n  }\n\n  // After connecting, scan for broadcasters already streaming (idempotent with the attached handler).\n  // Set excludeConnectionId now that our publisher connection exists, so the scan skips our own streams.\n  subscribeExistingPeers() {\n    if (!this.peerPresenter) return;\n    this.peerPresenter.excludeConnectionId = this.session.connection ? this.session.connection.connectionId : null;\n    this.peerPresenter.subscribeExisting();\n  }\n\n  // Presenter callback (peer subscribe/unsubscribe). Peer tiles flow straight into the shared camera\n  // row / screen stage (their containers are display:contents), so we only re-evaluate which regions\n  // have content and the master toggle. Peer audio always plays, independent of any of this.\n  onPeersChanged() {\n    this.refreshMonitor();\n  }\n\n  // Peer counts, safe to call when no presenter is attached (e.g. after teardown).\n  peerCounts() {\n    return this.peerPresenter\n      ? this.peerPresenter.counts()\n      : { cameras: 0, screen: 0, total: 0 };\n  }\n\n  teardownPeerPresenter() {\n    if (this.peerPresenter) {\n      this.peerPresenter.teardown();\n      this.peerPresenter = null;\n    }\n    this.refreshMonitor();\n  }\n\n  // Recompute the whole broadcast monitor from current publishers + peers: which tiles/regions show,\n  // and the master Hide/Show Broadcast button. Idempotent; call after any publish or peer change.\n  refreshMonitor() {\n    // Your own tile shows whenever you publish anything camera-shaped: video, or audio-only (then in\n    // initials mode via --novideo, mirroring what the audience sees for you).\n    if (this.hasPublisherTarget) {\n      const selfVisible = !!(this.publishers && (this.publishers.video || this.publishers.audio));\n      this.publisherTarget.classList.toggle('hidden', !selfVisible);\n      this.publisherTarget.classList.toggle('broadcast-tile--novideo', !(this.publishers && this.publishers.video));\n    }\n    this.updateScreenStageVisibility();\n    this.updateCameraRowDensity();\n    this.updateMonitorVisibility();\n  }\n\n  // The screen stage is only relevant when a screen is actually being shared \u2014 yours or a co-host's.\n  // The camera row mirrors the state as --with-screen so fullscreen can enlarge the cameras only when\n  // there is no screen to give the stage to (see .cobroadcast-cameras in application.tailwind.css).\n  updateScreenStageVisibility() {\n    if (!this.hasScreenStageTarget) return;\n    const hasSelfScreen = !!(this.publishers && this.publishers.screen);\n    const hasPeerScreen = this.peerCounts().screen > 0;\n    const hasScreen = hasSelfScreen || hasPeerScreen;\n    this.screenStageTarget.classList.toggle('hidden', !hasScreen);\n    if (this.hasCameraRowTarget) this.cameraRowTarget.classList.toggle('cobroadcast-cameras--with-screen', hasScreen);\n  }\n\n  // Hide the camera row entirely when it holds no tiles at all (peer cameras now include audio-only\n  // co-hosts' initials tiles). --dense tightens the strip once it holds enough to need it, and\n  // --cam-rows / --cam-cols give the fullscreen layout the grid to share the stage across.\n  updateCameraRowDensity() {\n    if (!this.hasCameraRowTarget) return;\n    const selfCam = this.hasPublisherTarget && !this.publisherTarget.classList.contains('hidden') ? 1 : 0;\n    const total = selfCam + this.peerCounts().cameras;\n    const dense = total > 3;\n    this.cameraRowTarget.classList.toggle('hidden', total === 0);\n    this.cameraRowTarget.classList.toggle('cobroadcast-cameras--dense', dense);\n    const cols = dense ? 2 : 1;\n    this.cameraRowTarget.style.setProperty('--cam-cols', cols);\n    this.cameraRowTarget.style.setProperty('--cam-rows', Math.max(Math.ceil(total / cols), 1));\n  }\n\n  // Show the monitor only when it has something to show AND the broadcaster hasn't collapsed it. The\n  // master Hide/Show button and the Fullscreen button track that same has-content / visible state.\n  updateMonitorVisibility() {\n    if (!this.hasVideoContainerTarget) return;\n\n    const selfCam = this.hasPublisherTarget && !this.publisherTarget.classList.contains('hidden');\n    const selfScreen = !!(this.publishers && this.publishers.screen);\n    const peers = this.peerCounts();\n    const hasContent = selfCam || selfScreen || peers.cameras > 0 || peers.screen > 0;\n    const visible = hasContent && this.previewVisibleValue;\n\n    this.videoContainerTarget.classList.toggle('hidden', !visible);\n\n    if (this.hasTogglePreviewButtonTarget) {\n      this.togglePreviewButtonTarget.classList.toggle('hidden', !hasContent);\n      this.togglePreviewButtonTarget.title = this.previewVisibleValue ? 'Hide broadcast' : 'Show broadcast';\n      // Eye-off = \"currently shown, click to hide\"; eye = \"currently hidden, click to show\".\n      if (this.hasHideBroadcastIconTarget) this.hideBroadcastIconTarget.classList.toggle('hidden', !this.previewVisibleValue);\n      if (this.hasShowBroadcastIconTarget) this.showBroadcastIconTarget.classList.toggle('hidden', this.previewVisibleValue);\n    }\n    this.updateFullscreenButtons();\n  }\n\n  // Fullscreen is offered only when the monitor is actually on screen; the enter/exit icons are\n  // mutually exclusive and follow this.isFullscreen.\n  updateFullscreenButtons() {\n    const monitorVisible = this.hasVideoContainerTarget && !this.videoContainerTarget.classList.contains('hidden');\n    if (this.hasFullscreenButtonTarget) {\n      this.fullscreenButtonTarget.classList.toggle('hidden', !monitorVisible || this.isFullscreen);\n    }\n    if (this.hasExitFullscreenButtonTarget) {\n      this.exitFullscreenButtonTarget.classList.toggle('hidden', !this.isFullscreen);\n    }\n  }\n  \n  // Improved method to activate broadcast with the server with timeout\n  async activateBroadcast() {\n    // Reset retry count\n    this.statusRetryCount = 0;\n    \n    // Build URLs with broadcast type\n    let distributionUrl = this.distributionUrlValue;\n    let statusUrl = this.statusUrlValue;\n    const separator = distributionUrl.includes('?') ? '&' : '?';\n    distributionUrl = `${distributionUrl}${separator}type=${this.broadcastTypeValue}`;\n    statusUrl = `${statusUrl}${separator}type=${this.broadcastTypeValue}`;\n    \n    // Registering with the server IS the broadcast as far as the app is concerned: it puts this rep into\n    // the room's broadcaster list, which drives the audience's receive pane, the live icon and \u2014 the\n    // reason this can't be best-effort \u2014 the decision about who the last broadcaster is. Publishing\n    // without it leaves this rep on air but unregistered, so when a co-broadcaster stops, the server sees\n    // an empty list, calls itself the end of the broadcast and tears the room down with someone still\n    // publishing. A failure here therefore fails the whole start; publish() rolls the attempt back.\n    //\n    // Note the status poll below cannot substitute for this: it only asks whether ANY stream of this kind\n    // is live in the room, so a co-broadcaster's stream satisfies it and an unregistered rep still looks\n    // successfully live to themselves.\n    const distribution = await new FetchRequest('GET', distributionUrl).perform();\n    if (!distribution.ok) {\n      throw new Error(`The server did not register this broadcast (${distribution.statusCode})`);\n    }\n\n    await this.checkBroadcastStatus(statusUrl);\n    this.updateUIForActiveBroadcast();\n    this.setState(this.constructor.STATES.ACTIVE);\n  }\n  \n  // Non-recursive status check with timeout\n  checkBroadcastStatus(statusUrl) {\n    return new Promise((resolve, reject) => {\n      const checkStatus = async () => {\n        try {\n          // Bail if the studio was stopped or torn down while polling \u2014 otherwise this keeps retrying on\n          // a dead controller, then either resumes the broadcast (setState ACTIVE, fresh intervals) or\n          // alerts \"Failed to start\" ~30s after the user already left.\n          const { STOPPING, IDLE } = this.constructor.STATES;\n          if (this.state === STOPPING || this.state === IDLE) {\n            reject(new Error(\"Broadcast cancelled\"));\n            return;\n          }\n\n          // Check if we've exceeded retry count\n          if (this.statusRetryCount >= this.constructor.MAX_STATUS_RETRIES) {\n            reject(new Error(\"Broadcast status check timed out\"));\n            return;\n          }\n          \n          this.statusRetryCount++;\n          console.log(`Checking broadcast status (attempt ${this.statusRetryCount}/${this.constructor.MAX_STATUS_RETRIES})...`);\n          \n          const response = await new FetchRequest('GET', statusUrl).perform();\n          if (response.ok) {\n            resolve();\n          } else {\n            // Schedule next check with slight backoff\n            setTimeout(checkStatus, 1000 + (this.statusRetryCount * 500));\n          }\n        } catch (error) {\n          console.error(\"Error checking broadcast status\", error);\n          // Schedule next check with backoff\n          setTimeout(checkStatus, 1000 + (this.statusRetryCount * 500));\n        }\n      };\n      \n      // Start checking\n      checkStatus();\n    });\n  }\n  \n  // Update UI for active broadcast\n  updateUIForActiveBroadcast() {\n    this.notBroadcastingStatusTarget.classList.add('hidden');\n    this.broadcastingStatusTarget.classList.remove('hidden');\n    this.startPublishingTarget.classList.add('hidden');\n    this.stopPublishingTarget.classList.remove('hidden');\n    this.deviceSelectorsTarget.classList.add('hidden');\n\n    // The monitor is now a compact filmstrip, so leave it visible once live; the control-bar\n    // Hide/Show Broadcast button lets the broadcaster collapse it to reclaim space for chat.\n    this.previewVisibleValue = true;\n    this.refreshMonitor();\n\n    // Reveal the LIVE pill and start the count-up timer.\n    if (this.hasLivePillTarget) {\n      this.livePillTarget.classList.remove('hidden');\n      this.livePillTarget.classList.add('flex');\n    }\n    this.startLiveTimer();\n\n    // Start monitoring quality of publishers\n    this.startQualityMonitoring();\n  }\n\n  // Count up from the room's broadcast start if known (so a late joiner sees the elapsed time), else\n  // from the moment this broadcaster went live.\n  startLiveTimer() {\n    this._liveStartMs = this.broadcastingSinceValue ? this.broadcastingSinceValue * 1000 : Date.now();\n    this.renderLiveTimer();\n    if (this.liveTimerInterval) clearInterval(this.liveTimerInterval);\n    this.liveTimerInterval = setInterval(() => this.renderLiveTimer(), 1000);\n  }\n\n  renderLiveTimer() {\n    if (!this.hasLiveTimerTarget) return;\n    const elapsed = Math.max(0, Math.floor((Date.now() - this._liveStartMs) / 1000));\n    const m = Math.floor(elapsed / 60);\n    const s = elapsed % 60;\n    this.liveTimerTarget.textContent = `${m < 10 ? '0' : ''}${m}:${s < 10 ? '0' : ''}${s}`;\n  }\n\n  stopLiveTimer() {\n    if (this.liveTimerInterval) {\n      clearInterval(this.liveTimerInterval);\n      this.liveTimerInterval = null;\n    }\n    if (this.hasLivePillTarget) {\n      this.livePillTarget.classList.add('hidden');\n      this.livePillTarget.classList.remove('flex');\n    }\n  }\n  \n  // Monitor stream quality\n  startQualityMonitoring() {\n    this.qualityCheckInterval = setInterval(() => {\n      // Check video or screen publisher quality\n      const publisher = this.publishers.video || this.publishers.screen;\n      if (publisher) {\n        const stats = publisher.getStats();\n        if (stats && stats.video && stats.video.packetsLost > 50) {\n          console.warn(\"Poor connection quality detected\");\n          this.showNotification(\"Poor connection quality detected\", \"warning\");\n        }\n      }\n    }, 5000);\n  }\n  \n  // Centralized error handling with notification system\n  showError(message, error) {\n    const errorDetail = error?.message || error?.name || \"Unknown error\";\n    console.error(`${message}: ${errorDetail}`, error);\n    \n    this.showNotification(`${message}: ${errorDetail}`, \"error\");\n  }\n  \n  // Display notifications (can be extended to use a UI notification system)\n  showNotification(message, type = \"info\") {\n    // Check if a notification library is available\n    if (window.createNotification) {\n      window.createNotification({\n        closeOnClick: true,\n        displayCloseButton: true,\n        positionClass: 'nfc-top-right',\n        showDuration: 5000,\n        theme: type\n      })({\n        title: type === \"error\" ? \"Broadcast Error\" : \n               type === \"warning\" ? \"Broadcast Warning\" : \"Broadcast Info\",\n        message: message\n      });\n    } else {\n      // Fallback to console or less intrusive alerts\n      if (type === \"error\") {\n        // Only show alerts for errors, not warnings\n        alert(message);\n      }\n      \n      console.log(`[${type}] ${message}`);\n    }\n  }\n  \n  connectToSession() {\n    return new Promise((resolve, reject) => {\n      const connectWithPublisherToken = () => {\n        this.session.connect(this.tokenValue, (error) => {\n          if (error) {\n            reject(error);\n          } else {\n            resolve();\n          }\n        });\n      };\n\n      // OT.initSession returns one shared Session per sessionId per tab. If we were receiving this\n      // broadcast, that shared session is already connected with a subscriber-role token, which cannot\n      // publish. Drop it and reconnect with our publisher token before publishing.\n      if (this.session.connection) {\n        this._intentionalReconnect = true;\n        const onDisconnected = () => {\n          this.session.off(\"sessionDisconnected\", onDisconnected);\n          this._intentionalReconnect = false;\n          connectWithPublisherToken();\n        };\n        this.session.on(\"sessionDisconnected\", onDisconnected);\n        this.session.disconnect();\n      } else {\n        connectWithPublisherToken();\n      }\n    });\n  }\n  \n  hideReceivers() {\n    // Tell this meeting's receive controller to release the shared OT session (detach its handlers and\n    // drop its reference) so we can reconnect it with our publisher token without it re-subscribing.\n    this.dispatchEvent('broadcast:publishing');\n    const receiveContainer = document.querySelector('[data-tag=\"receive_broadcast\"]');\n    if (receiveContainer) {\n      receiveContainer.classList.add('hidden');\n    }\n  }\n  \n  updateBroadcastTypeUI() {\n    if (this.hasBroadcastTypeTarget) {\n      this.broadcastTypeTarget.textContent = \n        this.broadcastTypeValue === 'video' ? 'Video & Audio Broadcast' :\n        this.broadcastTypeValue === 'audio' ? 'Audio Only Broadcast' : \n        'Screen Sharing Broadcast';\n    }\n    \n    const videoControls = document.querySelectorAll('[data-broadcast-type=\"video\"]');\n    videoControls.forEach(control => {\n      control.classList.toggle('hidden', this.broadcastTypeValue == 'audio');\n    });\n  }\n  \n  // Generic method to create publisher\n  createPublisher(type, container, options) {\n    return new Promise((resolve, reject) => {\n      this.publishers[type] = OT.initPublisher(container, options, (error) => {\n        if (error) {\n          if (error.name === \"OverconstrainedError\") {\n            // Try with default device\n            options = { ...options };\n            \n            if (type === 'audio') {\n              options.audioSource = true;\n              options.videoSource = false;\n            } else if (type === 'video') {\n              options.videoSource = true;\n              // Keep audio settings\n              options.audioSource = options.publishAudio ? true : false;\n            }\n            \n            // Log fallback attempt\n            console.warn(`Falling back to default ${type} device due to constraint error`);\n            \n            this.publishers[type] = OT.initPublisher(container, options, (fallbackError) => {\n              if (fallbackError) {\n                reject(fallbackError);\n              } else {\n                resolve(this.publishers[type]);\n              }\n            });\n          } else {\n            reject(error);\n          }\n        } else {\n          resolve(this.publishers[type]);\n        }\n      });\n    });\n  }\n  \n  // Publish to session\n  publishToSession(publisher, type) {\n    return new Promise((resolve, reject) => {\n      this.session.publish(publisher, (error) => {\n        if (error) {\n          reject(error);\n        } else {\n          // If it's screen sharing, add listener for when user stops sharing\n          if (type === 'screen') {\n            publisher.on('mediaStopped', this.stop.bind(this));\n          }\n          \n          resolve();\n        }\n      });\n    });\n  }\n  \n  publishAudioOnly() {\n    return new Promise(async (resolve, reject) => {\n      // Don't publish if \"none\" is selected\n      if (this.audioDeviceSelectorTarget.value === \"none\") {\n        resolve();\n        return;\n      }\n      \n      // Publisher options\n      const options = {\n        insertMode: \"append\",\n        width: \"0px\", \n        height: \"0px\", \n        videoSource: false,\n        publishAudio: true,\n        showControls: false,\n        name: this.broadcasterNameValue\n      };\n      \n      // Set audio source if specified\n      if (this.audioDeviceSelectorTarget.value && this.audioDeviceSelectorTarget.value !== \"\") {\n        options.audioSource = this.audioDeviceSelectorTarget.value;\n      }\n      \n      try {\n        // Create publisher\n        const publisher = await this.createPublisher('audio', this.audioPublisherTarget, options);\n        \n        // Publish to session\n        await this.publishToSession(publisher, 'audio');\n        \n        // Update UI\n        if (this.hasAudioControlsTarget) {\n          this.audioControlsTarget.classList.remove('hidden');\n        }\n\n        // Audio-only adds no tile of your own; the monitor still appears if co-broadcasters are live.\n        this.refreshMonitor();\n\n        resolve();\n      } catch (error) {\n        reject(error);\n      }\n    });\n  }\n  \n  publishVideoAndAudio() {\n    return new Promise(async (resolve, reject) => {\n      // Skip if video is set to none\n      if (this.hasVideoDeviceSelectorTarget && this.videoDeviceSelectorTarget.value === \"none\") {\n        await this.publishAudioOnly();\n        resolve();\n        return;\n      }\n      \n      // Basic options first. The blur filter is part of the publisher from creation, so no unblurred\n      // frames reach the audience while the filter spins up.\n      const options = {\n        insertMode: \"append\",\n        width: \"100%\",\n        height: \"100%\",\n        publishAudio: this.audioDeviceSelectorTarget.value !== \"none\",\n        publishVideo: true,\n        showControls: false,\n        style: {\n          buttonDisplayMode: 'off',\n          nameDisplayMode: 'on',\n        },\n        name: this.broadcasterNameValue,\n        ...backgroundBlur.publisherOptions()\n      };\n      \n      try {\n        // Create publisher with minimal options\n        const publisher = await this.createPublisher('video', this.publisherTarget, options);\n        \n        // Set devices after creation\n        try {\n          await this.setPublisherDevices();\n        } catch (deviceError) {\n          console.warn(\"Device selection failed, continuing with defaults:\", deviceError);\n          // Continue anyway with default devices\n        }\n\n        // Swapping the video source after creation can drop the media-processor filter, so reconcile\n        // against the remembered preference instead of trusting that it survived.\n        await this.reconcileBackgroundBlur();\n\n        // Publish to session\n        await this.publishToSession(publisher, 'video');\n        \n        // Update UI\n        if (this.hasVideoControlsTarget) {\n          this.videoControlsTarget.classList.remove('hidden');\n        }\n\n        // The live blur toggle only makes sense once there's a camera to blur, and it replaces the\n        // pre-flight checkbox, which goes away with the device pickers.\n        if (this.hasBlurControlsTarget) {\n          this.blurControlsTarget.classList.remove('hidden');\n        }\n\n        if (this.hasAudioControlsTarget && options.publishAudio) {\n          this.audioControlsTarget.classList.remove('hidden');\n        }\n\n        this.refreshMonitor();\n\n        resolve();\n      } catch (error) {\n        reject(error);\n      }\n    });\n  }\n\n  publishScreenShare() {\n    return new Promise((resolve, reject) => {\n      OT.checkScreenSharingCapability(response => {\n        if (!response.supported) {\n          reject(new Error(\"Screen sharing is not supported in this browser\"));\n          return;\n        }\n        \n        if (response.extensionRegistered === false) {\n          reject(new Error(\"Screen sharing extension is not registered\"));\n          return;\n        }\n        \n        if (response.extensionInstalled === false && response.extensionRequired) {\n          // Improved messaging for extension requirement\n          const browserName = this.getBrowserName();\n          reject(new Error(`${browserName} requires an extension for screen sharing.`));\n          return;\n        }\n        \n        const options = {\n          insertMode: \"append\",\n          width: \"100%\",\n          height: \"100%\",\n          videoSource: \"screen\",\n          audioSource: false,\n          publishAudio: false,\n          name: `${this.broadcasterNameValue} (screen)`\n        };\n        \n        this.createPublisher('screen', this.screenPublisherTarget, options)\n          .then(publisher => this.publishToSession(publisher, 'screen'))\n          .then(() => {\n            this.refreshMonitor();\n            resolve();\n          })\n          .catch(reject);\n      });\n    });\n  }\n  \n  // Helper to get browser name for better error messages\n  getBrowserName() {\n    const userAgent = navigator.userAgent;\n    if (userAgent.indexOf(\"Chrome\") > -1) return \"Chrome\";\n    if (userAgent.indexOf(\"Firefox\") > -1) return \"Firefox\";\n    if (userAgent.indexOf(\"Safari\") > -1) return \"Safari\";\n    if (userAgent.indexOf(\"Edge\") > -1) return \"Edge\";\n    return \"Your browser\";\n  }\n  \n  setPublisherDevices() {\n    return new Promise((resolve, reject) => {\n      const promises = [];\n      \n      // Set video device if selected\n      if (this.publishers.video && \n          this.hasVideoDeviceSelectorTarget && \n          this.videoDeviceSelectorTarget.value && \n          this.videoDeviceSelectorTarget.value !== \"none\") {\n        \n        const videoPromise = this.publishers.video.setVideoSource(this.videoDeviceSelectorTarget.value)\n          .catch(error => {\n            console.warn(\"Failed to set video source, falling back to default:\", error);\n          });\n        \n        promises.push(videoPromise);\n      }\n      \n      // Set audio device if selected\n      if (this.publishers.video &&\n          this.audioDeviceSelectorTarget.value && \n          this.audioDeviceSelectorTarget.value !== \"none\" && \n          this.audioDeviceSelectorTarget.value !== \"\") {\n        \n        const audioPromise = this.publishers.video.setAudioSource(this.audioDeviceSelectorTarget.value)\n          .catch(error => {\n            console.warn(\"Failed to set audio source, falling back to default:\", error);\n          });\n        \n        promises.push(audioPromise);\n      }\n      \n      // Use allSettled to handle both success and failure\n      Promise.allSettled(promises)\n        .then(results => {\n          // Check if any promises were fulfilled\n          const anyFulfilled = results.some(r => r.status === 'fulfilled');\n          \n          if (anyFulfilled) {\n            resolve();\n          } else {\n            // All promises rejected\n            reject(new Error(\"Could not set any device sources\"));\n          }\n        })\n        .catch(error => {\n          console.error(\"Error setting devices:\", error);\n          reject(error);\n        });\n    });\n  }\n  \n  // Helper to clean up publishers gracefully\n  cleanupPublishers() {\n    ['audio', 'video', 'screen'].forEach(type => {\n      if (this.publishers[type]) {\n        try {\n          this.session.unpublish(this.publishers[type]);\n          this.publishers[type].destroy();\n        } catch (e) {\n          console.warn(`Error cleaning up ${type} publisher:`, e);\n        } finally {\n          this.publishers[type] = null;\n        }\n      }\n    });\n  }\n  \n  stop() {\n    this.exitFullscreen();\n    \n    // Update state and clear quality monitoring\n    this.setState(this.constructor.STATES.STOPPING);\n    if (this.qualityCheckInterval) {\n      clearInterval(this.qualityCheckInterval);\n    }\n    this.stopLiveTimer();\n    \n    // Clean up publishers\n    this.cleanupPublishers();\n\n    // Tear down the co-broadcaster strip (detaches stream handlers, clears tiles) before we drop the\n    // session connection.\n    this.teardownPeerPresenter();\n\n    // Disconnect from session\n    if (this.session) {\n      this.session.disconnect();\n    }\n    \n    // Tell the server we stopped, then re-subscribe to whatever broadcast is still live.\n    this.restoreReceiverAfterStopping();\n\n    this.setState(this.constructor.STATES.IDLE);\n\n    // Remove the setup box entirely; it should reappear only when the rep clicks Start/Join again, which\n    // re-renders this component into the publish container via the broadcast/publish action. (There's no\n    // point resetting the box's controls to their idle state when we're about to remove it.)\n    if (this.element.parentElement) {\n      this.element.parentElement.innerHTML = '';\n    }\n  }\n\n  // After we stop broadcasting, restore our view of any still-live broadcast from the other\n  // broadcasters. The `end` request must finish first: it removes us from broadcasting_user_ids, so the\n  // re-rendered receive component no longer lists our own id and will actually connect (rather than\n  // unloading itself as a broadcaster). The receive endpoint returns 410 Gone when the broadcast is\n  // over, in which case the container simply stays empty.\n  async restoreReceiverAfterStopping() {\n    if (this.endUrlValue) {\n      let ended = false;\n      try {\n        const response = await new FetchRequest('GET', this.endUrlValue).perform();\n        ended = response.ok;\n      } catch (error) {\n        console.warn(\"Failed to notify server that broadcast ended\", error);\n      }\n\n      // If the end request did not succeed, the server still lists us in broadcasting_user_ids.\n      // Re-rendering the receive component would then see our own id, treat us as a broadcaster, and\n      // immediately unload itself \u2014 leaving a blank pane. Leave the current view untouched instead.\n      if (!ended) return;\n    }\n\n    await this.showReceivers();\n  }\n\n  // Re-show and re-subscribe the audience view that hideReceivers() detached and hid. Used after a\n  // clean stop (once the server end request has removed us from broadcasting_user_ids) and after a\n  // failed publish (which never distributed, so there is nothing to remove first).\n  async showReceivers() {\n    const receiveContainer = document.querySelector('[data-tag=\"receive_broadcast\"]');\n    if (receiveContainer) receiveContainer.classList.remove('hidden');\n\n    if (!this.hasReceiveUrlValue) return;\n\n    try {\n      await new FetchRequest('GET', this.receiveUrlValue, { responseKind: 'turbo-stream' }).perform();\n    } catch (error) {\n      console.warn(\"Failed to restore broadcast receiver\", error);\n    }\n  }\n  \n  dispatchEvent(eventName, detail = {}) {\n    detail = {\n      ...detail,\n      broadcastType: this.broadcastTypeValue,\n      meetingId: this.element.dataset.meetingId\n    }\n    const event = new CustomEvent(eventName, {\n      bubbles: true,\n      detail: detail\n    });\n    this.element.dispatchEvent(event);\n  }\n  \n  closeContainer() {\n    // Closing while live ends the broadcast \u2014 confirm first. The X sits next to the fullscreen control,\n    // so a rep reaching for \"exit full screen\" can hit it by mistake; the prompt guards against that.\n    if (this.state !== this.constructor.STATES.IDLE) {\n      const ok = window.confirm(\n        'End your broadcast and close the studio? To only leave full screen, use the Exit Full Screen button instead.'\n      );\n      if (!ok) return;\n      this.stop();\n    }\n\n    // Remove container content\n    if (this.element.parentElement) {\n      this.element.parentElement.innerHTML = '';\n    }\n\n    // Show receive container\n    const receiveContainer = document.querySelector('[data-tag=\"receive_broadcast\"]');\n    if (receiveContainer) {\n      receiveContainer.classList.remove('hidden');\n    }\n  }\n  \n  // Audio control methods\n  muteAudio() {\n    if (this.publishers.audio) {\n      this.publishers.audio.publishAudio(false);\n    }\n    \n    if (this.publishers.video && (this.broadcastTypeValue === 'video' || this.broadcastTypeValue === 'screen')) {\n      this.publishers.video.publishAudio(false);\n    }\n    \n    // Update UI\n    if (this.hasMuteButtonTarget && this.hasUnmuteButtonTarget) {\n      this.muteButtonTarget.classList.add('hidden');\n      this.unmuteButtonTarget.classList.remove('hidden');\n    }\n  }\n  \n  unmuteAudio() {\n    if (this.publishers.audio) {\n      this.publishers.audio.publishAudio(true);\n    }\n    \n    if (this.publishers.video && (this.broadcastTypeValue === 'video' || this.broadcastTypeValue === 'screen')) {\n      this.publishers.video.publishAudio(true);\n    }\n    \n    // Update UI\n    if (this.hasMuteButtonTarget && this.hasUnmuteButtonTarget) {\n      this.muteButtonTarget.classList.remove('hidden');\n      this.unmuteButtonTarget.classList.add('hidden');\n    }\n  }\n  \n  // Video control methods\n  turnOffVideo() {\n    if (this.publishers.video) {\n      this.publishers.video.publishVideo(false);\n      \n      // Update UI\n      if (this.hasTurnOffVideoButtonTarget && this.hasTurnOnVideoButtonTarget) {\n        this.turnOffVideoButtonTarget.classList.add('hidden');\n        this.turnOnVideoButtonTarget.classList.remove('hidden');\n      }\n    }\n  }\n  \n  turnOnVideo() {\n    if (this.publishers.video) {\n      this.publishers.video.publishVideo(true);\n      \n      // Update UI\n      if (this.hasTurnOffVideoButtonTarget && this.hasTurnOnVideoButtonTarget) {\n        this.turnOffVideoButtonTarget.classList.remove('hidden');\n        this.turnOnVideoButtonTarget.classList.add('hidden');\n      }\n    }\n  }\n\n  // Background blur control methods\n  //\n  // Two affordances, one state: a checkbox beside the device pickers (arm blur before going live, so\n  // the audience never sees the unblurred room) and a control-bar toggle for once the pickers are\n  // hidden. Both read and write this.blurEnabled through setBackgroundBlur.\n  setupBackgroundBlur() {\n    // Nothing to offer where the media processor isn't available. Removing the controls outright \u2014\n    // rather than hiding them \u2014 keeps updateBroadcastTypeUI's data-broadcast-type sweep from\n    // un-hiding a blur toggle that could never work.\n    if (!backgroundBlur.supported()) {\n      if (this.hasBlurPreferenceTarget) this.blurPreferenceTarget.remove();\n      if (this.hasBlurControlsTarget) this.blurControlsTarget.remove();\n      this.blurEnabled = false;\n      return;\n    }\n\n    this.blurEnabled = backgroundBlur.preferred();\n    this.updateBlurUI();\n  }\n\n  onBlurPreferenceChange(event) {\n    this.setBackgroundBlur(event.target.checked);\n  }\n\n  blurBackground() {\n    this.setBackgroundBlur(true);\n  }\n\n  unblurBackground() {\n    this.setBackgroundBlur(false);\n  }\n\n  async setBackgroundBlur(enabled) {\n    this.blurEnabled = enabled;\n    backgroundBlur.rememberPreference(enabled);\n    this.updateBlurUI();\n\n    // Before publishing there's no publisher to filter \u2014 the preference alone is enough, because the\n    // camera publisher is created with the filter already attached.\n    if (!this.publishers.video) return;\n\n    const blurred = enabled\n      ? await backgroundBlur.apply(this.publishers.video)\n      : await backgroundBlur.clear(this.publishers.video);\n\n    // A filter can be refused (or fail to stop). Don't leave the control claiming a state the camera\n    // isn't actually in. The remembered preference still records what they asked for \u2014 it's the\n    // camera that fell short, not the choice.\n    if (blurred !== enabled) {\n      this.blurEnabled = blurred;\n      this.updateBlurUI();\n      this.showNotification(\n        enabled ? \"Background blur isn't available for this camera.\" : \"Background blur could not be turned off.\",\n        \"warning\"\n      );\n    }\n  }\n\n  // Bring the live camera back in line with this.blurEnabled, and the UI back in line with the camera\n  // if the filter can't be made to match.\n  async reconcileBackgroundBlur() {\n    const publisher = this.publishers.video;\n    if (!publisher || !backgroundBlur.supported()) return;\n    if (typeof publisher.getVideoFilter !== 'function') return;\n\n    if (!!publisher.getVideoFilter() === this.blurEnabled) return;\n\n    this.blurEnabled = this.blurEnabled\n      ? await backgroundBlur.apply(publisher)\n      : await backgroundBlur.clear(publisher);\n\n    this.updateBlurUI();\n  }\n\n  updateBlurUI() {\n    if (this.hasBlurToggleTarget) {\n      this.blurToggleTarget.checked = this.blurEnabled;\n    }\n\n    if (this.hasBlurBackgroundButtonTarget && this.hasUnblurBackgroundButtonTarget) {\n      this.blurBackgroundButtonTarget.classList.toggle('hidden', this.blurEnabled);\n      this.unblurBackgroundButtonTarget.classList.toggle('hidden', !this.blurEnabled);\n    }\n  }\n\n  updateBroadcastButton() {\n    if (this.state !== this.constructor.STATES.IDLE) {\n      this.startPublishingTarget.setAttribute('disabled', 'disabled');\n    } else {\n      this.startPublishingTarget.removeAttribute('disabled');\n    }\n  }\n\n  // Master Hide/Show Broadcast: collapses or restores the whole monitor (camera row + screen stage).\n  // updateMonitorVisibility owns the actual class/label/fullscreen-button bookkeeping.\n  togglePreview() {\n    this.previewVisibleValue = !this.previewVisibleValue;\n    if (!this.previewVisibleValue) this.exitFullscreen();\n    this.updateMonitorVisibility();\n  }\n\n  // Fullscreen pins the whole studio panel left (60vw) and the chat right (40vw), mirroring the\n  // audience's 70/30 split. Tile sizing inside is pure CSS keyed off .fullscreen_video plus the\n  // --with-screen / --cam-count state the monitor already maintains, so nothing per-tile is toggled\n  // here \u2014 the layout stays right as broadcasters join or leave while fullscreen.\n  enterFullscreen() {\n    this.toggleFullscreen(true);\n  }\n\n  exitFullscreen() {\n    this.toggleFullscreen(false);\n  }\n\n  toggleFullscreen(on) {\n    const chatBoxContainer = document.getElementById(`chatbox_container_meeting_${this.element.dataset.meetingId}`);\n    this.element.classList.toggle('fullscreen_video', on);\n    this.element.classList.toggle('broadcast_fullscreen_video', on);\n    if (chatBoxContainer) {\n      chatBoxContainer.classList.toggle('fullscreen_chatbox', on);\n      chatBoxContainer.classList.toggle('broadcast_fullscreen_chatbox', on);\n    }\n    this.isFullscreen = on;\n    this.updateFullscreenButtons();\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\n    'video',\n    'shortCode',\n    'successContainer',\n    'errorContainer',\n    'results'\n  ];\n\n  connect() {\n    // dynamic import to load esm at runtime, and resolving it, \n    // will log the default export of the module.\n    if (!document.documentElement.hasAttribute(\"data-turbolinks-preview\")) {\n      const video = this.element.querySelector('video');\n      import(\"@zxing/library/esm\").then(reader => {\n        this.codeReader = new reader.BrowserQRCodeReader();\n        this.notFound = reader.NotFoundException;\n        this.checksum =  reader.ChecksumException;\n        this.format =  reader.FormatException;\n        this.codeReader.timeBetweenDecodingAttempts = 500\n        this.decodeContinuously(this.codeReader, undefined, video);\n      })\n    }\n  }\n\n  disconnect() {\n    this.codeReader.reset();\n  }\n\n  submit(e) {\n    this.saveCandidate(this.shortCodeTarget.value)\n  }\n\n  dismiss(e) {\n    const { id } = e.target;\n    if (id === 'dismissError') {\n      this.errorContainerTarget.classList.add('hidden');\n    }\n    else {\n      this.successContainerTarget.classList.add('hidden');\n    }\n    // clear src attr because it will not rescan as src is already loaded into the DOM\n    this.resultsTarget.src = '';\n  }\n\n  decodeContinuously(codeReader, selectedDeviceId, video) {\n    codeReader.decodeFromInputVideoDeviceContinuously(selectedDeviceId, video, (result, err) => {\n      if (result) {\n        console.log('Found QR code!', result)\n        const arr = result.text.split(\"/\")\n        if (!this.resultsTarget.hasAttribute(\"src\") || (this.resultsTarget.hasAttribute(\"src\")  && this.resultsTarget.src == '')) {\n          this.saveCandidate(arr[arr.length - 1])\n        } \n      }\n  \n      if (err) {\n        if (err instanceof this.notFound) {\n          console.log('No QR code found.')\n        }\n  \n        if (err instanceof this.checksum) {\n          console.log('A code was found, but it\\'s read value was not valid.')\n        }\n  \n        if (err instanceof this.format) {\n          console.log('A code was found, but it was in a invalid format.')\n        }\n      }\n    })\n  }\n  \n  saveCandidate(shortCode) {\n    this.resultsTarget.src = `/share/save_candidate/${shortCode}`\n    this.shortCodeTarget.value = ''\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { state } from \"../state\"\nimport { PeerMediaPresenter } from \"../broadcast/peer_media_presenter\"\n\nexport default class extends Controller {\n  static targets = [\n    'broadcastContainer',\n    'videoContainer',\n    'screenShareContainer',\n    'mediaControls',\n    'muteButton',\n    'unmuteButton',\n    'fullscreenButton',\n    'exitFullscreenButton',\n    'showBar'\n  ];\n  static values = {\n    apiKey: String,\n    sessionId: String,\n    token: String,\n    meetingId: String,\n    receiveUrl: String,\n    broadcasterIds: Array     }\n\n  connect() {\n    // window.currentUserId is a String; broadcasterIdsValue serialises as numbers. Normalise both.\n    this.isBroadcaster = this.broadcasterIdsValue &&\n                        this.broadcasterIdsValue.map(String).includes(String(window.currentUserId));\n\n    if (this.isBroadcaster) {\n      // Remove component immediately without connecting to OpenTok\n      this.unloadSelf(true); // Pass true to indicate this is broadcaster unloading\n      return;\n    }\n\n    state.broadcastMeetingIds[this.meetingIdValue] = {\n      sessionId: this.sessionIdValue,\n      receiveUrl: this.receiveUrlValue,\n    }\n\n    if (state.currentBroadcastMeetingId && state.currentBroadcastMeetingId !== this.meetingIdValue) {\n      this.unloadSelf()\n      return\n    }\n\n    if (state.activeMeetingId !== this.meetingIdValue) {\n      this.unloadSelf()\n      return\n    }\n\n    state.currentBroadcastMeetingId = this.meetingIdValue\n\n    if (state.onCall) {\n      this.unloadSelf();\n      return;\n    }\n\n    //this keeps subscribers from seeing all the connection events.\n    const props = {connectionEventsSuppressed: true};\n    this.session = OT.initSession(this.apiKeyValue, this.sessionIdValue, props);\n\n    // The shared presenter owns subscribe/tile/teardown + peer audio; this controller keeps the\n    // viewer-specific connection lifecycle, visibility policy (onStreamsChanged), and custom events.\n    this.presenter = new PeerMediaPresenter(this.session, {\n      cameras: this.hasVideoContainerTarget ? this.videoContainerTarget : null,\n      screen: this.hasScreenShareContainerTarget ? this.screenShareContainerTarget : null\n    }, { onChange: this.onStreamsChanged.bind(this) });\n\n    // Attach stream handlers before connecting so none are missed during the handshake.\n    this.presenter.attach();\n\n    const startEvent = new CustomEvent('broadcast:started', {\n      bubbles: true,\n      detail: {\n        broadcastType: 'receiving',\n        meetingId: this.meetingIdValue\n      }\n    });\n    this.element.dispatchEvent(startEvent);\n\n    this.session.connect(this.tokenValue, (error) => {\n      if (error) {\n        this.handleCallback(error);\n        return;\n      }\n\n      // Subscribe to broadcasters already live when we connected.\n      this.presenter.subscribeExisting();\n    });\n\n    this.videoChatStartedHandler = this.unloadSelf.bind(this);\n    document.addEventListener('videoChat:started', this.videoChatStartedHandler);\n\n    this.boundHandleTabFocused = this.handleTabFocused.bind(this)\n    document.addEventListener('tab-focused', this.boundHandleTabFocused)\n\n    // When the local user starts publishing to this meeting, release the shared OT session so the\n    // publish controller can reconnect it with a publisher token (see publish_broadcast_controller).\n    this.boundDetachForLocalPublish = this.detachForLocalPublish.bind(this)\n    document.addEventListener('broadcast:publishing', this.boundDetachForLocalPublish)\n\n    // Recompute container visibility when crossing the lg breakpoint, so the camera strip is hidden/shown\n    // correctly relative to a screen share. Per-viewport tile sizing (incl. orientation) is pure CSS now.\n    // The hide control and its showBar only render below lg, so a pane hidden on mobile must un-hide\n    // when the viewport grows past the breakpoint or nothing would remain to bring it back.\n    this.mobileMediaQuery = window.matchMedia('(max-width: 1023px)')\n    this.boundRecomputeLayout = () => {\n      if (!this.mobileMediaQuery.matches && this.userHidden) {\n        this.show()\n        return\n      }\n      if (this.presenter) this.refreshLayout(this.presenter.counts())\n    }\n    this.mobileMediaQuery.addEventListener('change', this.boundRecomputeLayout)\n  }\n\n  // Detach from the shared OT session without disconnecting it \u2014 the publish controller now owns the\n  // connection. Dropping this.session also makes our later Stimulus disconnect() a no-op on the session.\n  detachForLocalPublish(event) {\n    if (!event?.detail || String(event.detail.meetingId) !== String(this.meetingIdValue)) return;\n    if (this.presenter) {\n      this.presenter.teardown();\n      this.presenter = null;\n    }\n    this.session = null;\n    const parentContainer = document.getElementById(`broadcast_receive_container_meeting_${this.meetingIdValue}`);\n    if (parentContainer) parentContainer.innerHTML = '';\n  }\n\n  // Presenter callback after every subscribe/unsubscribe: the audience grid's lifecycle policy.\n  //\n  // Zero streams does NOT unload the pane. The server owns whether this room is broadcasting: it\n  // rendered us because broadcasting_since is set, and the end of the broadcast arrives as the server\n  // emptying broadcast_receive_container (RemoveBroadcasterService), which disconnects us via\n  // Stimulus. While the server still calls the room live we must stay connected to the OT session,\n  // because a later joiner's stream only ever reaches existing viewers via streamCreated \u2014 #distribute\n  // deliberately does not re-render the receive container for non-first broadcasters. Unloading on a\n  // zero (a mid-handoff gap, or a sole broadcaster whose connection died before the server noticed)\n  // left the viewer with no pane and no subscription, blind to everyone who joined afterwards until\n  // they refreshed. refreshLayout already hides every region at zero, so the empty pane costs nothing\n  // visually; fullscreen is exited because its exit button lives in the (now hidden) media controls.\n  onStreamsChanged(counts) {\n    this.refreshLayout(counts);\n\n    if (counts.total === 0) {\n      this.exitFullscreen();\n      return;\n    }\n\n    if (state.onCall) this.mute();\n  }\n\n  // Single source of truth for which containers are visible, given the live streams and the viewport.\n  // On small screens a screen share hides the camera strip \u2014 the screen is what matters on limited space.\n  // Driven by stream counts only, never broadcast_type, since several broadcasters can publish at once.\n  refreshLayout(counts) {\n    const hasCameras = counts.cameras > 0;\n    const hasScreen = counts.screen > 0;\n    const isSmallScreen = this.mobileMediaQuery ? this.mobileMediaQuery.matches : false;\n\n    if (this.hasScreenShareContainerTarget) {\n      this.screenShareContainerTarget.classList.toggle('hidden', !hasScreen);\n    }\n    if (this.hasVideoContainerTarget) {\n      // --with-screen shrinks cameras into a strip beside a screen share; --dense tightens the height\n      // cap once cameras spill into a 2x2. All resulting dimensions live in .broadcast-cameras CSS.\n      const showCameras = hasCameras && !(hasScreen && isSmallScreen);\n      this.videoContainerTarget.classList.toggle('hidden', !showCameras);\n      this.videoContainerTarget.classList.toggle('broadcast-cameras--with-screen', hasScreen);\n      this.videoContainerTarget.classList.toggle('broadcast-cameras--dense', counts.cameras > 2);\n    }\n    if (this.hasMediaControlsTarget) {\n      this.mediaControlsTarget.classList.toggle('hidden', counts.total === 0);\n    }\n  }\n\n  unloadSelf(isBroadcaster = false) {\n    if (!isBroadcaster) {\n      const endEvent = new CustomEvent('broadcast:ended', {\n        bubbles: true,\n        detail: {\n          broadcastType: 'receiving',\n          meetingId: this.meetingIdValue\n        }\n      });\n      this.element.dispatchEvent(endEvent);\n      this._endEventSent = true;\n    }\n\n    this.endSession();\n\n    const parentContainer = document.getElementById(`broadcast_receive_container_meeting_${this.meetingIdValue}`);\n    if (parentContainer) {\n      parentContainer.innerHTML = '';\n    } else {\n      this.element.remove();\n    }\n  }\n\n  endSession() {\n    if (this.presenter) this.presenter.teardown();\n    if (this.session) {this.session.disconnect()}\n  }\n\n  mute() {\n    if (!this.presenter || this.presenter.audioSubscribers().length === 0) return;\n\n    this.presenter.mute();\n\n    if (this.hasMuteButtonTarget && this.hasUnmuteButtonTarget) {\n      this.muteButtonTarget.classList.add('hidden');\n      this.unmuteButtonTarget.classList.remove('hidden');\n    }\n  }\n\n  unmute() {\n    if (!this.presenter || this.presenter.audioSubscribers().length === 0) return;\n\n    this.presenter.unmute();\n\n    if (this.hasMuteButtonTarget && this.hasUnmuteButtonTarget) {\n      this.muteButtonTarget.classList.remove('hidden');\n      this.unmuteButtonTarget.classList.add('hidden');\n    }\n  }\n\n  // Collapse the pane to the slim showBar (mobile only \u2014 the hide button doesn't render at lg+).\n  // Purely visual: subscriptions stay live so audio keeps playing; mute handles sound separately.\n  // refreshLayout keeps toggling the containers INSIDE the hidden pane, so show() only needs to\n  // re-run it to restore the correct per-stream layout.\n  hide() {\n    this.userHidden = true\n    if (this.hasBroadcastContainerTarget) this.broadcastContainerTarget.classList.add('hidden')\n    if (this.hasShowBarTarget) this.showBarTarget.classList.remove('hidden')\n  }\n\n  show() {\n    this.userHidden = false\n    if (this.hasShowBarTarget) this.showBarTarget.classList.add('hidden')\n    if (this.hasBroadcastContainerTarget) this.broadcastContainerTarget.classList.remove('hidden')\n    if (this.presenter) this.refreshLayout(this.presenter.counts())\n  }\n\n  enterFullscreen() {\n    const container = this.broadcastContainerTarget;\n    const chatBoxContainer = document.getElementById(`chatbox_container_meeting_${this.meetingIdValue}`);\n    container.classList.add('fullscreen_video');\n    if (chatBoxContainer) chatBoxContainer.classList.add('fullscreen_chatbox');\n    if (this.hasFullscreenButtonTarget) this.fullscreenButtonTarget.classList.add('lg:hidden');\n    if (this.hasExitFullscreenButtonTarget) {\n      this.exitFullscreenButtonTarget.classList.remove('hidden');\n      this.exitFullscreenButtonTarget.classList.add('lg:flex');\n    }\n  }\n\n  exitFullscreen() {\n    if (!this.hasBroadcastContainerTarget) return;\n    const container = this.broadcastContainerTarget;\n    const chatBoxContainer = document.getElementById(`chatbox_container_meeting_${this.meetingIdValue}`);\n    container.classList.remove('fullscreen_video');\n    if (chatBoxContainer) chatBoxContainer.classList.remove('fullscreen_chatbox');\n    if (this.hasFullscreenButtonTarget) this.fullscreenButtonTarget.classList.remove('lg:hidden');\n    if (this.hasExitFullscreenButtonTarget) {\n      this.exitFullscreenButtonTarget.classList.add('hidden');\n      this.exitFullscreenButtonTarget.classList.remove('lg:flex');\n    }\n  }\n\n  handleCallback(error, result) {\n    if (error) {\n      console.error(\"Error in subscribe callback:\", error);\n      return;\n    }\n  }\n\n  disconnect() {\n    // Release the single-broadcast slot if we own it. Otherwise a broadcast that ends here leaves the\n    // slot pinned to a dead meeting and suppresses the next meeting the viewer moves to (staff and\n    // candidates crossing main rooms). Guard on ownership: suppressed and broadcaster unloads disconnect\n    // too and must not wipe another meeting's active claim.\n    if (state.currentBroadcastMeetingId === this.meetingIdValue) {\n      state.currentBroadcastMeetingId = null\n    }\n\n    this.endSession();\n\n    if (this.session) {\n      this.session = null;\n    }\n\n    this.presenter = null;\n\n    document.removeEventListener('videoChat:started', this.videoChatStartedHandler);\n    document.removeEventListener('broadcast:publishing', this.boundDetachForLocalPublish);\n    document.removeEventListener('tab-focused', this.boundHandleTabFocused);\n    if (this.mobileMediaQuery && this.boundRecomputeLayout) {\n      this.mobileMediaQuery.removeEventListener('change', this.boundRecomputeLayout);\n    }\n    this.exitFullscreen();\n  }\n\n  handleTabFocused(event) {\n    const { meetingId, otherParticipantUserId, otherParticipantRole } = event.detail\n    if (this.meetingIdValue && meetingId !== this.meetingIdValue) {\n      state.currentBroadcastMeetingId = null\n      this.unloadSelf()\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  reset() {\n    this.element.reset()\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ 'query', 'form', 'clearButton'];\n  static values = { url: String, minLength: Number, debounceTimer: Number }\n\n  inputHandler() {\n    this.debounce(this.search.bind(this), 500);\n    if (this.queryTarget.value.length > 0) {\n      this.showElement(this.clearButtonTarget)\n    } else {\n      this.hideElement(this.clearButtonTarget)\n    }\n  }\n\n  search() {\n    this.formTarget.requestSubmit()\n  }\n\n  clear() {\n    this.queryTarget.value = \"\"\n    this.queryTarget.focus()\n    this.formTarget.requestSubmit()\n    this.hideElement(this.clearButtonTarget)\n  }\n\n  hideElement(elem) {\n    elem.classList.remove(\"visible\")\n    elem.classList.add(\"hidden\")\n  }\n\n  showElement(elem) {\n    elem.classList.remove(\"hidden\")\n    elem.classList.add(\"visible\")\n  }\n\n  debounce(callback, time) {\n    clearTimeout(this.debounceTimerValue);\n    this.debounceTimerValue = setTimeout(callback, time);\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\n\nexport default class extends Controller {\n\n  async save(event) {\n    let results = await this.saveSubForms(event)\n    if (results.every(result => result)) {\n      if (event.target.form && !event.target.form.dataset.noSubmit) {\n        const formData = new FormData(event.target.form)\n        const request = new FetchRequest('post', event.target.form.action, { responseKind: 'turbo-stream', body: formData })\n        const response = await request.perform()\n        response.renderTurboStream()\n      }\n    }\n  }\n\n  async saveContinue(event) {\n    let results = await this.saveSubForms(event)\n    if (results.every(result => result)) {\n      if (event.target.form && !event.target.form.dataset.noSubmit) {\n        const formData = new FormData(event.target.form)\n        formData.append('commit', 'Save & Continue')\n        const request = new FetchRequest('post', event.target.form.action, { responseKind: 'turbo-stream', body: formData })\n        const response = await request.perform()\n        if (response.redirected) {\n          window.location.href = response.response.url\n        } else {\n          response.renderTurboStream()\n        }\n      } else {\n        setTimeout(() => {\n          if(event.target.closest('turbo-frame')) {\n            window.dispatchEvent(new CustomEvent('set-tab', { detail: event.target.closest('turbo-frame').querySelector(\"input[name='next_tab']\").value }))\n          } else {\n            // Saving an expanded sub form may swap out the turbo frame.\n            // Make the user press save again.\n            return\n          }\n        }, 300);\n      }\n    }\n  }\n\n  async saveSubForms(event) {\n    event.preventDefault()\n    const container = document.getElementById(event.params.id)\n    const openForms = container.getElementsByTagName('form')\n    let results = []\n    for(const openForm of openForms) {\n      const request = new FetchRequest('post', openForm.action, { responseKind: 'turbo-stream', body: new FormData(openForm) })\n      const response = await request.perform()\n      response.renderTurboStream()\n      results.push(response.statusCode === 200)\n      if (response.statusCode !== 200) {\n        window.dispatchEvent(new CustomEvent('set-tab', { detail: event.target.form.current_tab.value }))\n      }\n    }\n    return results\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = {\n    storageKey: String\n  }\n  static classes = [\"hidden\"]\n\n  connect() {\n    if (this.isDismissed()) {\n      this.element.classList.add(this.hiddenClass)\n    }\n  }\n\n  dismiss() {\n    localStorage.setItem(this.storageKeyValue, \"true\")\n    this.element.classList.add(this.hiddenClass)\n  }\n\n  isDismissed() {\n    return localStorage.getItem(this.storageKeyValue) === \"true\"\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport PickerController from \"./picker_controller\"\n\nexport default class SearchPickerController extends PickerController {\n  static targets = [...PickerController.targets, 'query', 'hiddenIdField', 'resultsFrame', 'selectedContainer', 'selectedValue'];\n  static values = { url: String, minLength: Number, debounceTimer: Number, showSample: Boolean };\n\n  connect() {\n    super.connect()\n    if (this.hiddenIdFieldTarget.value && this.hiddenIdFieldTarget.dataset.selectedValue) {\n      var selectedValue = this.hiddenIdFieldTarget.dataset.selectedValue;\n      this.renderValue(selectedValue, this.hiddenIdFieldTarget.value);\n    }\n    if(this.showSampleValue) {\n      this.search()\n    }\n    this.boundPositionDropdown = this.positionDropdown.bind(this)\n  }\n\n  inputHandler(event) {\n    this.debounce(this.debouncedInputHandler.bind(this, event), 500)\n  }\n\n  search() {\n    this.resultsFrameTarget.src = this.urlValue.replace(/%s|%25s/g, encodeURIComponent(this.queryTarget.value))\n    this.showElement(this.resultsContainerTarget)\n  }\n\n  select(event) {\n    var selectedId = event.params.id\n    var selectedValue = event.params.value\n\n    this.renderValue(selectedValue, selectedId);\n    this.hiddenIdFieldTarget.dispatchEvent(new Event('input'))\n    this.dispatch(\"select\", { detail: { id: selectedId, value: selectedValue } })\n    this.hiddenIdFieldTarget.dispatchEvent(new Event('change'))\n    event.preventDefault()\n  }\n\n  renderValue(selectedValue, selectedId) {\n    this.hideElement(this.resultsContainerTarget);\n    this.hideElement(this.searchContainerTarget);\n    this.showElement(this.selectedContainerTarget);\n    this.selectedValueTarget.innerText = selectedValue;\n    this.hiddenIdFieldTarget.value = selectedId;\n  }\n\n  clear(event) {\n    this.selectedValueTarget.innerText = \"\"\n    this.hiddenIdFieldTarget.value = \"\"\n    this.hiddenIdFieldTarget.dispatchEvent(new Event('input'))\n    this.queryTarget.value = \"\"\n    this.showElement(this.searchContainerTarget)\n    this.hideElement(this.selectedContainerTarget)\n    this.queryTarget.focus()\n\n    this.dispatch(\"clear\")\n    event.preventDefault()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ 'query', 'form', 'clearButton'];\n  static values = { url: String, minLength: Number, debounceTimer: Number }\n\n  inputHandler() {\n    this.debounce(this.search.bind(this), 500);\n    if (this.queryTarget.value.length > 0) {\n      this.showElement(this.clearButtonTarget)\n    } else {\n      this.hideElement(this.clearButtonTarget)\n    }\n  }\n\n  search() {\n    this.formTarget.requestSubmit()\n  }\n\n  clear() {\n    this.queryTarget.value = \"\"\n    this.queryTarget.focus()\n    this.formTarget.requestSubmit()\n    this.hideElement(this.clearButtonTarget)\n  }\n\n  hideElement(elem) {\n    elem.classList.remove(\"visible\")\n    elem.classList.add(\"hidden\")\n  }\n\n  showElement(elem) {\n    elem.classList.remove(\"hidden\")\n    elem.classList.add(\"visible\")\n  }\n\n  debounce(callback, time) {\n    clearTimeout(this.debounceTimerValue);\n    this.debounceTimerValue = setTimeout(callback, time);\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [ 'query', 'form'];\n  static values = { minLength: Number, formId: String }\n\n  connect() {\n    const inputLength = this.queryTarget.value.length\n    this.queryTarget.setSelectionRange(inputLength, inputLength)\n    this.queryTarget.focus()\n  }\n\n  inputHandler() {\n    this.debounce(this.search.bind(this), 500);\n  }\n\n  search() {\n    const form = this.hasFormTarget ? this.formTarget : document.getElementById(this.formIdValue)\n    form.requestSubmit()\n  }\n\n  clear() {\n    this.queryTarget.value = \"\"\n    this.queryTarget.focus()\n    this.formTarget.requestSubmit()\n    this.hideElement(this.clearButtonTarget)\n  }\n\n\n  debounce(callback, time) {\n    clearTimeout(this.debounceTimerValue);\n    this.debounceTimerValue = setTimeout(callback, time);\n  }\n}", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n    let form = this.element\n    this.removeExistingToken(form)\n    form.appendChild(this.authenticityToken)\n  }\n\n  get authenticityToken() {\n    const input = document.createElement(\"input\")\n\n    input.type = \"hidden\"\n    input.name = \"authenticity_token\"\n    input.value = document.querySelector(\"meta[name='csrf-token']\").content\n\n    return input\n  }\n\n  removeExistingToken(form) {\n    const input = form.querySelector(\"input[name='authenticity_token']\")\n    if (input) {\n      input.remove()\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static values = {\n    sortBy: { type: String, default: \"name\" },\n    sortDirection: { type: String, default: \"asc\" }\n  }\n\n  initialize() {\n    this.sortChildren = this.sortChildren.bind(this)\n    this.append = this.append.bind(this)\n  }\n\n  connect() {\n    // Initial sort when connecting\n    this.sortChildren()\n\n    this.observer = new MutationObserver(() => {\n      if (this.children.length > 1) {\n        this.sortChildren()\n      }\n    })\n\n    this.observer.observe(this.element, {\n      childList: true,\n      subtree: false\n    })\n  }\n\n  disconnect() {\n    if (this.observer) {\n      this.observer.disconnect()\n    }\n  }\n\n  sortChildren() {\n    const children = this.children\n    if (children.length <= 1) return\n\n    if (this.elementsAreSorted(children)) return\n\n    children\n      .sort(this.compareElements.bind(this))\n      .forEach(this.append)\n  }\n\n  elementsAreSorted(elements) {\n    if (elements.length <= 1) return true\n\n    let [left, ...rights] = elements\n    for (const right of rights) {\n      if (this.compareElements(left, right) > 0) return false\n      left = right\n    }\n    return true\n  }\n\n  compareElements(left, right) {\n    const valueA = left.dataset[this.sortByValue] || ''\n    const valueB = right.dataset[this.sortByValue] || ''\n\n    const sortType = left.dataset.sortType || 'string'\n\n    if (sortType === 'number') {\n      const numA = parseFloat(valueA) || 0\n      const numB = parseFloat(valueB) || 0\n      return this.sortDirectionValue === \"asc\" ? numA - numB : numB - numA\n    } else {\n      return this.sortDirectionValue === \"asc\"\n        ? valueA.localeCompare(valueB)\n        : valueB.localeCompare(valueA)\n    }\n  }\n\n  get children() {\n    return Array.from(this.element.children)\n  }\n\n  append(child) {\n    this.element.appendChild(child)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Home-realm discovery on the login form.\n//\n// Asks the server whether the typed address belongs to a domain that signs in\n// through an identity provider. Previously this was a hardcoded check for\n// \"@recruitmilitary.com\", which meant no client organization's domain could ever\n// show the button.\n//\n// Only the domain is sent, never the whole address. Answers are cached per\n// domain for the life of the page so backspacing through an address does not\n// re-ask, and requests are debounced and superseded so only the latest matters.\nexport default class extends Controller {\n  static targets = [\n    \"email\", \"form\", \"loginHint\", \"ssoButton\", \"enforcedNotice\", \"password\", \"passwordSubmit\",\n    \"microsoftMark\", \"ssoLabel\"\n  ]\n  static values = {\n    enabled: { type: Boolean, default: false },\n    url: { type: String, default: \"/sso/discovery\" },\n    debounce: { type: Number, default: 250 },\n    microsoftPath: { type: String, default: \"/users/auth/microsoft_graph\" }\n  }\n\n  connect() {\n    if (!this.hasEmailTarget || !this.enabledValue) return\n\n    this.cache = new Map()\n    this.timer = null\n    this.controller = null\n\n    this.onInput = this.onInput.bind(this)\n    this.emailTarget.addEventListener(\"input\", this.onInput)\n    this.emailTarget.addEventListener(\"blur\", this.onInput)\n\n    if (this.emailTarget.value) this.check()\n  }\n\n  disconnect() {\n    if (this.hasEmailTarget) {\n      this.emailTarget.removeEventListener(\"input\", this.onInput)\n      this.emailTarget.removeEventListener(\"blur\", this.onInput)\n    }\n    clearTimeout(this.timer)\n    this.controller?.abort()\n  }\n\n  onInput() {\n    clearTimeout(this.timer)\n    this.timer = setTimeout(() => this.check(), this.debounceValue)\n  }\n\n  async check() {\n    const email = this.emailTarget.value.trim().toLowerCase()\n    const domain = this.domainOf(email)\n\n    if (!domain) {\n      this.apply({ sso: false, enforced: false })\n      return\n    }\n\n    if (this.cache.has(domain)) {\n      this.apply(this.cache.get(domain), email)\n      return\n    }\n\n    const result = await this.discover(domain)\n    // A failed lookup hides the button rather than guessing. The server refuses\n    // the wrong credential either way; this only decides what we offer.\n    if (!result) {\n      this.apply({ sso: false, enforced: false })\n      return\n    }\n\n    this.cache.set(domain, result)\n    this.apply(result, email)\n  }\n\n  async discover(domain) {\n    this.controller?.abort()\n    this.controller = new AbortController()\n\n    try {\n      const response = await fetch(this.urlValue, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\" },\n        body: JSON.stringify({ domain }),\n        signal: this.controller.signal\n      })\n\n      if (!response.ok) return null\n\n      return await response.json()\n    } catch (error) {\n      // Includes the abort that happens when a newer keystroke supersedes this\n      // request, which is not a failure worth reacting to.\n      return null\n    }\n  }\n\n  domainOf(email) {\n    const at = email.lastIndexOf(\"@\")\n    if (at < 1 || at === email.length - 1) return null\n\n    return email.slice(at + 1)\n  }\n\n  apply({ sso, enforced, start_path }, email = \"\") {\n    if (sso) {\n      if (this.hasLoginHintTarget) this.loginHintTarget.value = email\n      if (this.hasSsoButtonTarget) this.ssoButtonTarget.classList.remove(\"hidden\")\n      this.pointAt(start_path)\n    } else {\n      if (this.hasSsoButtonTarget) this.ssoButtonTarget.classList.add(\"hidden\")\n    }\n\n    this.setPasswordAvailable(!enforced)\n    if (this.hasEnforcedNoticeTarget) this.enforcedNoticeTarget.classList.toggle(\"hidden\", !enforced)\n  }\n\n  // With more than one protocol, where the button posts depends on the typed\n  // address. The server names its own entry point rather than the page guessing,\n  // and it names a protocol's shared path, never a connection.\n  //\n  // A response with no start_path leaves the form as rendered, so an older\n  // server or a truncated answer falls back to Microsoft rather than to nothing.\n  pointAt(startPath) {\n    if (!startPath || !this.hasFormTarget) return\n\n    this.formTarget.action = startPath\n\n    const microsoft = startPath === this.microsoftPathValue\n    if (this.hasMicrosoftMarkTarget) this.microsoftMarkTarget.classList.toggle(\"hidden\", !microsoft)\n    // Showing a Microsoft mark and \"Sign in with Microsoft\" above an Okta form\n    // is worse than saying nothing specific.\n    if (this.hasSsoLabelTarget) {\n      this.ssoLabelTarget.textContent = microsoft ? \"Sign in with Microsoft\" : \"Sign in with single sign-on\"\n    }\n  }\n\n  // When an organization requires single sign-on the server refuses a password\n  // anyway, so offering the field is just an invitation to fail.\n  setPasswordAvailable(available) {\n    if (this.hasPasswordTarget) {\n      this.passwordTarget.disabled = !available\n      this.passwordTarget.required = available\n      // A field that is disabled but still looks editable reads as a bug.\n      this.passwordTarget.classList.toggle(\"bg-gray-100\", !available)\n      this.passwordTarget.classList.toggle(\"cursor-not-allowed\", !available)\n    }\n\n    if (this.hasPasswordSubmitTarget) {\n      this.passwordSubmitTarget.disabled = !available\n      this.passwordSubmitTarget.classList.toggle(\"opacity-50\", !available)\n      this.passwordSubmitTarget.classList.toggle(\"cursor-not-allowed\", !available)\n    }\n  }\n\n  submitSso() {\n    if (this.hasFormTarget) this.formTarget.submit()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  inputHandler(custom_event) {\n    const selectedValue = custom_event.detail.value;\n    let url = new URL(window.location.href);\n    const fields = url.searchParams.getAll('filters[][field]');\n    const terms = url.searchParams.getAll('filters[][term]');\n    const labels = url.searchParams.getAll('filters[][label]');\n    url = this.clearFilterParams(url);\n\n    for(let [index, field] of fields.entries()) {\n      if(field !== 'transition_installation') {\n        url.searchParams.append('filters[][field]', field);\n        url.searchParams.append('filters[][term]', terms[index]);\n        url.searchParams.append('filters[][label]', labels[index]);\n      }\n    }\n    url.searchParams.append('filters[][field]', 'transition_installation');\n    url.searchParams.append('filters[][term]', selectedValue);\n    url.searchParams.append('filters[][label]', selectedValue);\n    Turbo.visit(url.href);\n  }\n\n  clearFilterParams(url) {\n    url.searchParams.delete('filters[][field]');\n    url.searchParams.delete('filters[][term]');\n    url.searchParams.delete('filters[][label]');\n    return url;\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport DatePickerController from \"./date_picker_controller\"\n\nexport default class extends DatePickerController {\n  static targets = [...DatePickerController.targets, 'comparisonModeButton', 'comparisonModeButtonLabel', 'comparisonModeButtonPreview', 'comparisonCustomFields', 'comparisonDateInput', 'comparisonTmpDisplay']\n  static values = {\n    defaultDate: String, frameSelector: String, showAllTime: Boolean, allTimeStartDate: String,\n    startDate: String, endDate: String, comparisonStartDate: String, comparisonEndDate: String\n  }\n\n  connect() {\n    this.predefinedRanges = {\n      Today: [new Date(), new Date()],\n      'Last 7 Days': [\n          new Date(new Date().setDate(new Date().getDate() - 7)),\n          new Date(),\n      ],\n      'Month to Date': [\n          new Date(\n              new Date().getFullYear(),\n              new Date().getMonth(),\n              1\n          ),\n          new Date(),\n      ],\n      'Year to Date': [\n          new Date(new Date().getFullYear(), 0, 1),\n          new Date(),\n      ],\n      'Trailing 12 Months': [\n          new Date(new Date().setMonth(new Date().getMonth() - 12)),\n          new Date(),\n      ],\n      'Previous Month': [\n          new Date(\n              new Date().getFullYear(),\n              new Date().getMonth() - 1,\n              1\n          ),\n          new Date(new Date().setDate(0)),\n      ],\n      'Previous Year': [\n          new Date(new Date().getFullYear() - 1, 0, 1),\n          new Date(new Date().getFullYear() - 1, 11, 31),\n      ],\n      'All Time': [\n          new Date(this.allTimeStartDateValue),\n          new Date(),\n      ],\n      Custom: [null, null],\n    }\n    if (!this.showAllTimeValue) {\n      delete this.predefinedRanges['All Time'];\n    }\n    this.initDatePicker();\n    this.initComparisonDatePicker();\n  }\n\n  initDatePicker() {\n    super.initDatePicker(this.dateInputTarget, {\n      defaultDate: this.initialRange(this.startDateValue, this.endDateValue),\n      plugins: [\n        this.predefinedDateRangePlugin({\n          predefinedRanges: this.predefinedRanges\n        })\n      ],\n      onClose: function (selectedDates, dateStr, instance) {\n          let { startDate, endDate } = this.getSelectedDates(selectedDates, instance);\n          if (\n              selectedDates[0] !== instance._initStartDate ||\n              selectedDates[1] !== instance._initEndDate\n          ) {\n              this.reloadStats({ start_date: startDate, end_date: endDate });\n          }\n          this.setDisplayDate(selectedDates, instance);\n      }.bind(this),\n    });\n  }\n\n  parseISODate(value) {\n    if (!value) return null;\n    const [y, m, d] = value.split('-').map(Number);\n    if (!y || !m || !d) return null;\n    return new Date(y, m - 1, d);\n  }\n\n  initialRange(startValue, endValue) {\n    const start = this.parseISODate(startValue);\n    const end = this.parseISODate(endValue);\n    return start && end ? [start, end] : undefined;\n  }\n\n  initComparisonDatePicker() {\n    if (!this.hasComparisonDateInputTarget) return;\n    super.initDatePicker(this.comparisonDateInputTarget, {\n      dateFormat: 'Y-m-d',\n      defaultDate: this.initialRange(this.comparisonStartDateValue, this.comparisonEndDateValue),\n      positionElement: this.hasComparisonModeButtonTarget ? this.comparisonModeButtonTarget : undefined,\n      onReady: function (selectedDates, dateStr, instance) {\n          instance._initStartDate = selectedDates[0];\n          instance._initEndDate = selectedDates[1];\n          if (selectedDates.length > 0) {\n            this.setDisplayDate(selectedDates, instance, this.comparisonTmpDisplayTarget);\n          } else {\n            this.setDisplayText(instance, 'Select Range', this.comparisonTmpDisplayTarget);\n          }\n      }.bind(this),\n      onClose: function (selectedDates, dateStr, instance) {\n          this.setDisplayDate(selectedDates, instance, this.comparisonTmpDisplayTarget);\n          if (selectedDates.length < 2) return;\n          if (selectedDates[0] === instance._initStartDate && selectedDates[1] === instance._initEndDate) return;\n          const { startDate, endDate } = this.getSelectedDates(selectedDates, instance);\n          this.syncComparisonFields({ comparison_mode: 'custom', comparison_start_date: startDate, comparison_end_date: endDate });\n          this.reloadStats({ comparison_mode: 'custom', comparison_start_date: startDate, comparison_end_date: endDate });\n      }.bind(this),\n    });\n  }\n\n  predefinedDateRangePlugin(config) {\n    return function (instance) {\n      function compareDates(date1, date2) {\n        return date1.setHours(0, 0, 0, 0) - date2.setHours(0, 0, 0, 0);\n      }\n\n      function isPredefinedRange(selectedDates, predefinedRanges, key) {\n        if (!selectedDates[0] || !selectedDates[1]) return false;\n        const predefinedRange = predefinedRanges[key];\n        return (\n            compareDates(selectedDates[0], predefinedRange[0]) === 0 &&\n            compareDates(selectedDates[1], predefinedRange[1]) === 0\n        );\n      }\n\n      return {\n        onReady: function (selectedDates) {\n          const fpBodyWrapper = document.createElement('div');\n          fpBodyWrapper.className = 'relative';\n\n          const fpMonths = instance.monthsDropdownContainer.parentNode.parentNode.parentNode;\n          fpMonths.classList.add('border-b-2');\n          const fpInnerContainer = instance.innerContainer\n          fpBodyWrapper.appendChild(fpMonths);\n          fpBodyWrapper.appendChild(fpInnerContainer);\n          instance.calendarContainer.prepend(fpBodyWrapper);\n\n          const mainContainer = document.createElement('div');\n          mainContainer.className = 'flex items-center border-b-2 pb-1 predefined-date-picker-container';\n\n          const labelContainer = document.createElement('div');\n          labelContainer.className = 'w-1/3';\n          const label = document.createElement('label');\n          label.className = 'block mt-1 text-sm font-medium text-gray-700';\n          label.innerText = 'Date Range: ';\n          labelContainer.appendChild(label);\n          mainContainer.appendChild(labelContainer);\n\n          const selectContainer = document.createElement('div');\n          selectContainer.className = 'w-2/3';\n          const select = document.createElement('select');\n          select.className = 'mt-1 block w-full pl-3 pr-3 py-1 border-gray-300 focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 rounded-md';\n          select.onchange = function () {\n            const selectedDateRange = this.value;\n            const selectedDates = config.predefinedRanges[selectedDateRange];\n            if (selectedDates[0] && selectedDates[1]) {\n              instance.setDate(selectedDates, true);\n              instance.close();\n            }\n          };\n          let foundPredefinedRange = false;\n          for (const key in config.predefinedRanges) {\n            const option = document.createElement('option');\n            option.value = key;\n            option.innerText = key;\n            if (!foundPredefinedRange && key !== 'Custom' && isPredefinedRange(selectedDates, config.predefinedRanges, key)) {\n              option.selected = true;\n              foundPredefinedRange = true;\n            } else if (!foundPredefinedRange && key === 'Custom') {\n              option.selected = true;\n            }\n            select.appendChild(option);\n          }\n          selectContainer.appendChild(select);\n          mainContainer.appendChild(selectContainer);\n\n          instance.calendarContainer.prepend(mainContainer);\n          instance.calendarContainer.classList.add('flatpick-with-predefined-range-picker');\n        }\n      }\n    }\n  }\n\n  comparisonModeSelected(event) {\n    const mode = event.params.mode;\n    const labelText = event.currentTarget.querySelector('.comparison-mode-option-label')?.textContent;\n    if (this.hasComparisonModeButtonLabelTarget && labelText) {\n      this.comparisonModeButtonLabelTarget.textContent = labelText;\n    }\n    if (this.hasComparisonModeButtonPreviewTarget) {\n      const previewText = event.currentTarget.querySelector('.comparison-mode-option-preview')?.textContent || '';\n      this.comparisonModeButtonPreviewTarget.textContent = previewText;\n      this.comparisonModeButtonPreviewTarget.style.display = previewText ? '' : 'none';\n    }\n    if (mode !== 'custom') {\n      if (this.hasComparisonDateInputTarget) this.comparisonDateInputTarget._flatpickr?.close();\n      this.syncComparisonFields({ comparison_mode: mode, comparison_start_date: null, comparison_end_date: null });\n      this.reloadStats({ comparison_mode: mode, comparison_start_date: null, comparison_end_date: null });\n      return;\n    }\n    this.comparisonDateInputTarget._flatpickr?.open();\n  }\n\n  // Other GET forms sharing the dashboard turbo frame (e.g. the event/checkbox\n  // filter form) keep their own hidden comparison fields so a submit from those\n  // forms doesn't drop the currently selected comparison period.\n  syncComparisonFields({ comparison_mode, comparison_start_date, comparison_end_date }) {\n    const scope = (this.frameSelectorValue && document.querySelector(this.frameSelectorValue)) || document;\n    const modeField = scope.querySelector('#dashboard_comparison_mode_field');\n    const startField = scope.querySelector('#dashboard_comparison_start_date_field');\n    const endField = scope.querySelector('#dashboard_comparison_end_date_field');\n    if (modeField) modeField.value = comparison_mode ?? '';\n    if (startField) startField.value = comparison_start_date ?? '';\n    if (endField) endField.value = comparison_end_date ?? '';\n  }\n\n  reloadStats(params) {\n    const applyParams = (url) => {\n      Object.entries(params).forEach(([key, value]) => {\n        if (value === null || value === undefined || value === '') {\n          url.searchParams.delete(key);\n        } else {\n          url.searchParams.set(key, value);\n        }\n      });\n    };\n\n    if (this.frameSelectorValue) {\n      const frame = document.querySelector(this.frameSelectorValue);\n      const baseSrc = frame.src || window.location.href;\n      const url = new URL(baseSrc);\n      applyParams(url);\n      frame.src = url.href;\n      const pageUrl = new URL(window.location.href);\n      applyParams(pageUrl);\n      history.pushState({}, '', pageUrl.href);\n    } else {\n      const url = new URL(window.location.href);\n      applyParams(url);\n      Turbo.visit(url.href);\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport { state } from \"../state\"\n\nexport default class extends Controller {\n  static targets = ['tabContainer', 'panelContainer', 'tab', 'panel', 'loadingIndicator']\n  static values = { mainRoomId: String }\n  static classes = [ \"active\", \"blinking\" ]\n\n  tabCount = 0\n\n  connect() {\n    this.boundHandleBlinkNotification = this.handleBlinkNotification.bind(this)\n    document.addEventListener('blink-notification', this.boundHandleBlinkNotification)\n\n    this.boundHandleCloseMeeting = this.handleCloseMeeting.bind(this)\n    document.addEventListener('close-meeting-notification', this.boundHandleCloseMeeting)\n\n    this.boundCatchUp = this.handleCatchUp.bind(this);\n    document.addEventListener('cable:catch-up', this.boundCatchUp);\n\n    //this runs after tab targets are connected, do if it is 0 make sure we aren't showing the loading indicator\n    if (this.tabCount == 0) this.loadingIndicatorTarget.classList.add('hidden')\n  }\n\n  disconnect() {\n    document.removeEventListener('blink-notification', this.boundHandleBlinkNotification)\n    document.removeEventListener('close-meeting-notification', this.boundHandleCloseMeeting)\n    document.removeEventListener('cable:catch-up', this.boundCatchUp);\n  }\n\n  handleCatchUp() {\n    // Mark non-active private chat panels as stale\n    this.panelTargets.forEach(panel => {\n      if (panel.classList.contains('hidden')) {\n        panel.dataset.stale = \"true\";\n      }\n    });\n  }\n  \n\n  handleBlinkNotification(event) {\n    const { meetingId } = event.detail\n\n    if (meetingId) {\n      const tab = this.#tabForMeeting(meetingId)\n      if (tab) {\n        const activeTab = this.tabTargets.find(t => t.classList.contains(this.activeClasses[0]))\n        \n        if (!activeTab || activeTab.dataset.meetingId !== meetingId) {\n          tab.classList.add(...this.blinkingClasses)\n        }\n      }\n    }\n  }\n  \n  handleCloseMeeting(event) {\n    const { meeting_id } = event.detail\n    \n    if (meeting_id) {\n      const tab = this.#tabForMeeting(meeting_id)\n      const panel = this.#panelForMeeting(meeting_id)\n      \n      if (tab && panel) {\n        const isActiveTab = tab.classList.contains(this.activeClasses[0])\n        const otherTab = tab.nextElementSibling || tab.previousElementSibling\n        \n        panel.remove()\n        tab.remove()\n        \n        this.updateTabCount()\n        if (isActiveTab && otherTab) {\n          this.activateTab(otherTab.dataset.meetingId)\n        }\n      }\n    }\n  }\n  \n  tabTargetConnected(element) {\n    this.fetchPanel(element)\n    this.updateTabCount()\n  }\n\n  panelTargetConnected(element) {\n    const tab = this.tabTargets.find(tab => tab.dataset.meetingId == element.dataset.meetingId)\n    if (this.panelTargets.length === this.tabTargets.length) {\n      this.loadingIndicatorTarget.classList.add('hidden')\n      if (tab.dataset.focus === \"true\") {\n        this.activateTab(tab.dataset.meetingId)\n        this.dispatchTabFocusedEvent(element.dataset.meetingId, element.dataset.mainRoomId)\n      } else {\n        this.selectInitialTab()\n      }\n    }\n  }\n\n  fetchPanel(node) {\n    const meetingId = node.dataset.meetingId\n    // if the panel is already here, don't fetch it again just focus\n    if (this.#panelForMeeting(meetingId)) { \n      if (node.dataset.focus === \"true\") {\n        this.activateTab(node.dataset.meetingId)\n        this.dispatchTabFocusedEvent(node.dataset.meetingId, node.dataset.mainRoomId)\n      }\n      return\n    } \n\n    const participantId = node.dataset.participantId\n    const url = `/meetings/${meetingId}/chat_panel/${participantId}`\n  \n    const request = new FetchRequest('GET', url, { responseKind: 'turbo-stream' })\n    request.perform()\n  }\n\n  activateTab(meetingId, notify = true) {\n    this.hideAll()\n    const tab = this.tabTargets.find(tab => tab.dataset.meetingId == meetingId)\n    const panel = this.panelTargets.find(panel => panel.dataset.meetingId == meetingId)\n\n    tab.classList.add(...this.activeClasses)\n    tab.dataset.focus = \"true\"\n    tab.classList.remove(this.blinkingClasses)\n    panel.classList.remove('hidden')\n\n    // If panel was marked stale during a reconnect, trigger catch-up\n    if (panel.dataset.stale === \"true\") {\n      delete panel.dataset.stale;\n      panel.dispatchEvent(new CustomEvent('panel:activated-stale', { bubbles: true }));\n    }\n\n    if (notify) this.dispatchTabFocusedEvent(meetingId, this.mainRoomIdValue)\n  } \n\n  handleTabClick(event) {\n    const meetingId = event.target.dataset.meetingId\n    this.activateTab(meetingId)\n  }\n\n  hideAll() {\n    this.panelTargets.forEach((panel) => {panel.classList.add('hidden')})\n    this.tabTargets.forEach((tab) => {\n      tab.classList.remove(...this.activeClasses)\n      tab.dataset.focus = \"false\"\n    })\n  }\n\n  updateTabCount() {\n    this.tabCount = this.tabTargets.length\n    this.dispatch('tab-count-changed', {detail: {tabCount: this.tabCount, mainRoomId: this.mainRoomIdValue}, bubbles: true, prefix: false})\n  }\n\n  dispatchTabFocusedEvent(meetingId, mainRoomId) {\n    const tab = this.#tabForMeeting(meetingId)\n    const otherParticipantUserId = tab.dataset.otherParticipantUserId\n    const otherParticipantRole = tab.dataset.otherParticipantRole\n    this.dispatch('tab-focused', {detail: {meetingId: meetingId, mainRoomId: mainRoomId, otherParticipantUserId: otherParticipantUserId, otherParticipantRole: otherParticipantRole}, bubbles: true, prefix: false })\n  }\n\n  selectInitialTab() {\n    this.loadingIndicatorTarget.classList.add('hidden')\n    const tab = this.tabTargets.find(tab => tab.dataset.focus === \"true\") || this.#tabForUrlParam()\n    if (tab) {\n      this.dispatchTabFocusedEvent(tab.dataset.meetingId, tab.dataset.mainRoomId)\n      this.activateTab(tab.dataset.meetingId)\n    } else {\n      this.activateTab(this.tabTargets[0].dataset.meetingId, false)\n    }\n  }\n\n  endChat(event){\n    const tab = event.target.closest('tab')\n    if (!tab) return\n    \n    const meetingId = tab.dataset.meetingId\n    const otherParticipantUserId = tab.dataset.otherParticipantUserId\n    const otherParticipantRole = tab.dataset.otherParticipantRole\n    const panel = this.#panelForMeeting(meetingId)\n    const otherTab = tab.nextElementSibling || tab.previousElementSibling\n      \n    this.dispatch('tab-closed', {\n      detail: {\n        meetingId,\n        mainRoomId: this.mainRoomIdValue,\n        otherParticipantUserId,\n        otherParticipantRole\n      }, \n      bubbles: true, \n      prefix: false \n    })\n    \n    if (panel) panel.remove()\n    tab.remove() // No need for condition here since we checked above\n    this.updateTabCount()\n    if (otherTab) {this.activateTab(otherTab.dataset.meetingId)}\n    event.stopPropagation()\n  }\n\n  #tabForUrlParam() {\n    const urlParams = new URLSearchParams(window.location.search);\n    if (urlParams.has('chat_id')) {\n      const chatId = urlParams.get('chat_id')\n      return this.#tabForMeeting(chatId)\n    }\n  }\n\n  #tabForMeeting(meetingId) {\n    return this.tabTargets.find(tab => tab.dataset.meetingId == meetingId)\n  }\n  #panelForMeeting(meetingId) {\n    return this.panelTargets.find(panel => panel.dataset.meetingId == meetingId)\n  }\n\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"table\", \"record\", \"bulkActionBar\", \"selectedRecordCount\"]\n  selectedRecords = new Set()\n\n  connect() {\n\n  }\n\n  selectRecord(event) {\n    const tr = event.target.closest('tr')\n    const id = tr.dataset.id\n    if(!id) {\n      throw \"You must set 'tr[data-id]' property to use multiple select!\"\n    }\n\n    if(this.selectedRecords.has(id)) {\n      this.selectedRecords.delete(id)\n      tr.classList.remove('bg-primary-3')\n      tr.querySelector('input[type=\"checkbox\"]:first-of-type').checked = false\n    } else {\n      this.selectedRecords.add(id)\n      tr.classList.add('bg-primary-3')\n      tr.querySelector('input[type=\"checkbox\"]:first-of-type').checked = true\n    }\n\n    if(this.selectedRecords.size) {\n      this.bulkActionBarTarget.classList.remove('hidden')\n      this.selectedRecordCountTarget.innerText = `${this.selectedRecords.size} Records Selected`\n    } else {\n      this.bulkActionBarTarget.classList.add('hidden')\n    }\n    event.stopPropagation()\n  }\n\n  bulkAction(event) {\n    if(!event.target) return\n\n    const confirmMessage = event.target.dataset.confirm ?\n      event.target.dataset.confirm.replace(\"%d\", this.selectedRecords.size) :\n      `Are you sure you want to ${event.target.dataset.name.toLowerCase()} ${this.selectedRecords.size} records?`\n\n    if (confirm(confirmMessage)) {\n      if(event.target.dataset.turboFrame) {\n        if (event.target.dataset.method.toUpperCase() === 'GET') {\n          this.getWithTurboFrame(event)\n        }\n      } else {\n        const form = document.createElement('form')\n        form.method = 'POST'\n        form.action = event.target.dataset.url\n        form.classList.add('hidden')\n        form.innerHTML = Array.from(this.selectedRecords).map(id => `<input type=\"hidden\" multiple=\"multiple\" name=\"selected_ids[]\" value=\"${id}\">`)\n        form.innerHTML += `<input type=\"hidden\" name=\"authenticity_token\" value=${document.querySelector('meta[name=csrf-token]').content}>`\n        event.target.parentElement.appendChild(form)\n        form.requestSubmit()\n      }\n    }\n  }\n\n  openTableRowLink(e) {\n    if(e.target.closest('td').dataset.preventClick) {\n      return\n    }\n    e.target.closest('td').getElementsByTagName('a')[0]?.click();\n  }\n\n  async getWithTurboFrame(event) {\n    const url = new URL(`${window.location.origin}${event.target.dataset.url}`)\n    this.selectedRecords.forEach(id => url.searchParams.append('selected_ids[]', id))\n    document.getElementById(event.target.dataset.turboFrame).src = url\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport * as Turbo from \"@hotwired/turbo\"\nimport { state } from \"../state\"\n\nexport default class extends Controller {\n  static targets = [\n    'messages',\n    'form',\n    'messageInput',\n    'unreadCount',\n    'muteButton',\n    'unmuteButton',\n    'message',\n    'broadcastButton', // Add target for broadcast buttons\n    'broadcastControls', // wrapper around the join-broadcast toolbar (hidden while own studio is open)\n    'loadingOlderMessages',\n    'scrollToBottomButton',\n    'noOlderMessages',\n  ]\n\n  static values = {\n    currentUserId: String,\n    muted: Boolean,\n    unreadCount: Number,\n    meetingId: String,\n    rateLimitCount: Number,\n    rateLimitSeconds: Number,\n    causeBlink: Boolean,\n    mainRoomId: String,\n    broadcasting: { type: Boolean, default: false },\n    autoScroll: { type: Boolean, default: true },\n    mutedValueBeforeCall: { type: Boolean, default: false },\n    typingIndicatorUrl: String,\n    lastMessageTimestamp: { type: Number, default: 0 },\n  }\n\n  connect() {\n    this.messageCount = 0;\n    this.lastTypingAt = 0;\n    this.notificationSound = new Audio('https://assets.recruitmilitary.com/mp3/new-message.mp3');\n    this.scrollToBottom();\n    this.setupScrollDetection();\n\n    this.observeMessagesVisibility();\n\n    this.initializeLastMessageTimestamp();\n\n    // The join-broadcast buttons are disabled only while THIS rep has their own broadcast studio open\n    // (broadcast:studioOpened / studioClosed, below). We deliberately do NOT disable them just because\n    // a broadcast is being received \u2014 multi-broadcast lets a viewer join an already-live room.\n    this.boundHandleBroadcastStateChanged = this.handleBroadcastStateChanged.bind(this);\n    document.addEventListener('broadcast:stateChanged', this.boundHandleBroadcastStateChanged);\n    this.boundHandleStudioOpened = this.handleStudioOpened.bind(this);\n    document.addEventListener('broadcast:studioOpened', this.boundHandleStudioOpened);\n    this.boundHandleStudioClosed = this.handleStudioClosed.bind(this);\n    document.addEventListener('broadcast:studioClosed', this.boundHandleStudioClosed);\n    this.boundHandleCallStarted = this.handleCallStarted.bind(this);\n    document.addEventListener('videoChat:started', this.boundHandleCallStarted);\n    this.boundHandleCallEnded = this.handleCallEnded.bind(this);\n    document.addEventListener('videoChat:ended', this.boundHandleCallEnded);\n\n    // Don't bind catchUpMessages directly: as a listener it would receive the CustomEvent as\n    // stalePanel and the failure path would try to set dataset on a non-element.\n    this.boundCatchUp = () => this.catchUpMessages();\n    document.addEventListener('cable:catch-up', this.boundCatchUp);\n    this.boundCatchUpStale = this.handleStalePanelActivated.bind(this);\n    document.addEventListener('panel:activated-stale', this.boundCatchUpStale);\n  }\n\n  disconnect() {\n    if (this.notificationSound) {\n      this.notificationSound.pause();\n      this.notificationSound.currentTime = 0;\n    }\n\n    document.removeEventListener('broadcast:stateChanged', this.boundHandleBroadcastStateChanged);\n    document.removeEventListener('broadcast:studioOpened', this.boundHandleStudioOpened);\n    document.removeEventListener('broadcast:studioClosed', this.boundHandleStudioClosed);\n    document.removeEventListener('videoChat:started', this.boundHandleCallStarted);\n    document.removeEventListener('videoChat:ended', this.boundHandleCallEnded);\n    document.removeEventListener('cable:catch-up', this.boundCatchUp);\n    document.removeEventListener('panel:activated-stale', this.boundCatchUpStale);\n\n    if (this.scrollContainer) {\n      this.scrollContainer.removeEventListener('scroll', this.handleScroll);\n    }\n  }\n\n  initializeLastMessageTimestamp() {\n    const timeElements = this.messagesTarget.querySelectorAll('time[datetime]');\n    timeElements.forEach(el => {\n      const ts = new Date(el.getAttribute('datetime')).getTime();\n      if (ts > this.lastMessageTimestampValue) {\n        this.lastMessageTimestampValue = ts;\n      }\n    });\n  }\n\n  updateLastMessageTimestamp(element) {\n    const timeEl = element.querySelector('time[datetime]');\n    if (timeEl) {\n      const ts = new Date(timeEl.getAttribute('datetime')).getTime();\n      if (ts > this.lastMessageTimestampValue) {\n        this.lastMessageTimestampValue = ts;\n      }\n    }\n  }\n\n  handleStalePanelActivated(event) {\n    // Only catch up if this controller's element is inside the activated panel. event.target is the\n    // panel that carried the stale flag, so pass it along to re-flag it if the catch-up fails.\n    if (event.target.contains(this.element)) {\n      this.catchUpMessages(event.target);\n    }\n  }\n\n  async catchUpMessages(stalePanel = null) {\n    if (!this.isActivePanel()) return;\n\n    const url = `/meetings/${this.meetingIdValue}/messages?after=${this.lastMessageTimestampValue}`;\n    const request = new FetchRequest('get', url, { responseKind: 'turbo-stream' });\n\n    let response;\n    try {\n      response = await request.perform();\n    } catch (error) {\n      console.warn('Chat catch-up request failed', error);\n      // The activating controller already cleared the stale flag before dispatching, so a silent\n      // failure would leave the panel permanently missing the messages sent during the outage.\n      // Re-flag it so the next activation retries.\n      if (stalePanel) stalePanel.dataset.stale = 'true';\n      return;\n    }\n\n    if (!response.ok) {\n      if (stalePanel) stalePanel.dataset.stale = 'true';\n      return;\n    }\n\n    // Too many messages were missed to catch up incrementally without dropping the oldest;\n    // reload for a complete, correctly ordered state.\n    if (response.headers.get('X-Catch-Up-Reload') === '1') {\n      Turbo.visit(window.location.href, { action: 'replace' });\n    }\n  }\n\n  isActivePanel() {\n    let el = this.element;\n    while (el) {\n      if (el.classList.contains('hidden')) return false;\n      const style = window.getComputedStyle(el);\n      if (style.display === 'none') return false;\n      el = el.parentElement;\n    }\n    return true;\n  }\n\n  setupScrollDetection() {\n    this.scrollContainer = this.messagesTarget.parentNode;\n    this.handleScroll = this.detectUserScroll.bind(this);\n    this.scrollContainer.addEventListener('scroll', this.handleScroll);\n  }\n\n  detectUserScroll() {\n    const { scrollTop, scrollHeight, clientHeight } = this.scrollContainer;\n    const isAtBottom = Math.abs(scrollHeight - scrollTop - clientHeight) < 10;\n\n    // Only update autoScrollValue if user has explicitly scrolled away from bottom\n    if (!isAtBottom && this.autoScrollValue) {\n      this.autoScrollValue = false;\n      this.showScrollToBottomButton();\n    } else if (isAtBottom){\n      this.hideScrollToBottomButton();\n      if (!this.autoScrollValue) this.autoScrollValue = true;\n    }\n  }\n\n  scrollToBottom() {\n    const container = this.messagesTarget.parentNode;\n    container.scrollTop = container.scrollHeight;\n  }\n\n  // This method is called when new messages are added via Turbo Stream\n  added(event) {\n    // Only auto-scroll if we're already at the bottom or it's the user's own message\n    const newMessage = event.target.lastElementChild;\n    const isOwnMessage = newMessage && newMessage.dataset.userId === this.currentUserIdValue;\n\n    if (this.autoScrollValue || isOwnMessage) {\n      this.scrollToBottom();\n    }\n  }\n\n  observeMessagesVisibility() {\n    const options = {threshold: 0}\n    const callback = (entries, observer) => {\n      entries.forEach((entry) => {\n        this.scrollToBottom()\n        this.resetUnreadCount()\n      });\n    };\n\n    const observer = new IntersectionObserver(callback, options)\n    observer.observe(this.messagesTarget)\n  }\n\n  messageTargetConnected(element) {\n    // Client-side dedup: if this message already exists in the DOM, remove the duplicate\n    if (element.id && document.querySelectorAll(`#${CSS.escape(element.id)}`).length > 1) {\n      element.remove();\n      return;\n    }\n\n    this.updateLastMessageTimestamp(element);\n\n    // if it is historical, then we know we have the right one.\n    if (element.dataset.historical == \"true\") {\n      element.firstElementChild.classList.remove('hidden')\n      return\n    }\n\n    // Action/log messages don't have poster elements - just scroll to bottom\n    const selfPoster = element.querySelector(\"[data-poster='self']\");\n    const otherPoster = element.querySelector(\"[data-poster='other']\");\n    if (!selfPoster && !otherPoster) {\n      if (this.autoScrollValue) {\n        this.scrollToBottom();\n      }\n      this.updateNoOlderMessagesVisibility();\n      return;\n    }\n\n    if (element.dataset.userId === this.currentUserIdValue) {\n      selfPoster.classList.remove('hidden');\n      otherPoster.remove();\n      // Always scroll to bottom for own messages\n      this.scrollToBottom();\n    } else if (element.dataset.userId !== this.currentUserIdValue) {\n      otherPoster.classList.remove('hidden');\n      selfPoster.remove();\n      this.audioNotification();\n      this.maybeIncrementUnreadCount();\n      this.maybeDispatchBlinkEvent();\n      this.popOldMessages();\n      this.updateScrollToBottomButton();\n\n      // Only scroll to bottom for others' messages if auto-scroll is enabled\n      if (this.autoScrollValue) {\n        this.scrollToBottom();\n      }\n    }\n    this.updateNoOlderMessagesVisibility();\n  }\n\n  messageTargetDisconnected(element) {\n    this.updateNoOlderMessagesVisibility();\n  }\n\n  startCall(element){\n    const trigger = new CustomEvent(\"start-call\");\n    window.dispatchEvent(trigger);\n  }\n\n  popOldMessages() {\n    // don't pop old messages if we have loaded old messages\n    if (this.oldMessagesLoaded) return;\n\n    const messages = this.messagesTarget.querySelectorAll('[data-user-id]');\n    if (messages.length > 150) {\n      messages[0].remove(); // remove the oldest message\n    }\n  }\n\n  maybeIncrementUnreadCount() {\n    if (!this.isVisible()) {\n      this.unreadCountValue += 1;\n      this.unreadCountTarget.innerHTML = this.unreadCountValue;\n      document.querySelectorAll(`[data-unread-count-value='${this.meetingIdValue}']`).forEach(node => { node.innerHTML = this.unreadCountValue });\n      document.querySelectorAll(`[data-unread-count-value='${this.meetingIdValue}']`).forEach(node => { node.classList.remove('hidden') });\n    }\n  }\n\n  resetUnreadCount() {\n    this.unreadCountValue = 0;\n    setTimeout(() => {\n      this.unreadCountTarget.innerHTML = this.unreadCountValue\n      document.querySelectorAll(`[data-unread-count-value='${this.meetingIdValue}']`).forEach(node => { node.innerHTML = this.unreadCountValue })\n      document.querySelectorAll(`[data-unread-count-value='${this.meetingIdValue}']`).forEach(node => { node.classList.add('hidden') })\n    }, 1000)\n  }\n\n  toggleMute() {\n    this.mutedValue = !this.mutedValue\n    this.updateMuteButton()\n  }\n\n  updateMuteButton() {\n    if (this.mutedValue) {\n      this.muteButtonTarget.classList.add('hidden');\n      this.unmuteButtonTarget.classList.remove('hidden');\n    } else {\n      this.muteButtonTarget.classList.remove('hidden');\n      this.unmuteButtonTarget.classList.add('hidden');\n    }\n  }\n\n  audioNotification() {\n    if (this.mutedValue) return;\n    this.notificationSound.play()\n  }\n\n  // if the chat component was initiated with blinking enabled, dispatch a custom event\n  maybeDispatchBlinkEvent() {\n    if (!this.causeBlinkValue) return;\n    this.dispatch('blink-notification', {detail: {meetingId: this.meetingIdValue, mainRoomId: this.mainRoomIdValue}, bubbles: true, prefix: false})\n  }\n\n  async submit(event) {\n    event.preventDefault();\n    // return early is the message is blank\n    if (this.messageInputTarget.value.trim() === \"\") return;\n\n    if(this.messageCount >= this.rateLimitCountValue) {\n      alert('You are sending messages too quickly. Please wait.');\n      return;\n    }\n\n    this.messageCount++;\n    setTimeout(() => {\n      this.messageCount = Math.max(0, this.messageCount - 1);\n    }, this.rateLimitSecondsValue * 1000);\n\n    // Enable auto-scroll when user sends a message\n    this.autoScrollValue = true;\n\n    this.sendToServer();\n  }\n\n  onInput(event) {\n    if (event.target.value.trim() === \"\") return\n\n    const now = Date.now()\n    if (now - this.lastTypingAt >= 5000) {\n      this.sendTypingIndicator()\n      this.lastTypingAt = now\n    }\n  }\n\n  async sendTypingIndicator() {\n    const request = new FetchRequest('get', this.typingIndicatorUrlValue, {responseKind: 'turbo-stream'});\n    await request.perform();\n  }\n\n  async sendToServer() {\n    const form = event.target.closest('form')\n    const formData = new FormData(form)\n    const request = new FetchRequest('post', form.action, { responseKind: 'turbo-stream', body: formData })\n    this.messageInputTarget.value = \"\";\n    this.messageInputTarget.form.querySelectorAll('input').forEach(input => input.value = \"\")\n    return await request.perform()\n  }\n\n  isVisible() {\n    const rect = this.messagesTarget.getBoundingClientRect();\n    return (\n      // dimensions\n      rect.width > 0 &&\n      rect.height > 0 &&\n      // in viewport\n      rect.top < (window.innerHeight || document.documentElement.clientHeight) &&\n      rect.left < (window.innerWidth || document.documentElement.clientWidth) &&\n      rect.bottom > 0 &&\n      rect.right > 0 &&\n      // not hidden by CSS\n      window.getComputedStyle(this.messagesTarget).display !== 'none' &&\n      window.getComputedStyle(this.messagesTarget).visibility !== 'hidden'\n    );\n  }\n\n  handleBroadcastStateChanged(event) {\n    if (event.detail.meetingId === this.meetingIdValue) {\n      this.broadcastingValue = event.detail.newState !== 'idle'\n      this.updateBroadcastButtons();\n    }\n  }\n\n  // This rep opened their own broadcast studio (setup box or live) \u2014 hide the whole join-broadcast\n  // toolbar so they can't kick off a second broadcast. Hiding the persistent wrapper (rather than the\n  // buttons) survives the Turbo re-render that swaps \"start\" for \"join in progress\" when the room goes\n  // live. Fired from the studio's connect, i.e. before they even hit Start.\n  handleStudioOpened(event) {\n    if (event.detail.meetingId !== this.meetingIdValue) return;\n    this.broadcastingValue = true;\n    this.setBroadcastControlsHidden(true);\n    this.updateBroadcastButtons();\n  }\n\n  // Studio closed (cancelled or stopped) \u2014 restore the toolbar.\n  handleStudioClosed(event) {\n    if (event.detail.meetingId !== this.meetingIdValue) return;\n    this.broadcastingValue = false;\n    this.setBroadcastControlsHidden(false);\n    this.updateBroadcastButtons();\n  }\n\n  setBroadcastControlsHidden(hidden) {\n    if (this.hasBroadcastControlsTarget) {\n      this.broadcastControlsTarget.classList.toggle('hidden', hidden);\n    }\n  }\n  \n  // Apply the current state to every broadcast button (both the \"start\" toolbar and, once the room is\n  // live, the green \"join in progress\" toolbar \u2014 they share this target).\n  updateBroadcastButtons() {\n    if (!this.hasBroadcastButtonTarget) return;\n    this.broadcastButtonTargets.forEach(button => this.applyBroadcastButtonState(button));\n  }\n\n  // Re-apply state whenever a broadcast button (re-)appears. The controls toolbar is re-rendered via\n  // Turbo broadcast when broadcasting_user_ids changes \u2014 e.g. the \"start\" buttons are swapped for the\n  // \"join in progress\" buttons the moment the room goes live \u2014 so the freshly-inserted buttons must\n  // pick up the current disabled state, not reset to enabled.\n  broadcastButtonTargetConnected(button) {\n    this.applyBroadcastButtonState(button);\n  }\n\n  applyBroadcastButtonState(button) {\n    if (this.broadcastingValue) {\n      button.setAttribute('disabled', 'disabled');\n      button.classList.add('opacity-50', 'cursor-not-allowed', 'pointer-events-none');\n    } else {\n      button.removeAttribute('disabled');\n      button.classList.remove('opacity-50', 'cursor-not-allowed', 'pointer-events-none');\n    }\n  }\n\n  loadingOlderMessagesTargetConnected(element) {\n    this.observeLoadingOlderMessagesVisibility();\n  }\n\n  observeLoadingOlderMessagesVisibility() {\n    const options = {threshold: 1}\n    const callback = (entries, observer) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          setTimeout(() => {\n            if (this.loadingOlderMessagesTarget.getBoundingClientRect().top > 0) {\n              this.loadOlderMessages();\n            }\n          }, 500);\n        }\n      });\n    };\n    const observer = new IntersectionObserver(callback, options)\n    observer.observe(this.loadingOlderMessagesTarget)\n  }\n\n  async loadOlderMessages(){\n    this.oldMessagesLoaded = true;\n    const lastMessage = this.loadingOlderMessagesTarget.nextElementSibling;\n    const request = new FetchRequest('get', this.loadingOlderMessagesTarget.dataset.url, { responseKind: 'turbo-stream' });\n    await request.perform();\n    this.loadingOlderMessagesTarget.remove();\n    this.messagesTarget.parentNode.scrollTop = lastMessage.offsetHeight;\n  }\n\n  handleCallStarted() {\n    this.mutedValueBeforeCall = this.mutedValue\n    this.mutedValue = true\n    this.updateMuteButton()\n    state.onCall = true\n  }\n\n  handleCallEnded() {\n    this.mutedValue = this.mutedValueBeforeCall\n    this.updateMuteButton()\n    state.onCall = false\n  }\n\n  showScrollToBottomButton() {\n    this.scrollToBottomButtonTarget.classList.remove('opacity-0');\n    this.scrollToBottomButtonTarget.classList.add('opacity-80');\n    this.scrollToBottomButtonTarget.style.height = '50px';\n  }\n\n  hideScrollToBottomButton() {\n    this.scrollToBottomButtonTarget.classList.add('opacity-0');\n    this.scrollToBottomButtonTarget.classList.remove('opacity-80');\n    this.scrollToBottomButtonTarget.style.height = '0';\n    this.updateScrollToBottomButton()\n  }\n\n  updateScrollToBottomButton() {\n    const container = this.messagesTarget.parentNode;\n    const isAtBottom = Math.abs(container.scrollHeight - container.scrollTop - container.clientHeight) < 10;\n\n    if (isAtBottom) {\n      this.scrollToBottomButtonTarget.innerHTML = \"Scroll to bottom\";\n    } else {\n      this.scrollToBottomButtonTarget.innerHTML = \"Scroll to new messages\";\n    }\n  }\n\n  noOlderMessagesTargetConnected(element) {\n    const options = {threshold: 1}\n    const callback = (entries, observer) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          this.updateNoOlderMessagesVisibility();\n        }\n      });\n    };\n    const observer = new IntersectionObserver(callback, options)\n    observer.observe(this.noOlderMessagesTarget)\n  }\n\n  updateNoOlderMessagesVisibility() {\n    if (this.hasNoOlderMessagesTarget) {\n      if (this.oldMessagesLoaded) {\n        this.noOlderMessagesTarget.classList.remove('hidden')\n        this.noOlderMessagesTarget.classList.add('opacity-100');\n      } else {\n        this.noOlderMessagesTarget.classList.add('hidden')\n      }\n    }\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport DateTimeFormatter from \"../utils/date_time_formatter\"\n\nexport default class extends Controller {\n  static targets = ['output']\n\n  connect() {\n    this.updateTime();\n    this.interval = setInterval(() => { this.updateTime() }, 6000);\n  }\n\n  disconnect() {\n    clearInterval(this.interval);\n  }\n\n  updateTime() {\n    const currentDate = new Date();\n    this.outputTarget.textContent = DateTimeFormatter.dateWithTimeZone(currentDate)\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Turbo } from \"@hotwired/turbo-rails\"\n\nexport default class extends Controller {\n  static targets = ['container', 'actual']\n\n  submit(event) {\n    if (this.actualTarget.value == \"true\") {\n      this.actualTarget.value = \"false\"\n    } else {\n      this.actualTarget.value = \"true\"\n    }\n    this.containerTarget.requestSubmit()\n  }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  connect() {\n    const turboFrame = this.data.get(\"target\") ? document.getElementById(this.data.get(\"target\")) : this.element.closest(\"turbo-frame\")\n    const url = this.data.get(\"url\")\n    if (url) {\n      turboFrame?.setAttribute(\"src\", url)\n    } else {\n      turboFrame?.reload()\n    }\n    this.element.remove()\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\n\nexport default class extends Controller {\n\n  sendGETRequest(event) {\n    event.preventDefault()\n    const request = new FetchRequest('GET', event.target.closest('a').href, { responseKind: 'turbo-stream' });\n    request.perform();\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\nimport { FetchRequest } from '@rails/request.js'\nimport { state } from \"../state\"\n\nexport default class extends Controller {\n  static targets = [\n    'indicator',\n    'message',\n    'event',\n    'newChatMessage',\n  ]\n  \n  static values = { \n    currentUserId: String,\n    showNames: { type: Boolean, default: true },\n    maxNames: { type: Number, default: 2 },\n  }\n\n  connect() {\n    this.typingUsers = new Map()\n  }\n\n  disconnect() {\n    this.clearAllTimeouts()\n  }\n\n  eventTargetConnected(el) {\n    const userId = el.dataset.userId\n    const userName = el.dataset.userName\n\n    this.addTypingUser(userId, userName)\n    el.remove()\n  }\n\n  newChatMessageTargetConnected(el) {\n    const userId = el.dataset.userId\n    \n    this.removeTypingUser(userId)\n  }\n\n  addTypingUser(userId, userName) {\n    if (userId === this.currentUserIdValue) {\n      return\n    }\n\n    if (this.typingUsers.has(userId)) {\n      clearTimeout(this.typingUsers.get(userId).timeoutId)\n    }\n\n    const timeoutId = setTimeout(() => {\n      this.typingUsers.delete(userId)\n      this.updateIndicator()\n    }, 8000)\n\n    this.typingUsers.set(userId, { name: userName, timeoutId })\n    this.updateIndicator()\n  }\n\n  removeTypingUser(userId) {\n    if (this.typingUsers.has(userId)) {\n      clearTimeout(this.typingUsers.get(userId).timeoutId)\n      this.typingUsers.delete(userId)\n      this.updateIndicator()\n    }\n  }\n\n  updateIndicator() {\n    const users = Array.from(this.typingUsers.values()).map(u => u.name)\n    const count = users.length\n\n    if (count === 0) {\n      this.hideIndicator()\n      return\n    }\n\n    this.showIndicator()\n\n    if (this.showNamesValue) {\n      const text = this.formatNames(users)\n      this.messageTarget.textContent = `${text} ${count === 1 ? \"is\" : \"are\"} typing...`\n    } else {\n      this.messageTarget.textContent = count === 1\n        ? `${users[0]} is typing...`\n        : `Multiple users are typing...`\n    }\n  }\n\n  showIndicator() {\n    this.indicatorTarget.classList.remove('opacity-0');\n    this.indicatorTarget.classList.add('opacity-100', 'p-1', 'ml-1');\n    this.indicatorTarget.style.height = 'auto';\n  }\n\n  hideIndicator() {\n    this.indicatorTarget.classList.remove('opacity-100', 'p-1', 'ml-1');\n    this.indicatorTarget.classList.add('opacity-0');\n    this.indicatorTarget.style.height = '0';\n    this.messageTarget.textContent = '';\n  }\n\n  formatNames(names) {\n    if (names.length <= 1) return names[0]\n\n    const maxToShow = Math.min(names.length, this.maxNamesValue)\n    const visibleNames = names.slice(0, maxToShow)\n    \n    const lastName = visibleNames.pop()\n    let formattedNames = visibleNames.join(\", \") + ` & ${lastName}`\n    \n    if (names.length > this.maxNamesValue) {\n      formattedNames = formattedNames.replace(' &', ',')\n      return formattedNames + ` & ${names.length - this.maxNamesValue} more`\n    }\n    \n    return formattedNames\n  }\n\n  clearAllTimeouts() {\n    for (const { timeoutId } of this.typingUsers.values()) {\n      clearTimeout(timeoutId)\n    }\n    this.typingUsers.clear()\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['results'];\n  static values = {url: String}\n\n  connect() {}\n\n  search(event) {\n    this.resultsTarget.src = this.urlValue.replace(/%s/g, encodeURIComponent(event.target.value))\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = ['videoContainer', 'subscriber', 'publisher', 'screenPublisher', 'share', 'cancelShare'];\n  static values = { apiKey: String, sessionId: String, token: String, audioOnly: Boolean, meetingId: String }\n \n\n  connect() {\n    this.subscribers = []\n    this.hasNotifiedExit = false\n    this.session = OT.initSession(this.apiKeyValue, this.sessionIdValue);\n\n    // Subscribe to a newly created stream\n    var subscriberTarget = this.subscriberTarget\n    this.session.on('streamCreated', this.streamCreated.bind(this) );\n\n\n    // we want to add a class to the subscriber element when the stream is destroyed\n    this.session.on('streamDestroyed', function(event) {\n      const vids = [...subscriberTarget.children]\n      vids.forEach((element) => {\n        element.classList.remove('hidden'); //we are doing this becuase we hide the video element when screeen sharing is happening.\n      })\n    });\n\n    this.start()\n  }\n\n  disconnect() {\n    this.cleanup()\n  }\n\n  cleanup() {\n    if (this.publisher) {\n      this.publisher.destroy()\n    }\n    if (this.session) {\n      for (var i = 0; i < this.subscribers.length; i++) {\n        var subscriber = this.subscribers[i]\n        this.session.unsubscribe(subscriber)\n      }\n      this.session.disconnect()\n    }\n    this.subscribers = []\n    this.notifyServerOfExit()\n    document.dispatchEvent(new CustomEvent('videoChat:ended'))\n  }\n\n  notifyServerOfExit() {\n    if (!this.meetingIdValue || this.hasNotifiedExit) return\n    this.hasNotifiedExit = true\n\n    const csrfToken = document.querySelector('meta[name=\"csrf-token\"]')?.content\n    navigator.sendBeacon(\n      `/meetings/${this.meetingIdValue}/exit_video_chat`,\n      new Blob([JSON.stringify({ authenticity_token: csrfToken })], { type: 'application/json' })\n    )\n  }\n\n  streamCreated(event) {  \n    var subscriber = this.session.subscribe(event.stream, 'subscriber', {\n      insertMode: 'append',\n      width: '100%',\n      height: '100%',\n    }, this.handleCallback.bind(this))\n\n    this.subscribers.push(subscriber)    \n    this.cleanupExtraVideos(this.subscriberTarget)\n    this.setVisibility(subscriber.id)\n    this.initializeSubscriber(subscriber)\n  }\n\n  initializeSubscriber(subscriber) {\n    // After subscriber is created, set the audio output device\n    subscriber.on('videoElementCreated', (event) => {\n      const preferredAudioOutput = localStorage.getItem('preferredAudioOutput')\n      if (preferredAudioOutput && 'setSinkId' in HTMLMediaElement.prototype) {\n        event.element.setSinkId(preferredAudioOutput).catch(err => {\n          console.warn(\"Error setting audio output:\", err)\n        })\n      }\n    })\n  }\n\n  cleanupExtraVideos(subscriberTarget) {\n    const subscriberIds = this.subscribers.map((subscriber) => subscriber.id)\n    const vids = [...this.subscriberTarget.children]\n\n    //remove any vids whose ids are not in the subscriberIds array\n    vids.forEach((element) => {\n      if (!subscriberIds.includes(element.id)) {\n        subscriberTarget.removeChild(element)\n      }\n    })\n  }\n\n  setVisibility(id) {\n    const vids = [...this.subscriberTarget.children]\n  \n    vids.find((element) => {\n      if (element.id === id) {\n        element.classList.remove('hidden');\n      }\n    })\n\n    // hide the rest\n    vids.forEach((element) => {\n      if (element.id !== id) {\n        element.classList.add('hidden');\n      }\n    })\n  }\n\n\n  initiateCall() {\n    // Get saved device preferences from device tester\n    const preferredVideoDevice = this.audioOnlyValue ? null : localStorage.getItem('preferredVideoDevice');\n    const preferredAudioDevice = localStorage.getItem('preferredAudioDevice');\n    \n    // Set up publisher options with user preferences\n    const publisherOptions = {\n      insertMode: 'append',\n      width: '100%',\n      height: '100%',\n      style: {buttonDisplayMode: 'off'}\n    };\n    \n    // Apply video device preference if available\n    if (preferredVideoDevice) {\n      publisherOptions.videoSource = {\n        deviceId: {\n          exact: preferredVideoDevice\n        }\n      };\n    } else if (this.audioOnlyValue) {\n      publisherOptions.videoSource = null;\n    }\n    \n    // Apply audio device preference if available\n    if (preferredAudioDevice) {\n      publisherOptions.audioSource = {\n        deviceId: {\n          exact: preferredAudioDevice\n        }\n      };\n    }\n\n    // Create publisher with preferences\n    this.publisher = OT.initPublisher('publisher', publisherOptions, (error) => {\n      if (error) {\n        console.error(\"Error initializing publisher with preferred devices\", error);\n        // Fall back to default devices\n        this.publisher = OT.initPublisher('publisher', {\n          insertMode: 'append',\n          width: '100%',\n          height: '100%',\n          style: {buttonDisplayMode: 'off'}\n        }, this.handleCallback.bind(this));\n      }\n    });\n\n    // Connect to the session\n    this.session.connect(this.tokenValue, this.publisherStreamConnected.bind(this));\n  }\n\n  publisherStreamConnected(error) {\n    if (error) {\n      \n    } else {\n      this.session.publish(this.publisher, this.handleCallback.bind(this))\n    }\n  }\n\n  start() {\n    this.videoContainerTarget.classList.remove('hidden')\n    this.initiateCall()\n    document.dispatchEvent(new CustomEvent('videoChat:started'))\n  }\n\n  end(event) {\n    this.videoContainerTarget.classList.add('hidden')\n    this.subscriberTarget.innerHTML = ''\n    this.publisherTarget.innerHTML = ''\n    this.publisher.destroy()\n    for (var i = 0; i < this.subscribers.length; i++) {\n      var subscriber = this.subscribers[i]\n      this.session.unsubscribe(subscriber)\n    }\n    this.session.disconnect()\n    this.subscribers = []\n    this.notifyServerOfExit()\n    document.dispatchEvent(new CustomEvent('videoChat:ended'))\n  }\n\n  shareScreen(event) {\n    this.screenSharePublisher = null\n\n    OT.checkScreenSharingCapability(response => {\n      if(!response.supported || response.extensionRegistered === false) {\n        alert(\"Screen sharing not supported\")\n      } else if (response.extensionInstalled === false) {\n        alert(\"Browser requires extension\")\n      } else {\n        this.screenSharePublisher = OT.initPublisher(\n          \"screen-publisher\",\n          {\n            insertMode: \"append\",\n            width: \"100%\",\n            height: \"100%\",\n            videoSource: \"screen\",\n            publishAudio: true\n          }, this.handleScreenPublished.bind(this)            \n        )        \n      }\n    })    \n  }\n\n  handleScreenPublished(error){\n    if (!error) {\n      this.session.publish(this.screenSharePublisher, this.handleCallback.bind(this))\n    }    \n    this.screenSharePublisher.on('mediaStopped', this.cancelShare.bind(this))\n    this.shareTarget.classList.add('hidden')\n    this.cancelShareTarget.classList.remove('hidden')\n  }\n\n  cancelShare(_event) {\n    this.session.unpublish(this.screenSharePublisher)\n    this.screenSharePublisher.destroy()\n    this.shareTarget.classList.remove('hidden')\n    this.cancelShareTarget.classList.add('hidden')\n  }\n\n  blur(event) {\n    this.publisher.applyVideoFilter({\n      type: 'backgroundBlur',\n      blurStrength: 'high'  // You can set the blur strength to 'low', 'medium', or 'high'\n    });\n  }\n\n  unblur(event) {\n    this.publisher.clearVideoFilter();\n  }\n\n  mute(event) {\n    this.publisher.publishAudio(false);\n  }\n\n  unmute(event) {\n    this.publisher.publishAudio(true);\n  }\n\n  videoOn(event) {\n    this.publisher.publishVideo(true);\n  }\n\n  videoOff(event) {\n    this.publisher.publishVideo(false);\n  }\n\n  muteIncoming(event) {\n    this.subscriber.subscribeToAudio(false);\n  }\n\n  unmuteIncoming(event) {\n    this.subscriber.subscribeToAudio(true);\n  }\n  \n  handleCallback(error) {\n    if (error) {\n      alert(error.message);\n    }\n  }\n}", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n  static targets = [\"eventTypeSelect\", \"content\"]\n\n  connect() {\n    this.webinarTab = this.findWebinarTab()\n    this.toggleContent()\n  }\n\n  findWebinarTab() {\n    return Array.from(this.element.querySelectorAll('button[x-tabs\\\\:tab]')).find(\n      button => button.textContent.trim() === 'Webinar Content'\n    )\n  }\n\n  toggleContent(event) {\n    const isWebinarSelected = this.eventTypeSelectTarget.value === 'Webinar'\n\n    // Toggle content visibility\n    if (this.hasContentTarget) {\n      this.contentTarget.classList.toggle('hidden', !isWebinarSelected)\n    }\n\n    // Toggle tab visibility\n    if (this.webinarTab) {\n      this.webinarTab.style.display = isWebinarSelected ? '' : 'none'\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 AppController from \"./app_controller\"\napplication.register(\"app\", AppController)\n\nimport AuthController from \"./auth_controller\"\napplication.register(\"auth\", AuthController)\n\nimport BubbleChartController from \"./bubble_chart_controller\"\napplication.register(\"bubble-chart\", BubbleChartController)\n\nimport ButterflySortController from \"./butterfly_sort_controller\"\napplication.register(\"butterfly-sort\", ButterflySortController)\n\nimport CandidateCertificationsController from \"./candidate_certifications_controller\"\napplication.register(\"candidate-certifications\", CandidateCertificationsController)\n\nimport CandidateEducationsController from \"./candidate_educations_controller\"\napplication.register(\"candidate-educations\", CandidateEducationsController)\n\nimport CandidateLiveEventController from \"./candidate_live_event_controller\"\napplication.register(\"candidate-live-event\", CandidateLiveEventController)\n\nimport CandidatePositionsController from \"./candidate_positions_controller\"\napplication.register(\"candidate-positions\", CandidatePositionsController)\n\nimport CandidatePresenceController from \"./candidate_presence_controller\"\napplication.register(\"candidate-presence\", CandidatePresenceController)\n\nimport CandidateRegistrationController from \"./candidate_registration_controller\"\napplication.register(\"candidate-registration\", CandidateRegistrationController)\n\nimport CandidateResumesController from \"./candidate_resumes_controller\"\napplication.register(\"candidate-resumes\", CandidateResumesController)\n\nimport Client__AdvancedCandidateSearchController from \"./client/advanced_candidate_search_controller\"\napplication.register(\"client-advanced-candidate-search\", Client__AdvancedCandidateSearchController)\n\nimport Client__CandidateQrCodeScannerController from \"./client/candidate_qr_code_scanner_controller\"\napplication.register(\"client-candidate-qr-code-scanner\", Client__CandidateQrCodeScannerController)\n\nimport Client__DateRangePickerController from \"./client/date_range_picker_controller\"\napplication.register(\"client-date-range-picker\", Client__DateRangePickerController)\n\nimport Client__StatsDateRangePickerController from \"./client/stats_date_range_picker_controller\"\napplication.register(\"client-stats-date-range-picker\", Client__StatsDateRangePickerController)\n\nimport ClientLiveEventController from \"./client_live_event_controller\"\napplication.register(\"client-live-event\", ClientLiveEventController)\n\nimport ClientValidationsController from \"./client_validations_controller\"\napplication.register(\"client-validations\", ClientValidationsController)\n\nimport ConnectionMonitorController from \"./connection_monitor_controller\"\napplication.register(\"connection-monitor\", ConnectionMonitorController)\n\nimport CountDownTimerController from \"./count_down_timer_controller\"\napplication.register(\"count-down-timer\", CountDownTimerController)\n\nimport DashboardRolePickerController from \"./dashboard_role_picker_controller\"\napplication.register(\"dashboard-role-picker\", DashboardRolePickerController)\n\nimport DatePickerController from \"./date_picker_controller\"\napplication.register(\"date-picker\", DatePickerController)\n\nimport DateRangePickerFieldController from \"./date_range_picker_field_controller\"\napplication.register(\"date-range-picker-field\", DateRangePickerFieldController)\n\nimport DeviceTesterController from \"./device_tester_controller\"\napplication.register(\"device-tester\", DeviceTesterController)\n\nimport DisableLinkController from \"./disable_link_controller\"\napplication.register(\"disable-link\", DisableLinkController)\n\nimport EmployersSearchController from \"./employers_search_controller\"\napplication.register(\"employers-search\", EmployersSearchController)\n\nimport EventControlCenterController from \"./event_control_center_controller\"\napplication.register(\"event-control-center\", EventControlCenterController)\n\nimport EventDoctorController from \"./event_doctor_controller\"\napplication.register(\"event-doctor\", EventDoctorController)\n\nimport EventNotificationsController from \"./event_notifications_controller\"\napplication.register(\"event-notifications\", EventNotificationsController)\n\nimport EventPackageManagerController from \"./event_package_manager_controller\"\napplication.register(\"event-package-manager\", EventPackageManagerController)\n\nimport EventsCalendarController from \"./events_calendar_controller\"\napplication.register(\"events-calendar\", EventsCalendarController)\n\nimport ExhibitorInterestsController from \"./exhibitor_interests_controller\"\napplication.register(\"exhibitor-interests\", ExhibitorInterestsController)\n\nimport ExhibitorMessageController from \"./exhibitor_message_controller\"\napplication.register(\"exhibitor-message\", ExhibitorMessageController)\n\nimport ExhibitorRegistrationSearchController from \"./exhibitor_registration_search_controller\"\napplication.register(\"exhibitor-registration-search\", ExhibitorRegistrationSearchController)\n\nimport FeaturedJobsSearchController from \"./featured_jobs_search_controller\"\napplication.register(\"featured-jobs-search\", FeaturedJobsSearchController)\n\nimport FeedbackPopupController from \"./feedback_popup_controller\"\napplication.register(\"feedback-popup\", FeedbackPopupController)\n\nimport FileUploadController from \"./file_upload_controller\"\napplication.register(\"file-upload\", FileUploadController)\n\nimport FormInputTrackerController from \"./form_input_tracker_controller\"\napplication.register(\"form-input-tracker\", FormInputTrackerController)\n\nimport FormRedirectController from \"./form_redirect_controller\"\napplication.register(\"form-redirect\", FormRedirectController)\n\nimport GooglePlacePredictionsController from \"./google_place_predictions_controller\"\napplication.register(\"google-place-predictions\", GooglePlacePredictionsController)\n\nimport InfiniteScrollController from \"./infinite_scroll_controller\"\napplication.register(\"infinite-scroll\", InfiniteScrollController)\n\nimport InstallationTeamDashboardController from \"./installation_team_dashboard_controller\"\napplication.register(\"installation-team-dashboard\", InstallationTeamDashboardController)\n\nimport InterestController from \"./interest_controller\"\napplication.register(\"interest\", InterestController)\n\nimport LocationPickerController from \"./location_picker_controller\"\napplication.register(\"location-picker\", LocationPickerController)\n\nimport MessagingCampaignController from \"./messaging_campaign_controller\"\napplication.register(\"messaging-campaign\", MessagingCampaignController)\n\nimport ModalController from \"./modal_controller\"\napplication.register(\"modal\", ModalController)\n\nimport MonthYearPickerController from \"./month_year_picker_controller\"\napplication.register(\"month-year-picker\", MonthYearPickerController)\n\nimport MultiChipPickerController from \"./multi_chip_picker_controller\"\napplication.register(\"multi-chip-picker\", MultiChipPickerController)\n\nimport MultiSearchController from \"./multi_search_controller\"\napplication.register(\"multi-search\", MultiSearchController)\n\nimport OrganizationsSearchController from \"./organizations_search_controller\"\napplication.register(\"organizations-search\", OrganizationsSearchController)\n\nimport PaymentCalculatorController from \"./payment_calculator_controller\"\napplication.register(\"payment-calculator\", PaymentCalculatorController)\n\nimport PdfDownloadController from \"./pdf_download_controller\"\napplication.register(\"pdf-download\", PdfDownloadController)\n\nimport PhoneCallIconComponentController from \"../../components/ui/phone_call_icon_component_controller\"\napplication.register(\"phone-call-icon-component\", PhoneCallIconComponentController)\n\nimport PickerController from \"./picker_controller\"\napplication.register(\"picker\", PickerController)\n\nimport PrefillHighlightController from \"./prefill_highlight_controller\"\napplication.register(\"prefill-highlight\", PrefillHighlightController)\n\nimport PublishBroadcastController from \"./publish_broadcast_controller\"\napplication.register(\"publish-broadcast\", PublishBroadcastController)\n\nimport QrCodeReaderController from \"./qr_code_reader_controller\"\napplication.register(\"qr-code-reader\", QrCodeReaderController)\n\nimport ReceiveBroadcastController from \"./receive_broadcast_controller\"\napplication.register(\"receive-broadcast\", ReceiveBroadcastController)\n\nimport ResetFormController from \"./reset_form_controller\"\napplication.register(\"reset-form\", ResetFormController)\n\nimport Rms2ClientSearchController from \"./rms2_client_search_controller\"\napplication.register(\"rms2-client-search\", Rms2ClientSearchController)\n\nimport SaveSubFormsController from \"./save_sub_forms_controller\"\napplication.register(\"save-sub-forms\", SaveSubFormsController)\n\nimport ScamAlertController from \"./scam_alert_controller\"\napplication.register(\"scam-alert\", ScamAlertController)\n\nimport SearchPickerController from \"./search_picker_controller\"\napplication.register(\"search-picker\", SearchPickerController)\n\nimport SearchUsersController from \"./search_users_controller\"\napplication.register(\"search-users\", SearchUsersController)\n\nimport SearchWhileTypingController from \"./search_while_typing_controller\"\napplication.register(\"search-while-typing\", SearchWhileTypingController)\n\nimport SetAuthenticityTokenController from \"./set_authenticity_token_controller\"\napplication.register(\"set-authenticity-token\", SetAuthenticityTokenController)\n\nimport SortableListController from \"./sortable_list_controller\"\napplication.register(\"sortable-list\", SortableListController)\n\nimport SsoEmailDetectionController from \"./sso_email_detection_controller\"\napplication.register(\"sso-email-detection\", SsoEmailDetectionController)\n\nimport StaffDashboardController from \"./staff_dashboard_controller\"\napplication.register(\"staff-dashboard\", StaffDashboardController)\n\nimport StatsDatePickerController from \"./stats_date_picker_controller\"\napplication.register(\"stats-date-picker\", StatsDatePickerController)\n\nimport TabbedChatController from \"./tabbed_chat_controller\"\napplication.register(\"tabbed-chat\", TabbedChatController)\n\nimport TableController from \"./table_controller\"\napplication.register(\"table-component\", TableController)\n\nimport TextChatController from \"./text_chat_controller\"\napplication.register(\"text-chat\", TextChatController)\n\nimport TimeController from \"./time_controller\"\napplication.register(\"time\", TimeController)\n\nimport ToggleController from \"./toggle_controller\"\napplication.register(\"toggle\", ToggleController)\n\nimport TurboFrameReloaderController from \"./turbo_frame_reloader_controller\"\napplication.register(\"turbo-frame-reloader\", TurboFrameReloaderController)\n\nimport TurboStreamLinkController from \"./turbo_stream_link_controller\"\napplication.register(\"turbo-stream-link\", TurboStreamLinkController)\n\nimport TypingIndicatorController from \"./typing_indicator_controller\"\napplication.register(\"typing-indicator\", TypingIndicatorController)\n\nimport UsersSearchController from \"./users_search_controller\"\napplication.register(\"users-search\", UsersSearchController)\n\nimport VideoChatController from \"./video_chat_controller\"\napplication.register(\"video-chat\", VideoChatController)\n\nimport WebinarToggleController from \"./webinar_toggle_controller\"\napplication.register(\"webinar-toggle\", WebinarToggleController)\n", "/*!\n * Ahoy.js v0.4.3\n * Simple, powerful JavaScript analytics\n * https://github.com/ankane/ahoy.js\n * MIT License\n */\n\n// https://www.quirksmode.org/js/cookies.html\n\nvar Cookies = {\n  set: function (name, value, ttl, domain) {\n    var expires = \"\";\n    var cookieDomain = \"\";\n    if (ttl) {\n      var date = new Date();\n      date.setTime(date.getTime() + (ttl * 60 * 1000));\n      expires = \"; expires=\" + date.toGMTString();\n    }\n    if (domain) {\n      cookieDomain = \"; domain=\" + domain;\n    }\n    document.cookie = name + \"=\" + escape(value) + expires + cookieDomain + \"; path=/; samesite=lax\";\n  },\n  get: function (name) {\n    var i, c;\n    var nameEQ = name + \"=\";\n    var ca = document.cookie.split(';');\n    for (i = 0; i < ca.length; i++) {\n      c = ca[i];\n      while (c.charAt(0) === ' ') {\n        c = c.substring(1, c.length);\n      }\n      if (c.indexOf(nameEQ) === 0) {\n        return unescape(c.substring(nameEQ.length, c.length));\n      }\n    }\n    return null;\n  }\n};\n\nvar config = {\n  urlPrefix: \"\",\n  visitsUrl: \"/ahoy/visits\",\n  eventsUrl: \"/ahoy/events\",\n  page: null,\n  platform: \"Web\",\n  useBeacon: true,\n  startOnReady: true,\n  trackVisits: true,\n  cookies: true,\n  cookieDomain: null,\n  headers: {},\n  visitParams: {},\n  withCredentials: false,\n  visitDuration: 4 * 60, // default 4 hours\n  visitorDuration: 2 * 365 * 24 * 60 // default 2 years\n};\n\nvar ahoy = window.ahoy || window.Ahoy || {};\n\nahoy.configure = function (options) {\n  for (var key in options) {\n    if (Object.prototype.hasOwnProperty.call(options, key)) {\n      config[key] = options[key];\n    }\n  }\n};\n\n// legacy\nahoy.configure(ahoy);\n\nvar $ = window.jQuery || window.Zepto || window.$;\nvar visitId, visitorId, track;\nvar isReady = false;\nvar queue = [];\nvar canStringify = typeof(JSON) !== \"undefined\" && typeof(JSON.stringify) !== \"undefined\";\nvar eventQueue = [];\n\nfunction visitsUrl() {\n  return config.urlPrefix + config.visitsUrl;\n}\n\nfunction eventsUrl() {\n  return config.urlPrefix + config.eventsUrl;\n}\n\nfunction isEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\n\nfunction canTrackNow() {\n  return (config.useBeacon || config.trackNow) && isEmpty(config.headers) && canStringify && typeof(window.navigator.sendBeacon) !== \"undefined\" && !config.withCredentials;\n}\n\nfunction serialize(object) {\n  var data = new FormData();\n  for (var key in object) {\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      data.append(key, object[key]);\n    }\n  }\n  return data;\n}\n\n// cookies\n\nfunction setCookie(name, value, ttl) {\n  Cookies.set(name, value, ttl, config.cookieDomain || config.domain);\n}\n\nfunction getCookie(name) {\n  return Cookies.get(name);\n}\n\nfunction destroyCookie(name) {\n  Cookies.set(name, \"\", -1);\n}\n\nfunction log(message) {\n  if (getCookie(\"ahoy_debug\")) {\n    window.console.log(message);\n  }\n}\n\nfunction setReady() {\n  var callback;\n  while ((callback = queue.shift())) {\n    callback();\n  }\n  isReady = true;\n}\n\nahoy.ready = function (callback) {\n  if (isReady) {\n    callback();\n  } else {\n    queue.push(callback);\n  }\n};\n\nfunction matchesSelector(element, selector) {\n  var matches = element.matches ||\n    element.matchesSelector ||\n    element.mozMatchesSelector ||\n    element.msMatchesSelector ||\n    element.oMatchesSelector ||\n    element.webkitMatchesSelector;\n\n  if (matches) {\n    if (matches.apply(element, [selector])) {\n      return element;\n    } else if (element.parentElement) {\n      return matchesSelector(element.parentElement, selector);\n    }\n    return null;\n  } else {\n    log(\"Unable to match\");\n    return null;\n  }\n}\n\nfunction onEvent(eventName, selector, callback) {\n  document.addEventListener(eventName, function (e) {\n    var matchedElement = matchesSelector(e.target, selector);\n    if (matchedElement) {\n      var skip = getClosest(matchedElement, \"data-ahoy-skip\");\n      if (skip !== null && skip !== \"false\") { return; }\n\n      callback.call(matchedElement, e);\n    }\n  });\n}\n\n// http://beeker.io/jquery-document-ready-equivalent-vanilla-javascript\nfunction documentReady(callback) {\n  if (document.readyState === \"interactive\" || document.readyState === \"complete\") {\n    setTimeout(callback, 0);\n  } else {\n    document.addEventListener(\"DOMContentLoaded\", callback);\n  }\n}\n\n// https://stackoverflow.com/a/2117523/1177228\nfunction generateId() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = Math.random() * 16 | 0;\n    var v = c === 'x' ? r : (r & 0x3 | 0x8);\n    return v.toString(16);\n  });\n}\n\nfunction saveEventQueue() {\n  if (config.cookies && canStringify) {\n    setCookie(\"ahoy_events\", JSON.stringify(eventQueue), 1);\n  }\n}\n\n// from rails-ujs\n\nfunction csrfToken() {\n  var meta = document.querySelector(\"meta[name=csrf-token]\");\n  return meta && meta.content;\n}\n\nfunction csrfParam() {\n  var meta = document.querySelector(\"meta[name=csrf-param]\");\n  return meta && meta.content;\n}\n\nfunction CSRFProtection(xhr) {\n  var token = csrfToken();\n  if (token) { xhr.setRequestHeader(\"X-CSRF-Token\", token); }\n}\n\nfunction sendRequest(url, data, success) {\n  if (canStringify) {\n    if ($ && $.ajax) {\n      $.ajax({\n        type: \"POST\",\n        url: url,\n        data: JSON.stringify(data),\n        contentType: \"application/json; charset=utf-8\",\n        dataType: \"json\",\n        beforeSend: CSRFProtection,\n        success: success,\n        headers: config.headers,\n        xhrFields: {\n          withCredentials: config.withCredentials\n        }\n      });\n    } else {\n      var xhr = new XMLHttpRequest();\n      xhr.open(\"POST\", url, true);\n      xhr.withCredentials = config.withCredentials;\n      xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n      for (var header in config.headers) {\n        if (Object.prototype.hasOwnProperty.call(config.headers, header)) {\n          xhr.setRequestHeader(header, config.headers[header]);\n        }\n      }\n      xhr.onload = function () {\n        if (xhr.status === 200) {\n          success();\n        }\n      };\n      CSRFProtection(xhr);\n      xhr.send(JSON.stringify(data));\n    }\n  }\n}\n\nfunction eventData(event) {\n  var data = {\n    events: [event]\n  };\n  if (config.cookies) {\n    data.visit_token = event.visit_token;\n    data.visitor_token = event.visitor_token;\n  }\n  delete event.visit_token;\n  delete event.visitor_token;\n  return data;\n}\n\nfunction trackEvent(event) {\n  ahoy.ready(function () {\n    sendRequest(eventsUrl(), eventData(event), function () {\n      // remove from queue\n      for (var i = 0; i < eventQueue.length; i++) {\n        if (eventQueue[i].id === event.id) {\n          eventQueue.splice(i, 1);\n          break;\n        }\n      }\n      saveEventQueue();\n    });\n  });\n}\n\nfunction trackEventNow(event) {\n  ahoy.ready(function () {\n    var data = eventData(event);\n    var param = csrfParam();\n    var token = csrfToken();\n    if (param && token) { data[param] = token; }\n    // stringify so we keep the type\n    data.events_json = JSON.stringify(data.events);\n    delete data.events;\n    window.navigator.sendBeacon(eventsUrl(), serialize(data));\n  });\n}\n\nfunction page() {\n  return config.page || window.location.pathname;\n}\n\nfunction presence(str) {\n  return (str && str.length > 0) ? str : null;\n}\n\nfunction cleanObject(obj) {\n  for (var key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      if (obj[key] === null) {\n        delete obj[key];\n      }\n    }\n  }\n  return obj;\n}\n\nfunction eventProperties() {\n  return cleanObject({\n    tag: this.tagName.toLowerCase(),\n    id: presence(this.id),\n    \"class\": presence(this.className),\n    page: page(),\n    section: getClosest(this, \"data-section\")\n  });\n}\n\nfunction getClosest(element, attribute) {\n  for (; element && element !== document; element = element.parentNode) {\n    if (element.hasAttribute(attribute)) {\n      return element.getAttribute(attribute);\n    }\n  }\n\n  return null;\n}\n\nfunction createVisit() {\n  isReady = false;\n\n  visitId = ahoy.getVisitId();\n  visitorId = ahoy.getVisitorId();\n  track = getCookie(\"ahoy_track\");\n\n  if (config.cookies === false || config.trackVisits === false) {\n    log(\"Visit tracking disabled\");\n    setReady();\n  } else if (visitId && visitorId && !track) {\n    // TODO keep visit alive?\n    log(\"Active visit\");\n    setReady();\n  } else {\n    if (!visitId) {\n      visitId = generateId();\n      setCookie(\"ahoy_visit\", visitId, config.visitDuration);\n    }\n\n    // make sure cookies are enabled\n    if (getCookie(\"ahoy_visit\")) {\n      log(\"Visit started\");\n\n      if (!visitorId) {\n        visitorId = generateId();\n        setCookie(\"ahoy_visitor\", visitorId, config.visitorDuration);\n      }\n\n      var data = {\n        visit_token: visitId,\n        visitor_token: visitorId,\n        platform: config.platform,\n        landing_page: window.location.href,\n        screen_width: window.screen.width,\n        screen_height: window.screen.height,\n        js: true\n      };\n\n      // referrer\n      if (document.referrer.length > 0) {\n        data.referrer = document.referrer;\n      }\n\n      for (var key in config.visitParams) {\n        if (Object.prototype.hasOwnProperty.call(config.visitParams, key)) {\n          data[key] = config.visitParams[key];\n        }\n      }\n\n      log(data);\n\n      sendRequest(visitsUrl(), data, function () {\n        // wait until successful to destroy\n        destroyCookie(\"ahoy_track\");\n        setReady();\n      });\n    } else {\n      log(\"Cookies disabled\");\n      setReady();\n    }\n  }\n}\n\nahoy.getVisitId = ahoy.getVisitToken = function () {\n  return getCookie(\"ahoy_visit\");\n};\n\nahoy.getVisitorId = ahoy.getVisitorToken = function () {\n  return getCookie(\"ahoy_visitor\");\n};\n\nahoy.reset = function () {\n  destroyCookie(\"ahoy_visit\");\n  destroyCookie(\"ahoy_visitor\");\n  destroyCookie(\"ahoy_events\");\n  destroyCookie(\"ahoy_track\");\n  return true;\n};\n\nahoy.debug = function (enabled) {\n  if (enabled === false) {\n    destroyCookie(\"ahoy_debug\");\n  } else {\n    setCookie(\"ahoy_debug\", \"t\", 365 * 24 * 60); // 1 year\n  }\n  return true;\n};\n\nahoy.track = function (name, properties) {\n  // generate unique id\n  var event = {\n    name: name,\n    properties: properties || {},\n    time: (new Date()).getTime() / 1000.0,\n    id: generateId(),\n    js: true\n  };\n\n  ahoy.ready(function () {\n    if (config.cookies && !ahoy.getVisitId()) {\n      createVisit();\n    }\n\n    ahoy.ready(function () {\n      log(event);\n\n      event.visit_token = ahoy.getVisitId();\n      event.visitor_token = ahoy.getVisitorId();\n\n      if (canTrackNow()) {\n        trackEventNow(event);\n      } else {\n        eventQueue.push(event);\n        saveEventQueue();\n\n        // wait in case navigating to reduce duplicate events\n        setTimeout(function () {\n          trackEvent(event);\n        }, 1000);\n      }\n    });\n  });\n\n  return true;\n};\n\nahoy.trackView = function (additionalProperties) {\n  var properties = {\n    url: window.location.href,\n    title: document.title,\n    page: page()\n  };\n\n  if (additionalProperties) {\n    for (var propName in additionalProperties) {\n      if (Object.prototype.hasOwnProperty.call(additionalProperties, propName)) {\n        properties[propName] = additionalProperties[propName];\n      }\n    }\n  }\n  ahoy.track(\"$view\", properties);\n};\n\nahoy.trackClicks = function (selector) {\n  if (selector === undefined) {\n    throw new Error(\"Missing selector\");\n  }\n  onEvent(\"click\", selector, function (e) {\n    var properties = eventProperties.call(this, e);\n    properties.text = properties.tag === \"input\" ? this.value : (this.textContent || this.innerText || this.innerHTML).replace(/[\\s\\r\\n]+/g, \" \").trim();\n    properties.href = this.href;\n    ahoy.track(\"$click\", properties);\n  });\n};\n\nahoy.trackSubmits = function (selector) {\n  if (selector === undefined) {\n    throw new Error(\"Missing selector\");\n  }\n  onEvent(\"submit\", selector, function (e) {\n    var properties = eventProperties.call(this, e);\n    ahoy.track(\"$submit\", properties);\n  });\n};\n\nahoy.trackChanges = function (selector) {\n  log(\"trackChanges is deprecated and will be removed in 0.5.0\");\n  if (selector === undefined) {\n    throw new Error(\"Missing selector\");\n  }\n  onEvent(\"change\", selector, function (e) {\n    var properties = eventProperties.call(this, e);\n    ahoy.track(\"$change\", properties);\n  });\n};\n\n// push events from queue\ntry {\n  eventQueue = JSON.parse(getCookie(\"ahoy_events\") || \"[]\");\n} catch (e) {\n  // do nothing\n}\n\nfor (var i = 0; i < eventQueue.length; i++) {\n  trackEvent(eventQueue[i]);\n}\n\nahoy.start = function () {\n  createVisit();\n\n  ahoy.start = function () {};\n};\n\ndocumentReady(function () {\n  if (config.startOnReady) {\n    ahoy.start();\n  }\n});\n\nexport { ahoy as default };\n", "var adapters = {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined\n};\n\nvar logger = {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now());\n      adapters.logger.log(\"[ActionCable]\", ...messages);\n    }\n  }\n};\n\nconst now = () => (new Date).getTime();\n\nconst secondsSince = time => (now() - time) / 1e3;\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this);\n    this.connection = connection;\n    this.reconnectAttempts = 0;\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  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  isRunning() {\n    return this.startedAt && !this.stoppedAt;\n  }\n  recordMessage() {\n    this.pingedAt = now();\n  }\n  recordConnect() {\n    this.reconnectAttempts = 0;\n    delete this.disconnectedAt;\n    logger.log(\"ConnectionMonitor recorded connect\");\n  }\n  recordDisconnect() {\n    this.disconnectedAt = now();\n    logger.log(\"ConnectionMonitor recorded disconnect\");\n  }\n  startPolling() {\n    this.stopPolling();\n    this.poll();\n  }\n  stopPolling() {\n    clearTimeout(this.pollTimeout);\n  }\n  poll() {\n    this.pollTimeout = setTimeout((() => {\n      this.reconnectIfStale();\n      this.poll();\n    }), this.getPollInterval());\n  }\n  getPollInterval() {\n    const {staleThreshold: staleThreshold, reconnectionBackoffRate: reconnectionBackoffRate} = this.constructor;\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));\n    const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;\n    const jitter = jitterMax * Math.random();\n    return staleThreshold * 1e3 * backoff * (1 + jitter);\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  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt;\n  }\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;\n  }\n  disconnectedRecently() {\n    return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\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      }), 200);\n    }\n  }\n}\n\nConnectionMonitor.staleThreshold = 6;\n\nConnectionMonitor.reconnectionBackoffRate = .15;\n\nvar INTERNAL = {\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    remote: \"remote\"\n  },\n  default_mount_path: \"/cable\",\n  protocols: [ \"actioncable-v1-json\", \"actioncable-unsupported\" ]\n};\n\nconst {message_types: message_types, protocols: protocols} = INTERNAL;\n\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  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data));\n      return true;\n    } else {\n      return false;\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      const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);\n      if (this.webSocket) {\n        this.uninstallEventHandlers();\n      }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);\n      this.installEventHandlers();\n      this.monitor.start();\n      return true;\n    }\n  }\n  close({allowReconnect: allowReconnect} = {\n    allowReconnect: true\n  }) {\n    if (!allowReconnect) {\n      this.monitor.stop();\n    }\n    if (this.isOpen()) {\n      return this.webSocket.close();\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      } 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  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol;\n    }\n  }\n  isOpen() {\n    return this.isState(\"open\");\n  }\n  isActive() {\n    return this.isState(\"open\", \"connecting\");\n  }\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0;\n  }\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n  }\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0;\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  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  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {};\n    }\n  }\n}\n\nConnection.reopenDelay = 500;\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) {\n      return;\n    }\n    const {identifier: identifier, message: message, reason: reason, reconnect: reconnect, type: type} = JSON.parse(event.data);\n    this.monitor.recordMessage();\n    switch (type) {\n     case message_types.welcome:\n      if (this.triedToReconnect()) {\n        this.reconnectAttempted = true;\n      }\n      this.monitor.recordConnect();\n      return this.subscriptions.reload();\n\n     case message_types.disconnect:\n      logger.log(`Disconnecting. Reason: ${reason}`);\n      return this.close({\n        allowReconnect: reconnect\n      });\n\n     case message_types.ping:\n      return null;\n\n     case message_types.confirmation:\n      this.subscriptions.confirmSubscription(identifier);\n      if (this.reconnectAttempted) {\n        this.reconnectAttempted = false;\n        return this.subscriptions.notify(identifier, \"connected\", {\n          reconnected: true\n        });\n      } else {\n        return this.subscriptions.notify(identifier, \"connected\", {\n          reconnected: false\n        });\n      }\n\n     case message_types.rejection:\n      return this.subscriptions.reject(identifier);\n\n     default:\n      return this.subscriptions.notify(identifier, \"received\", message);\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({\n        allowReconnect: false\n      });\n    }\n  },\n  close(event) {\n    logger.log(\"WebSocket onclose event\");\n    if (this.disconnected) {\n      return;\n    }\n    this.disconnected = true;\n    this.monitor.recordDisconnect();\n    return this.subscriptions.notifyAll(\"disconnected\", {\n      willAttemptReconnect: this.monitor.isRunning()\n    });\n  },\n  error() {\n    logger.log(\"WebSocket onerror event\");\n  }\n};\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\nclass Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer;\n    this.identifier = JSON.stringify(params);\n    extend(this, mixin);\n  }\n  perform(action, data = {}) {\n    data.action = action;\n    return this.send(data);\n  }\n  send(data) {\n    return this.consumer.send({\n      command: \"message\",\n      identifier: this.identifier,\n      data: JSON.stringify(data)\n    });\n  }\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this);\n  }\n}\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions;\n    this.pendingSubscriptions = [];\n  }\n  guarantee(subscription) {\n    if (this.pendingSubscriptions.indexOf(subscription) == -1) {\n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);\n      this.pendingSubscriptions.push(subscription);\n    } else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);\n    }\n    this.startGuaranteeing();\n  }\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);\n    this.pendingSubscriptions = this.pendingSubscriptions.filter((s => s !== subscription));\n  }\n  startGuaranteeing() {\n    this.stopGuaranteeing();\n    this.retrySubscribing();\n  }\n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout);\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    }), 500);\n  }\n}\n\nclass Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer;\n    this.guarantor = new SubscriptionGuarantor(this);\n    this.subscriptions = [];\n  }\n  create(channelName, mixin) {\n    const channel = channelName;\n    const params = typeof channel === \"object\" ? channel : {\n      channel: channel\n    };\n    const subscription = new Subscription(this.consumer, params, mixin);\n    return this.add(subscription);\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  remove(subscription) {\n    this.forget(subscription);\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\");\n    }\n    return subscription;\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  forget(subscription) {\n    this.guarantor.forget(subscription);\n    this.subscriptions = this.subscriptions.filter((s => s !== subscription));\n    return subscription;\n  }\n  findAll(identifier) {\n    return this.subscriptions.filter((s => s.identifier === identifier));\n  }\n  reload() {\n    return this.subscriptions.map((subscription => this.subscribe(subscription)));\n  }\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription => this.notify(subscription, callbackName, ...args)));\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    return subscriptions.map((subscription => typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined));\n  }\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription);\n    }\n  }\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`);\n    this.findAll(identifier).map((subscription => this.guarantor.forget(subscription)));\n  }\n  sendCommand(subscription, command) {\n    const {identifier: identifier} = subscription;\n    return this.consumer.send({\n      command: command,\n      identifier: identifier\n    });\n  }\n}\n\nclass Consumer {\n  constructor(url) {\n    this._url = url;\n    this.subscriptions = new Subscriptions(this);\n    this.connection = new Connection(this);\n    this.subprotocols = [];\n  }\n  get url() {\n    return createWebSocketURL(this._url);\n  }\n  send(data) {\n    return this.connection.send(data);\n  }\n  connect() {\n    return this.connection.open();\n  }\n  disconnect() {\n    return this.connection.close({\n      allowReconnect: false\n    });\n  }\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open();\n    }\n  }\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [ ...this.subprotocols, subprotocol ];\n  }\n}\n\nfunction createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url();\n  }\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\");\n    a.href = url;\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\nfunction createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url);\n}\n\nfunction getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`);\n  if (element) {\n    return element.getAttribute(\"content\");\n  }\n}\n\nexport { Connection, ConnectionMonitor, Consumer, INTERNAL, Subscription, SubscriptionGuarantor, Subscriptions, adapters, createConsumer, createWebSocketURL, getConfig, logger };\n", "// Entry point for the build script in your package.json\nimport \"chartkick/chart.js\"\nimport { Chart } from \"chart.js\"\n\nChart.defaults.font.family = \"'nunito sans', sans-serif\"\nChart.defaults.font.size = 12\nChart.defaults.color = \"#333333\"\n\n// Chartkick.options = {\n//   colors: [\"rgba(31, 60, 90, 1)\"],\n// }\nrequire(\"@hotwired/turbo-rails\")\nimport \"./channels\"\nimport \"./controllers\"\nimport ahoy from \"ahoy.js\"\n//import \"./stylesheets/application\"\nimport * as ActionCable from '@rails/actioncable'\n\nActionCable.logger.enabled = true\n\n// Load Ahoy to window\nwindow.ahoy = ahoy\n"],
  "mappings": "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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,KAAK,CAAC,GAAG,GAAG,G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A,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,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,QAAAA,cAAa,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;AAAA,UAAK;AAAA,UAAK;AAAA,UAAK;AAAA,UAAG;AAAA,UAAK;AAAA,UAAG;AAAA,UAC1G;AAAA,UAAK;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;AAAA,UAAM;AAAA,UAAI;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UACvG;AAAA,UAAM;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,UAAK;AAAA,UAAM;AAAA,UACxG;AAAA,UAAK;AAAA,UAAK;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,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,UAAM;AAAA,UAAM;AAAA,UAAM;AAAA,UAC5G;AAAA,UAAM;AAAA,UAAK;AAAA,UAAM;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,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,QACxF,CAAC;AACD,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,uBAAQ;AAAA;AAAA;;;ACjef,MAmBI,sBAaG;AAhCP;AAAA;AAmBA,MAAI;AAAA,MAAsC,WAAY;AAClD,iBAASE,sBAAqB,MAAM,QAAQ;AACxC,eAAK,OAAO;AACZ,eAAK,SAAS;AAAA,QAClB;AACA,QAAAA,sBAAqB,UAAU,UAAU,WAAY;AACjD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,YAAY,WAAY;AACnD,iBAAO,KAAK;AAAA,QAChB;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,+BAAQ;AAAA;AAAA;;;AChCf,MAeIC,YA6BAC,WAoSGC;AAhVP,MAAAC,iBAAA;AAAA;AA4BA;AACA;AACA;AACA;AAhBA,MAAIH,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUI,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AAmBA,MAAIH;AAAA,MAA0B,WAAY;AACtC,iBAASA,YAAW;AAAA,QACpB;AAWA,QAAAA,UAAS,iBAAiB,SAAU,OAAO,OAAO,UAAU;AAIxD,cAAI,YAAY,MAAM,eAAe;AACrC,cAAI,qBAAqBA,UAAS,OAAO,UAAU,SAAS;AAC5D,cAAI,CAAC,mBAAmB,QAAQ;AAC5B,wBAAY,UAAU,MAAM;AAC5B,sBAAU,UAAU;AACpB,iCAAqBA,UAAS,OAAO,UAAU,SAAS;AAAA,UAC5D;AACA,iBAAO,IAAI,6BAAqB,WAAW,kBAAkB;AAAA,QACjE;AAQA,QAAAA,UAAS,SAAS,SAAU,UAAU,WAAW;AAC7C,cAAI,KAAKI;AACT,cAAI,qBAAqB,IAAI,MAAM;AACnC,cAAI,MAAM;AACV,cAAI,SAAS;AACb,cAAI,oBAAoB;AACxB,iBAAO,MAAM,UAAU,UAAU,GAAG;AAChC,gBAAI,WAAWJ,UAAS,aAAa,WAAW,KAAK,MAAM;AAC3D,gBAAI,SAAS,CAAC,KAAK,QAAQ,SAAS,CAAC,KAAK,MAAM;AAC5C,kBAAI,CAAC,mBAAmB;AAEpB;AAAA,cACJ;AAGA,kCAAoB;AACpB,uBAAS;AACT,kBAAI;AACA,yBAAS,wBAAwB,MAAM,QAAQD,WAAS,kBAAkB,IAAI,yBAAyB,qBAAqB,KAAK,GAAG,CAAC,uBAAuB,MAAM,yBAAyB,qBAAqB,KAAK,GAAG;AACpN,sBAAI,oBAAoB,uBAAuB;AAC/C,sBAAI,kBAAkB,CAAC,KAAK,MAAM;AAC9B,0BAAM,KAAK,MAAM,KAAK,IAAI,KAAK,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA,kBAC/D;AACA,sBAAI,kBAAkB,CAAC,KAAK,MAAM;AAC9B,0BAAM,KAAK,IAAI,KAAK,KAAK,MAAM,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA,kBAC/D;AAAA,gBACJ;AAAA,cACJ,SACO,OAAO;AAAE,sBAAM,EAAE,OAAO,MAAM;AAAA,cAAG,UACxC;AACI,oBAAI;AACA,sBAAI,0BAA0B,CAAC,uBAAuB,SAASK,MAAK,qBAAqB;AAAS,oBAAAA,IAAG,KAAK,oBAAoB;AAAA,gBAClI,UACA;AAAU,sBAAI;AAAK,0BAAM,IAAI;AAAA,gBAAO;AAAA,cACxC;AACA,qBAAOJ,UAAS;AAChB;AAAA,YACJ;AACA,gCAAoB;AACpB,+BAAmB,KAAK,QAAQ;AAChC,gBAAI,CAAC,UAAU;AACX;AAAA,YACJ;AAGA,gBAAI,SAAS,CAAC,KAAK,MAAM;AACrB,uBAAS,KAAK,MAAM,SAAS,CAAC,EAAE,KAAK,CAAC;AACtC,oBAAM,KAAK,MAAM,SAAS,CAAC,EAAE,KAAK,CAAC;AAAA,YACvC,OACK;AACD,uBAAS,KAAK,MAAM,SAAS,CAAC,EAAE,KAAK,CAAC;AACtC,oBAAM,KAAK,MAAM,SAAS,CAAC,EAAE,KAAK,CAAC;AAAA,YACvC;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAgBA,QAAAA,UAAS,eAAe,SAAU,QAAQ,UAAU,aAAa;AAC7D,cAAI,SAAS,OAAO,UAAU;AAC9B,cAAI,QAAQ,OAAO,SAAS;AAE5B,cAAI,SAAS,IAAI,MAAM,CAAC;AACxB,UAAAA,UAAS,aAAa,QAAQA,UAAS,oBAAoB,QAAQ,QAAQ,OAAO,UAAU,aAAaA,UAAS,aAAa,GAAGA,UAAS,qBAAqB;AAChK,cAAI,OAAO,CAAC,KAAK,MAAM;AACnB,0BAAc,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC;AACzC,uBAAW,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC;AAAA,UAC1C;AACA,UAAAA,UAAS,aAAa,QAAQA,UAAS,oBAAoB,QAAQ,QAAQ,OAAO,UAAU,aAAaA,UAAS,YAAY,GAAGA,UAAS,oBAAoB;AAC9J,iBAAO;AAAA,QACX;AACA,QAAAA,UAAS,eAAe,SAAU,QAAQ,WAAW,oBAAoB;AACrE,mBAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;AAChD,mBAAO,mBAAmB,CAAC,CAAC,IAAI,UAAU,CAAC;AAAA,UAC/C;AAAA,QACJ;AACA,QAAAA,UAAS,sBAAsB,SAAU,QAAQ,QAAQ,OAAO,UAAU,aAAa,SAAS;AAE5F,cAAI,SAAS,IAAI,MAAM,CAAC;AACxB,cAAI,QAAQ;AACZ,cAAI,WAAW,IAAI,WAAW,QAAQ,MAAM;AAC5C,iBAAO,WAAW,QAAQ,YAAYA,UAAS,UAAU;AACrD,gBAAI,MAAMA,UAAS,iBAAiB,QAAQ,aAAa,UAAU,OAAO,OAAO,SAAS,QAAQ;AAClG,gBAAI,OAAO,MAAM;AACb,qBAAO,WAAW,GAAG;AACjB,oBAAI,iBAAiBA,UAAS,iBAAiB,QAAQ,aAAa,EAAE,UAAU,OAAO,OAAO,SAAS,QAAQ;AAC/G,oBAAI,kBAAkB,MAAM;AACxB,wBAAM;AAAA,gBACV,OACK;AACD;AACA;AAAA,gBACJ;AAAA,cACJ;AACA,qBAAO,CAAC,IAAI,IAAI,oBAAY,IAAI,CAAC,GAAG,QAAQ;AAC5C,qBAAO,CAAC,IAAI,IAAI,oBAAY,IAAI,CAAC,GAAG,QAAQ;AAC5C,sBAAQ;AACR;AAAA,YACJ;AAAA,UACJ;AACA,cAAI,UAAU,WAAW;AAEzB,cAAI,OAAO;AACP,gBAAI,kBAAkB;AACtB,gBAAI,iBAAiB,WAAW,KAAK,CAAC,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACjG,mBAAO,UAAU,QAAQ,WAAW;AAChC,kBAAI,MAAMA,UAAS,iBAAiB,QAAQ,eAAe,CAAC,GAAG,SAAS,OAAO,OAAO,SAAS,QAAQ;AAKvG,kBAAI,OAAO,QACP,KAAK,IAAI,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAIA,UAAS,qBAChD,KAAK,IAAI,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAIA,UAAS,mBAAmB;AACnE,iCAAiB;AACjB,kCAAkB;AAAA,cACtB,OACK;AACD,oBAAI,kBAAkBA,UAAS,uBAAuB;AAClD;AAAA,gBACJ,OACK;AACD;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AACA,uBAAW,kBAAkB;AAC7B,mBAAO,CAAC,IAAI,IAAI,oBAAY,eAAe,CAAC,GAAG,OAAO;AACtD,mBAAO,CAAC,IAAI,IAAI,oBAAY,eAAe,CAAC,GAAG,OAAO;AAAA,UAC1D;AACA,cAAI,UAAU,WAAWA,UAAS,oBAAoB;AAClD,2BAAO,KAAK,QAAQ,IAAI;AAAA,UAC5B;AACA,iBAAO;AAAA,QACX;AAWA,QAAAA,UAAS,mBAAmB,SAAU,QAAQ,QAAQ,KAAK,OAAO,YAAY,SAAS,UAAU;AAC7F,yBAAO,WAAW,UAAU,GAAG,SAAS,QAAQ,CAAC;AACjD,cAAI,eAAe;AACnB,cAAI,aAAa;AAEjB,iBAAO,OAAO,IAAI,cAAc,GAAG,KAAK,eAAe,KAAK,eAAeA,UAAS,iBAAiB;AACjG;AAAA,UACJ;AACA,cAAI,IAAI;AACR,cAAI,kBAAkB;AACtB,cAAI,gBAAgB,QAAQ;AAC5B,mBAAS,UAAU,YAAY,IAAI,OAAO,KAAK;AAC3C,gBAAI,QAAQ,OAAO,IAAI,GAAG,GAAG;AAC7B,gBAAI,UAAU,SAAS;AACnB,uBAAS,eAAe;AAAA,YAC5B,OACK;AACD,kBAAI,oBAAoB,gBAAgB,GAAG;AACvC,oBAAIA,UAAS,qBAAqB,UAAU,SAASA,UAAS,uBAAuB,IAAIA,UAAS,kBAAkB;AAChH,yBAAO,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC;AAAA,gBAC3C;AACA,gCAAgB,SAAS,CAAC,IAAI,SAAS,CAAC;AACxC,+BAAO,UAAU,UAAU,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAC9D,yBAAS,kBAAkB,CAAC,IAAI;AAChC,yBAAS,eAAe,IAAI;AAC5B;AAAA,cACJ,OACK;AACD;AAAA,cACJ;AACA,uBAAS,eAAe,IAAI;AAC5B,wBAAU,CAAC;AAAA,YACf;AAAA,UACJ;AACA,cAAI,oBAAoB,gBAAgB,KACpCA,UAAS,qBAAqB,UAAU,SAASA,UAAS,uBAAuB,IAAIA,UAAS,kBAAkB;AAChH,mBAAO,IAAI,WAAW,CAAC,cAAc,IAAI,CAAC,CAAC;AAAA,UAC/C;AACA,iBAAO;AAAA,QACX;AAYA,QAAAA,UAAS,uBAAuB,SAAU,UAAU,SAAS,uBAAuB;AAChF,cAAI,cAAc,SAAS;AAC3B,cAAI,QAAQ;AACZ,cAAI,gBAAgB;AACpB,mBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AAClC,qBAAS,SAAS,CAAC;AACnB,6BAAiB,QAAQ,CAAC;AAAA,UAC9B;AACA,cAAI,QAAQ,eAAe;AAGvB;AAAA;AAAA,cAAmC;AAAA;AAAA,UACvC;AAIA,cAAI,eAAe,QAAQ;AAC3B,mCAAyB;AACzB,cAAI,gBAAgB;AACpB,mBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AAClC,gBAAI,UAAU,SAAS,CAAC;AACxB,gBAAI,gBAAgB,QAAQ,CAAC,IAAI;AACjC,gBAAI,WAAW,UAAU,gBAAgB,UAAU,gBAAgB,gBAAgB;AACnF,gBAAI,WAAW,uBAAuB;AAClC;AAAA;AAAA,gBAAmC;AAAA;AAAA,YACvC;AACA,6BAAiB;AAAA,UACrB;AACA,iBAAO,gBAAgB;AAAA,QAC3B;AACA,QAAAA,UAAS,wBAAwB,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAC7D,QAAAA,UAAS,uBAAuB,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5D,QAAAA,UAAS,mBAAmB;AAC5B,QAAAA,UAAS,0BAA0B;AAGnC,QAAAA,UAAS,gBAAgB,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAEjE,QAAAA,UAAS,eAAe,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACnE,QAAAA,UAAS,kBAAkB;AAC3B,QAAAA,UAAS,oBAAoB;AAG7B,QAAAA,UAAS,wBAAwB;AAGjC,QAAAA,UAAS,WAAW;AACpB,QAAAA,UAAS,qBAAqB;AAC9B,eAAOA;AAAA,MACX,EAAE;AACF,MAAOC,oBAAQD;AAAA;AAAA;;;AChVf,MAeIK,YAmBA,aA8OG;AAhRP;AAAA;AA2BA;AACA;AACA;AAdA,MAAIA,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUC,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AASA,MAAI;AAAA,MAA6B,WAAY;AACzC,iBAASC,aAAY,OAAO,cAAc;AACtC,cAAI,aAAa,WAAW,GAAG;AAC3B,kBAAM,IAAI,iCAAyB;AAAA,UACvC;AACA,eAAK,QAAQ;AACb,cAAI;AAAA;AAAA,YAA6B,aAAa;AAAA;AAC9C,cAAI,qBAAqB,KAAK,aAAa,CAAC,MAAM,GAAG;AAEjD,gBAAI;AAAA;AAAA,cAAuB;AAAA;AAC3B,mBAAO,eAAe,sBAAsB,aAAa,YAAY,MAAM,GAAG;AAC1E;AAAA,YACJ;AACA,gBAAI,iBAAiB,oBAAoB;AACrC,mBAAK,eAAe,IAAI,WAAW,CAAC,CAAC,CAAC;AAAA,YAC1C,OACK;AACD,mBAAK,eAAe,IAAI,WAAW,qBAAqB,YAAY;AACpE,6BAAO,UAAU,cAAc,cAAc,KAAK,cAAc,GAAG,KAAK,aAAa,MAAM;AAAA,YAC/F;AAAA,UACJ,OACK;AACD,iBAAK,eAAe;AAAA,UACxB;AAAA,QACJ;AACA,QAAAA,aAAY,UAAU,kBAAkB,WAAY;AAChD,iBAAO,KAAK;AAAA,QAChB;AAIA,QAAAA,aAAY,UAAU,YAAY,WAAY;AAC1C,iBAAO,KAAK,aAAa,SAAS;AAAA,QACtC;AAIA,QAAAA,aAAY,UAAU,SAAS,WAAY;AACvC,iBAAO,KAAK,aAAa,CAAC,MAAM;AAAA,QACpC;AAIA,QAAAA,aAAY,UAAU,iBAAiB,SAAU,QAAQ;AACrD,iBAAO,KAAK,aAAa,KAAK,aAAa,SAAS,IAAI,MAAM;AAAA,QAClE;AAIA,QAAAA,aAAY,UAAU,aAAa,SAAUC,IAAG;AAC5C,cAAI,KAAKC;AACT,cAAID,OAAM,GAAG;AAET,mBAAO,KAAK,eAAe,CAAC;AAAA,UAChC;AACA,cAAIA,OAAM,GAAG;AAET,gBAAI;AAAA;AAAA,cAAc;AAAA;AAClB,gBAAI;AACA,uBAAS,KAAKH,WAAS,KAAK,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AACjF,oBAAI,cAAc,GAAG;AACrB,sBAAM,KAAK,MAAM,IAAI,KAAK,WAAW;AAAA,cACzC;AAAA,YACJ,SACO,OAAO;AAAE,oBAAM,EAAE,OAAO,MAAM;AAAA,YAAG,UACxC;AACI,kBAAI;AACA,oBAAI,MAAM,CAAC,GAAG,SAASI,MAAK,GAAG;AAAS,kBAAAA,IAAG,KAAK,EAAE;AAAA,cACtD,UACA;AAAU,oBAAI;AAAK,wBAAM,IAAI;AAAA,cAAO;AAAA,YACxC;AACA,mBAAO;AAAA,UACX;AACA,cAAI;AAAA;AAAA,YAAiB,KAAK,aAAa,CAAC;AAAA;AACxC,cAAI;AAAA;AAAA,YAAe,KAAK,aAAa;AAAA;AACrC,mBAAS,IAAY,GAAG,IAAI,MAAM,KAAK;AACnC,qBAAS,KAAK,MAAM,IAAI,KAAK,MAAM,SAASD,IAAG,MAAM,GAAG,KAAK,aAAa,CAAC,CAAC;AAAA,UAChF;AACA,iBAAO;AAAA,QACX;AACA,QAAAD,aAAY,UAAU,MAAM,SAAU,OAAO;AACzC,cAAI,CAAC,KAAK,MAAM,OAAO,MAAM,KAAK,GAAG;AACjC,kBAAM,IAAI,iCAAyB,+CAA+C;AAAA,UACtF;AACA,cAAI,KAAK,OAAO,GAAG;AACf,mBAAO;AAAA,UACX;AACA,cAAI,MAAM,OAAO,GAAG;AAChB,mBAAO;AAAA,UACX;AACA,cAAI,sBAAsB,KAAK;AAC/B,cAAI,qBAAqB,MAAM;AAC/B,cAAI,oBAAoB,SAAS,mBAAmB,QAAQ;AACxD,gBAAI,OAAO;AACX,kCAAsB;AACtB,iCAAqB;AAAA,UACzB;AACA,cAAI,UAAU,IAAI,WAAW,mBAAmB,MAAM;AACtD,cAAI;AAAA;AAAA,YAAqB,mBAAmB,SAAS,oBAAoB;AAAA;AAEzE,yBAAO,UAAU,oBAAoB,GAAG,SAAS,GAAG,UAAU;AAC9D,mBAAS,IAAY,YAAY,IAAI,mBAAmB,QAAQ,KAAK;AACjE,oBAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,oBAAoB,IAAI,UAAU,GAAG,mBAAmB,CAAC,CAAC;AAAA,UAC1F;AACA,iBAAO,IAAIA,aAAY,KAAK,OAAO,OAAO;AAAA,QAC9C;AACA,QAAAA,aAAY,UAAU,WAAW,SAAU,OAAO;AAC9C,cAAI,CAAC,KAAK,MAAM,OAAO,MAAM,KAAK,GAAG;AACjC,kBAAM,IAAI,iCAAyB,+CAA+C;AAAA,UACtF;AACA,cAAI,MAAM,OAAO,GAAG;AAChB,mBAAO;AAAA,UACX;AACA,iBAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAAA,QACpC;AACA,QAAAA,aAAY,UAAU,WAAW,SAAU,OAAO;AAC9C,cAAI,iBAAiBA,cAAa;AAC9B,mBAAO,KAAK,cAAc,KAAK;AAAA,UACnC;AACA,iBAAO,KAAK,eAAe,KAAK;AAAA,QACpC;AACA,QAAAA,aAAY,UAAU,gBAAgB,SAAU,OAAO;AACnD,cAAI,CAAC,KAAK,MAAM,OAAO,MAAM,KAAK,GAAG;AACjC,kBAAM,IAAI,iCAAyB,+CAA+C;AAAA,UACtF;AACA,cAAI,KAAK,OAAO,KAAK,MAAM,OAAO,GAAG;AAEjC,mBAAO,IAAIA,aAAY,KAAK,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAAA,UAC1D;AACA,cAAI,gBAAgB,KAAK;AACzB,cAAI;AAAA;AAAA,YAAkB,cAAc;AAAA;AACpC,cAAI,gBAAgB,MAAM;AAC1B,cAAI;AAAA;AAAA,YAAkB,cAAc;AAAA;AACpC,cAAI,UAAU,IAAI,WAAW,UAAU,UAAU,CAAC;AAClD,mBAAS,IAAY,GAAG,IAAI,SAAS,KAAK;AACtC,gBAAI;AAAA;AAAA,cAAiB,cAAc,CAAC;AAAA;AACpC,qBAAS,IAAY,GAAG,IAAI,SAAS,KAAK;AACtC,sBAAQ,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,IAAI,CAAC,GAAG,KAAK,MAAM,SAAS,QAAQ,cAAc,CAAC,CAAC,CAAC;AAAA,YACjG;AAAA,UACJ;AACA,iBAAO,IAAIA,aAAY,KAAK,OAAO,OAAO;AAAA,QAC9C;AACA,QAAAA,aAAY,UAAU,WAAW,WAAY;AACzC,cAAI;AAAA;AAAA,YAAe,KAAK,aAAa;AAAA;AACrC,cAAI,uBAAuB,IAAI,WAAW,IAAI;AAC9C,mBAAS,IAAY,GAAG,IAAI,MAAM,KAAK;AACnC,iCAAqB,CAAC,IAAI,KAAK,MAAM,SAAS,GAAG,KAAK,aAAa,CAAC,CAAC;AAAA,UACzE;AACA,iBAAO,IAAIA,aAAY,KAAK,OAAO,oBAAoB;AAAA,QAC3D;AACA,QAAAA,aAAY,UAAU,iBAAiB,SAAU,QAAQ;AACrD,cAAI,WAAW,GAAG;AACd,mBAAO,IAAIA,aAAY,KAAK,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAAA,UAC1D;AACA,cAAI,WAAW,GAAG;AACd,mBAAO;AAAA,UACX;AACA,cAAI;AAAA;AAAA,YAAe,KAAK,aAAa;AAAA;AACrC,cAAI,UAAU,IAAI,WAAW,IAAI;AACjC,mBAAS,IAAY,GAAG,IAAI,MAAM,KAAK;AACnC,oBAAQ,CAAC,IAAI,KAAK,MAAM,SAAS,KAAK,aAAa,CAAC,GAAG,MAAM;AAAA,UACjE;AACA,iBAAO,IAAIA,aAAY,KAAK,OAAO,OAAO;AAAA,QAC9C;AACA,QAAAA,aAAY,UAAU,qBAAqB,SAAU,QAAQ,aAAa;AACtE,cAAI,SAAS,GAAG;AACZ,kBAAM,IAAI,iCAAyB;AAAA,UACvC;AACA,cAAI,gBAAgB,GAAG;AACnB,mBAAO,IAAIA,aAAY,KAAK,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAAA,UAC1D;AACA,cAAI;AAAA;AAAA,YAAe,KAAK,aAAa;AAAA;AACrC,cAAI,UAAU,IAAI,WAAW,OAAO,MAAM;AAC1C,mBAAS,IAAY,GAAG,IAAI,MAAM,KAAK;AACnC,oBAAQ,CAAC,IAAI,KAAK,MAAM,SAAS,KAAK,aAAa,CAAC,GAAG,WAAW;AAAA,UACtE;AACA,iBAAO,IAAIA,aAAY,KAAK,OAAO,OAAO;AAAA,QAC9C;AA6BA,QAAAA,aAAY,UAAU,WAAW,WAAY;AACzC,cAAI,SAAS,IAAI;AAAA;AAAA,UAAuC;AACxD,mBAAS,SAAiB,KAAK,UAAU,GAAG,UAAU,GAAG,UAAU;AAC/D,gBAAI;AAAA;AAAA,cAAsB,KAAK,eAAe,MAAM;AAAA;AACpD,gBAAI,gBAAgB,GAAG;AACnB,kBAAI,cAAc,GAAG;AACjB,uBAAO,OAAO,KAAK;AACnB,8BAAc,CAAC;AAAA,cACnB,OACK;AACD,oBAAI,OAAO,OAAO,IAAI,GAAG;AACrB,yBAAO,OAAO,KAAK;AAAA,gBACvB;AAAA,cACJ;AACA,kBAAI,WAAW,KAAK,gBAAgB,GAAG;AACnC,uBAAO,OAAO,WAAW;AAAA,cAC7B;AACA,kBAAI,WAAW,GAAG;AACd,oBAAI,WAAW,GAAG;AACd,yBAAO,OAAO,GAAG;AAAA,gBACrB,OACK;AACD,yBAAO,OAAO,IAAI;AAClB,yBAAO,OAAO,MAAM;AAAA,gBACxB;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO,OAAO,SAAS;AAAA,QAC3B;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,sBAAQ;AAAA;AAAA;;;AChRf,MAEI,aAsCG;AAxCP;AAAA;AAAA;AACA;AACA,MAAI;AAAA,MAA6B,WAAY;AACzC,iBAASG,eAAc;AAAA,QACvB;AACA,QAAAA,aAAY,UAAU,MAAM,SAAUC,IAAG,GAAG;AACxC,kBAAQA,KAAI,KAAK,KAAK;AAAA,QAC1B;AACA,QAAAD,aAAY,UAAU,WAAW,SAAUC,IAAG,GAAG;AAC7C,kBAAQ,KAAK,UAAUA,KAAI,KAAK,KAAK;AAAA,QACzC;AACA,QAAAD,aAAY,UAAU,MAAM,SAAUC,IAAG;AACrC,iBAAO,KAAK,SAASA,EAAC;AAAA,QAC1B;AACA,QAAAD,aAAY,UAAU,MAAM,SAAUC,IAAG;AACrC,cAAIA,OAAM,GAAG;AACT,kBAAM,IAAI,iCAAyB;AAAA,UACvC;AACA,iBAAO,KAAK,SAASA,EAAC;AAAA,QAC1B;AACA,QAAAD,aAAY,UAAU,UAAU,SAAUC,IAAG;AACzC,cAAIA,OAAM,GAAG;AACT,kBAAM,IAAI,4BAAoB;AAAA,UAClC;AACA,iBAAO,KAAK,SAAS,KAAK,UAAU,KAAK,SAASA,EAAC,IAAI,CAAC;AAAA,QAC5D;AACA,QAAAD,aAAY,UAAU,WAAW,SAAUC,IAAG,GAAG;AAC7C,cAAIA,OAAM,KAAK,MAAM,GAAG;AACpB,mBAAO;AAAA,UACX;AACA,iBAAO,KAAK,UAAU,KAAK,SAASA,EAAC,IAAI,KAAK,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE;AAAA,QACnF;AACA,QAAAD,aAAY,UAAU,UAAU,WAAY;AACxC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,aAAY,UAAU,SAAS,SAAU,GAAG;AACxC,iBAAO,MAAM;AAAA,QACjB;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,sBAAQ;AAAA;AAAA;;;ACxCf,MAeIE,aAyBA,WAyCG;AAjFP;AAAA;AA8BA;AACA;AACA;AACA;AAlBA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAaH,MAAI;AAAA,MAA2B,SAAU,QAAQ;AAC7C,QAAAF,YAAUG,YAAW,MAAM;AAE3B,iBAASA,WAAU,SAAS,WAAW;AACnC,cAAI,QAAQ,OAAO,KAAK,IAAI,KAAK;AACjC,gBAAM,UAAU;AAChB,gBAAM,WAAW,IAAI,WAAW,OAAO;AACvC,gBAAM,WAAW,IAAI,WAAW,OAAO;AACvC,cAAI;AAAA;AAAA,YAAY;AAAA;AAChB,mBAAS,IAAY,GAAG,IAAI,SAAS,KAAK;AACtC,kBAAM,SAAS,CAAC,IAAI;AACpB,gBAAK,IAAI,YAAa;AAAA,UAC1B;AACA,mBAAS,IAAY,GAAG,IAAI,UAAU,GAAG,KAAK;AAC1C,kBAAM,SAAS,MAAM,SAAS,CAAC,CAAC,IAAI;AAAA,UACxC;AAEA,gBAAM,OAAO,IAAI,oBAAY,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AACvD,gBAAM,MAAM,IAAI,oBAAY,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AACtD,iBAAO;AAAA,QACX;AACA,QAAAA,WAAU,UAAU,UAAU,WAAY;AACtC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,WAAU,UAAU,SAAS,WAAY;AACrC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,WAAU,UAAU,gBAAgB,SAAU,QAAQ,aAAa;AAC/D,cAAI,SAAS,GAAG;AACZ,kBAAM,IAAI,iCAAyB;AAAA,UACvC;AACA,cAAI,gBAAgB,GAAG;AACnB,mBAAO,KAAK;AAAA,UAChB;AACA,cAAI,eAAe,IAAI,WAAW,SAAS,CAAC;AAC5C,uBAAa,CAAC,IAAI;AAClB,iBAAO,IAAI,oBAAY,MAAM,YAAY;AAAA,QAC7C;AACA,QAAAA,WAAU,YAAY,IAAIA,WAAU,qBAAa,qBAAqB,CAAC;AACvE,eAAOA;AAAA,MACX,EAAE,mBAAW;AACb,MAAO,oBAAQ;AAAA;AAAA;;;ACjFf,MAeIC,YAyBA,iBA6JG;AArMP;AAAA;AA4BA;AACA;AACA;AAfA,MAAIA,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUC,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AAeA,MAAI;AAAA,MAAiC,WAAY;AAC7C,iBAASC,mBAAkB;AACvB,eAAK,QAAQ,kBAAU;AAAA,QAC3B;AAQA,QAAAA,iBAAgB,UAAU,SAAS,SAAU,UAAU,gBAAgB,UAAU;AAC7E,cAAI,KAAKC;AACT,cAAI,OAAO,IAAI,oBAAY,KAAK,OAAO,QAAQ;AAC/C,cAAI,IAAI,IAAI,WAAW,cAAc;AACrC,cAAIC,SAAQ;AACZ,mBAAS,IAAY,gBAAgB,IAAI,GAAG,KAAK;AAC7C,gBAAI,aAAa,KAAK,WAAW,KAAK,MAAM,IAAI,CAAC,CAAC;AAClD,cAAE,iBAAiB,CAAC,IAAI;AACxB,gBAAI,eAAe,GAAG;AAClB,cAAAA,SAAQ;AAAA,YACZ;AAAA,UACJ;AACA,cAAI,CAACA,QAAO;AACR,mBAAO;AAAA,UACX;AACA,cAAI,cAAc,KAAK,MAAM,OAAO;AACpC,cAAI,YAAY,MAAM;AAClB,gBAAI;AACA,uBAAS,aAAaJ,WAAS,QAAQ,GAAG,eAAe,WAAW,KAAK,GAAG,CAAC,aAAa,MAAM,eAAe,WAAW,KAAK,GAAG;AAC9H,oBAAI,UAAU,aAAa;AAC3B,oBAAI,IAAI,KAAK,MAAM,IAAI,SAAS,SAAS,IAAI,OAAO;AAEpD,oBAAI,OAAO,IAAI,oBAAY,KAAK,OAAO,IAAI,WAAW,CAAC,KAAK,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrF,8BAAc,YAAY,SAAS,IAAI;AAAA,cAC3C;AAAA,YACJ,SACO,OAAO;AAAE,oBAAM,EAAE,OAAO,MAAM;AAAA,YAAG,UACxC;AACI,kBAAI;AACA,oBAAI,gBAAgB,CAAC,aAAa,SAASG,MAAK,WAAW;AAAS,kBAAAA,IAAG,KAAK,UAAU;AAAA,cAC1F,UACA;AAAU,oBAAI;AAAK,wBAAM,IAAI;AAAA,cAAO;AAAA,YACxC;AAAA,UACJ;AACA,cAAI,WAAW,IAAI,oBAAY,KAAK,OAAO,CAAC;AAE5C,cAAI,aAAa,KAAK,sBAAsB,KAAK,MAAM,cAAc,gBAAgB,CAAC,GAAG,UAAU,cAAc;AACjH,cAAI,QAAQ,WAAW,CAAC;AACxB,cAAI,QAAQ,WAAW,CAAC;AAExB,cAAI,iBAAiB,KAAK,mBAAmB,KAAK;AAClD,cAAI,kBAAkB,KAAK,oBAAoB,OAAO,OAAO,cAAc;AAC3E,mBAAS,IAAY,GAAG,IAAI,eAAe,QAAQ,KAAK;AACpD,gBAAI,WAAW,SAAS,SAAS,IAAI,KAAK,MAAM,IAAI,eAAe,CAAC,CAAC;AACrE,gBAAI,WAAW,GAAG;AACd,oBAAM,0BAAkB,oBAAoB;AAAA,YAChD;AACA,qBAAS,QAAQ,IAAI,KAAK,MAAM,SAAS,SAAS,QAAQ,GAAG,gBAAgB,CAAC,CAAC;AAAA,UACnF;AACA,iBAAO,eAAe;AAAA,QAC1B;AAWA,QAAAD,iBAAgB,UAAU,wBAAwB,SAAUG,IAAG,GAAG,GAAG;AAEjE,cAAIA,GAAE,UAAU,IAAI,EAAE,UAAU,GAAG;AAC/B,gBAAI,OAAOA;AACX,YAAAA,KAAI;AACJ,gBAAI;AAAA,UACR;AACA,cAAI,QAAQA;AACZ,cAAI,IAAI;AACR,cAAI,QAAQ,KAAK,MAAM,QAAQ;AAC/B,cAAI,IAAI,KAAK,MAAM,OAAO;AAE1B,iBAAO,EAAE,UAAU,KAAK,KAAK,MAAM,IAAI,CAAC,GAAG;AACvC,gBAAI,YAAY;AAChB,gBAAI,YAAY;AAChB,oBAAQ;AACR,oBAAQ;AAER,gBAAI,MAAM,OAAO,GAAG;AAEhB,oBAAM,0BAAkB,oBAAoB;AAAA,YAChD;AACA,gBAAI;AACJ,gBAAI,IAAI,KAAK,MAAM,QAAQ;AAC3B,gBAAI,yBAAyB,MAAM,eAAe,MAAM,UAAU,CAAC;AACnE,gBAAI,aAAa,KAAK,MAAM,QAAQ,sBAAsB;AAC1D,mBAAO,EAAE,UAAU,KAAK,MAAM,UAAU,KAAK,CAAC,EAAE,OAAO,GAAG;AACtD,kBAAI,aAAa,EAAE,UAAU,IAAI,MAAM,UAAU;AACjD,kBAAI,QAAQ,KAAK,MAAM,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC,GAAG,UAAU;AAC3E,kBAAI,EAAE,IAAI,KAAK,MAAM,cAAc,YAAY,KAAK,CAAC;AACrD,kBAAI,EAAE,SAAS,MAAM,mBAAmB,YAAY,KAAK,CAAC;AAAA,YAC9D;AACA,gBAAI,EAAE,SAAS,KAAK,EAAE,SAAS,SAAS,EAAE,SAAS;AAAA,UACvD;AACA,cAAI,mBAAmB,EAAE,eAAe,CAAC;AACzC,cAAI,qBAAqB,GAAG;AACxB,kBAAM,0BAAkB,oBAAoB;AAAA,UAChD;AACA,cAAI,UAAU,KAAK,MAAM,QAAQ,gBAAgB;AACjD,cAAI,QAAQ,EAAE,SAAS,OAAO;AAC9B,cAAI,QAAQ,EAAE,SAAS,OAAO;AAC9B,iBAAO,CAAC,OAAO,KAAK;AAAA,QACxB;AAMA,QAAAH,iBAAgB,UAAU,qBAAqB,SAAU,cAAc;AAEnE,cAAI,YAAY,aAAa,UAAU;AACvC,cAAI,SAAS,IAAI,WAAW,SAAS;AACrC,cAAI,IAAI;AACR,mBAAS,IAAY,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK,IAAI,WAAW,KAAK;AACpE,gBAAI,aAAa,WAAW,CAAC,MAAM,GAAG;AAClC,qBAAO,CAAC,IAAI,KAAK,MAAM,QAAQ,CAAC;AAChC;AAAA,YACJ;AAAA,UACJ;AACA,cAAI,MAAM,WAAW;AACjB,kBAAM,0BAAkB,oBAAoB;AAAA,UAChD;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,iBAAgB,UAAU,sBAAsB,SAAU,gBAAgB,cAAc,gBAAgB;AACpG,cAAI,qBAAqB,aAAa,UAAU;AAChD,cAAI,+BAA+B,IAAI,WAAW,kBAAkB;AACpE,mBAAS,IAAY,GAAG,KAAK,oBAAoB,KAAK;AAClD,yCAA6B,qBAAqB,CAAC,IAC/C,KAAK,MAAM,SAAS,GAAG,aAAa,eAAe,CAAC,CAAC;AAAA,UAC7D;AACA,cAAI,mBAAmB,IAAI,oBAAY,KAAK,OAAO,4BAA4B;AAE/E,cAAI,IAAI,eAAe;AACvB,cAAI,SAAS,IAAI,WAAW,CAAC;AAC7B,mBAAS,IAAY,GAAG,IAAI,GAAG,KAAK;AAChC,gBAAI,YAAY,KAAK,MAAM,QAAQ,eAAe,CAAC,CAAC;AACpD,gBAAI,YAAY,KAAK,MAAM,SAAS,GAAG,eAAe,WAAW,SAAS,CAAC;AAC3E,gBAAI,cAAc,KAAK,MAAM,QAAQ,iBAAiB,WAAW,SAAS,CAAC;AAC3E,mBAAO,CAAC,IAAI,KAAK,MAAM,SAAS,WAAW,WAAW;AAAA,UAC1D;AACA,iBAAO;AAAA,QACX;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,0BAAQ;AAAA;AAAA;;;ACrMf,MAuBI,aAkIG;AAzJP;AAAA;AAiBA;AAEA;AAIA,MAAI;AAAA,MAA6B,WAAY;AACzC,iBAASI,aAAY,OAAO,SAAS,YAAY,UAAU,aAAa;AACpE,cAAI,iBAAiBA,cAAa;AAC9B,iBAAK,cAAc,KAAK;AAAA,UAC5B,OACK;AACD,iBAAK,cAAc,OAAO,SAAS,YAAY,UAAU,WAAW;AAAA,UACxE;AAAA,QACJ;AAWA,QAAAA,aAAY,UAAU,gBAAgB,SAAU,OAAO,SAAS,YAAY,UAAU,aAAa;AAC/F,cAAI,kBAAkB,WAAW,QAAQ,cAAc;AACvD,cAAI,mBAAmB,YAAY,QAAQ,eAAe;AAC1D,cAAI,mBAAmB,kBAAkB;AACrC,kBAAM,IAAI,0BAAkB;AAAA,UAChC;AACA,cAAI,iBAAiB;AACjB,sBAAU,IAAI,oBAAY,GAAG,SAAS,KAAK,CAAC;AAC5C,yBAAa,IAAI,oBAAY,GAAG,YAAY,KAAK,CAAC;AAAA,UACtD,WACS,kBAAkB;AACvB,uBAAW,IAAI,oBAAY,MAAM,SAAS,IAAI,GAAG,QAAQ,KAAK,CAAC;AAC/D,0BAAc,IAAI,oBAAY,MAAM,SAAS,IAAI,GAAG,WAAW,KAAK,CAAC;AAAA,UACzE;AACA,eAAK,QAAQ;AACb,eAAK,UAAU;AACf,eAAK,aAAa;AAClB,eAAK,WAAW;AAChB,eAAK,cAAc;AACnB,eAAK,OAAO,KAAK,MAAM,KAAK,IAAI,QAAQ,KAAK,GAAG,WAAW,KAAK,CAAC,CAAC;AAClE,eAAK,OAAO,KAAK,MAAM,KAAK,IAAI,SAAS,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC;AACpE,eAAK,OAAO,KAAK,MAAM,KAAK,IAAI,QAAQ,KAAK,GAAG,SAAS,KAAK,CAAC,CAAC;AAChE,eAAK,OAAO,KAAK,MAAM,KAAK,IAAI,WAAW,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC;AAAA,QAC1E;AACA,QAAAA,aAAY,UAAU,gBAAgB,SAAU,aAAa;AACzD,eAAK,QAAQ,YAAY;AACzB,eAAK,UAAU,YAAY,WAAW;AACtC,eAAK,aAAa,YAAY,cAAc;AAC5C,eAAK,WAAW,YAAY,YAAY;AACxC,eAAK,cAAc,YAAY,eAAe;AAC9C,eAAK,OAAO,YAAY,QAAQ;AAChC,eAAK,OAAO,YAAY,QAAQ;AAChC,eAAK,OAAO,YAAY,QAAQ;AAChC,eAAK,OAAO,YAAY,QAAQ;AAAA,QACpC;AAIA,QAAAA,aAAY,QAAQ,SAAU,SAAS,UAAU;AAC7C,cAAI,WAAW,MAAM;AACjB,mBAAO;AAAA,UACX;AACA,cAAI,YAAY,MAAM;AAClB,mBAAO;AAAA,UACX;AACA,iBAAO,IAAIA,aAAY,QAAQ,OAAO,QAAQ,SAAS,QAAQ,YAAY,SAAS,UAAU,SAAS,WAAW;AAAA,QACtH;AAIA,QAAAA,aAAY,UAAU,iBAAiB,SAAU,kBAAkB,gBAAgB,QAAQ;AACvF,cAAI,aAAa,KAAK;AACtB,cAAI,gBAAgB,KAAK;AACzB,cAAI,cAAc,KAAK;AACvB,cAAI,iBAAiB,KAAK;AAC1B,cAAI,mBAAmB,GAAG;AACtB,gBAAI,QAAQ,SAAS,KAAK,UAAU,KAAK;AACzC,gBAAI,UAAU,KAAK,MAAM,MAAM,KAAK,IAAI,gBAAgB;AACxD,gBAAI,UAAU,GAAG;AACb,wBAAU;AAAA,YACd;AACA,gBAAI,SAAS,IAAI,oBAAY,MAAM,KAAK,GAAG,OAAO;AAClD,gBAAI,QAAQ;AACR,2BAAa;AAAA,YACjB,OACK;AACD,4BAAc;AAAA,YAClB;AAAA,UACJ;AACA,cAAI,iBAAiB,GAAG;AACpB,gBAAI,SAAS,SAAS,KAAK,aAAa,KAAK;AAC7C,gBAAI,UAAU,KAAK,MAAM,OAAO,KAAK,IAAI,cAAc;AACvD,gBAAI,WAAW,KAAK,MAAM,UAAU,GAAG;AACnC,wBAAU,KAAK,MAAM,UAAU,IAAI;AAAA,YACvC;AACA,gBAAI,YAAY,IAAI,oBAAY,OAAO,KAAK,GAAG,OAAO;AACtD,gBAAI,QAAQ;AACR,8BAAgB;AAAA,YACpB,OACK;AACD,+BAAiB;AAAA,YACrB;AAAA,UACJ;AACA,iBAAO,IAAIA,aAAY,KAAK,OAAO,YAAY,eAAe,aAAa,cAAc;AAAA,QAC7F;AACA,QAAAA,aAAY,UAAU,UAAU,WAAY;AACxC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,aAAY,UAAU,UAAU,WAAY;AACxC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,aAAY,UAAU,UAAU,WAAY;AACxC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,aAAY,UAAU,UAAU,WAAY;AACxC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,aAAY,UAAU,aAAa,WAAY;AAC3C,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,aAAY,UAAU,cAAc,WAAY;AAC5C,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,aAAY,UAAU,gBAAgB,WAAY;AAC9C,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,aAAY,UAAU,iBAAiB,WAAY;AAC/C,iBAAO,KAAK;AAAA,QAChB;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,sBAAQ;AAAA;AAAA;;;ACzJf,MAmBI,iBAyBG;AA5CP;AAAA;AAmBA,MAAI;AAAA,MAAiC,WAAY;AAC7C,iBAASC,iBAAgB,aAAa,mBAAmB,mBAAmB,sBAAsB;AAC9F,eAAK,cAAc;AACnB,eAAK,uBAAuB;AAC5B,eAAK,oBAAoB;AACzB,eAAK,oBAAoB;AACzB,eAAK,WAAW,oBAAoB;AAAA,QACxC;AACA,QAAAA,iBAAgB,UAAU,iBAAiB,WAAY;AACnD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,iBAAgB,UAAU,0BAA0B,WAAY;AAC5D,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,iBAAgB,UAAU,cAAc,WAAY;AAChD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,iBAAgB,UAAU,uBAAuB,WAAY;AACzD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,iBAAgB,UAAU,uBAAuB,WAAY;AACzD,iBAAO,KAAK;AAAA,QAChB;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,0BAAQ;AAAA;AAAA;;;AC5Cf,MAGI,WA0EG;AA7EP;AAAA;AAGA,MAAI;AAAA,MAA2B,WAAY;AACvC,iBAASC,aAAY;AACjB,eAAK,SAAS;AAAA,QAClB;AAQA,QAAAA,WAAU,OAAO,SAAU,KAAK,KAAK;AACjC,cAAI,IAAI;AACR,mBAASC,UAAS,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI;AACvC,gBAAI,QAAQ;AACR,qBAAO;AACX,gBAAI,IAAI,EAAE,CAAC,MAAM;AACb,qBAAO;AACX,kBAAM,KAAK,SAAS,GAAG,OAAO,CAAC,CAAC,IAAI;AACpC,gBAAI,OAAO,KAAK,SAAS,GAAG,OAAO,CAAC,CAAC,IAAI;AACzC,gBAAI;AACJ,oBAAQ,IAAI;AAAA,cACR,KAAK;AACD,sBAAM,IAAI,CAAC;AACX;AAAA,cACJ,KAAK;AACD,sBAAM,IAAI,CAAC,EAAE,CAAC;AACd;AAAA,cACJ,KAAK;AACD,sBAAM,WAAW,IAAI,CAAC,CAAC,EAAE,QAAQ,GAAG;AACpC;AAAA,cACJ,KAAK;AACD,sBAAM,WAAW,IAAI,CAAC,CAAC,EAAE,YAAY,GAAG;AACxC;AAAA,cACJ,KAAK;AACD,sBAAM,WAAW,IAAI,CAAC,CAAC,EAAE,cAAc,GAAG;AAC1C;AAAA,cACJ,KAAK;AACD,sBAAM,SAAS,IAAI,CAAC,CAAC,EAAE,SAAS,OAAO,OAAO,EAAE;AAChD;AAAA,cACJ,KAAK;AACD,sBAAM,WAAW,SAAS,IAAI,CAAC,GAAG,OAAO,OAAO,EAAE,EAAE,YAAY,GAAG,CAAC,EAAE,QAAQ,CAAC;AAC/E;AAAA,YACR;AACA,kBAAM,OAAO,QAAQ,WAAW,KAAK,UAAU,GAAG,KAAK,CAAC,KAAK,SAAS,IAAI;AAC1E,gBAAI,OAAO,SAAS,EAAE;AACtB,gBAAI,KAAK,MAAO,GAAG,CAAC,IAAI,OAAQ,MAAM,MAAM;AAC5C,mBAAO,IAAI,SAAS;AAChB,oBAAM,OAAO,SAAY,MAAM,KAAK,KAAK;AAC7C,mBAAO;AAAA,UACX;AACA,cAAI,QAAQ;AACZ,iBAAO,IAAI,QAAQ,OAAOA,SAAQ;AAAA,QACtC;AAMA,QAAAD,WAAU,UAAU,SAAS,SAAU,QAAQ;AAC3C,cAAI,OAAO,CAAC;AACZ,mBAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC1C,iBAAK,KAAK,CAAC,IAAI,UAAU,EAAE;AAAA,UAC/B;AACA,eAAK,UAAUA,WAAU,KAAK,QAAQ,IAAI;AAAA,QAC9C;AAIA,QAAAA,WAAU,UAAU,WAAW,WAAY;AACvC,iBAAO,KAAK;AAAA,QAChB;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,oBAAQ;AAAA;AAAA;;;AC7Ef,MAeIE,YAkBA,uBAuEG;AAxGP;AAAA;AA4BA;AACA;AAdA,MAAIA,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUC,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AAQA,MAAI;AAAA,MAAuC,WAAY;AACnD,iBAASC,uBAAsB,aAAa;AACxC,eAAK,cAAc,IAAI,oBAAY,WAAW;AAE9C,eAAK,YAAY,IAAI,MAAM,YAAY,QAAQ,IAAI,YAAY,QAAQ,IAAI,CAAC;AAAA,QAChF;AACU,QAAAA,uBAAsB,UAAU,oBAAoB,SAAU,UAAU;AAC9E,cAAI,WAAW,KAAK,YAAY,QAAQ;AACxC,cAAI,YAAY,MAAM;AAClB,mBAAO;AAAA,UACX;AACA,mBAAS,IAAI,GAAG,IAAIA,uBAAsB,qBAAqB,KAAK;AAChE,gBAAI,eAAe,KAAK,wBAAwB,QAAQ,IAAI;AAC5D,gBAAI,gBAAgB,GAAG;AACnB,yBAAW,KAAK,UAAU,YAAY;AACtC,kBAAI,YAAY,MAAM;AAClB,uBAAO;AAAA,cACX;AAAA,YACJ;AACA,2BAAe,KAAK,wBAAwB,QAAQ,IAAI;AACxD,gBAAI,eAAe,KAAK,UAAU,QAAQ;AACtC,yBAAW,KAAK,UAAU,YAAY;AACtC,kBAAI,YAAY,MAAM;AAClB,uBAAO;AAAA,cACX;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AACc,QAAAA,uBAAsB,UAAU,0BAA0B,SAAU,UAAU;AACxF,iBAAO,WAAW,KAAK,YAAY,QAAQ;AAAA,QAC/C;AACe,QAAAA,uBAAsB,UAAU,cAAc,SAAU,UAAU,UAAU;AACvF,eAAK,UAAU,KAAK,wBAAwB,QAAQ,CAAC,IAAI;AAAA,QAC7D;AACU,QAAAA,uBAAsB,UAAU,cAAc,SAAU,UAAU;AACxE,iBAAO,KAAK,UAAU,KAAK,wBAAwB,QAAQ,CAAC;AAAA,QAChE;AACU,QAAAA,uBAAsB,UAAU,iBAAiB,WAAY;AACnE,iBAAO,KAAK;AAAA,QAChB;AACU,QAAAA,uBAAsB,UAAU,eAAe,WAAY;AACjE,iBAAO,KAAK;AAAA,QAChB;AAEA,QAAAA,uBAAsB,UAAU,WAAW,WAAY;AACnD,cAAI,KAAKC;AACT,cAAI,YAAY,IAAI,kBAAU;AAC9B,cAAI,MAAM;AACV,cAAI;AACA,qBAAS,KAAKH,WAAS,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AAC9E,kBAAI,WAAW,GAAG;AAClB,kBAAI,YAAY,MAAM;AAClB,0BAAU,OAAO,kBAAkB,KAAK;AACxC;AAAA,cACJ;AACA,wBAAU,OAAO,kBAAkB,OAAO,SAAS,aAAa,GAAG,SAAS,SAAS,CAAC;AAAA,YAC1F;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,MAAM,CAAC,GAAG,SAASG,MAAK,GAAG;AAAS,gBAAAA,IAAG,KAAK,EAAE;AAAA,YACtD,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AACA,iBAAO,UAAU,SAAS;AAAA,QAC9B;AACA,QAAAD,uBAAsB,sBAAsB;AAC5C,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,gCAAQ;AAAA;AAAA;;;ACxGf,MAeIE,YAWA,QA2BA,cA0DG;AA/GP;AAAA;AA4CA;AA7BA,MAAIA,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUC,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AACA,MAAI,SAAkC,SAAU,GAAG,GAAG;AAClD,YAAIA,KAAI,OAAO,WAAW,cAAc,EAAE,OAAO,QAAQ;AACzD,YAAI,CAACA;AAAG,iBAAO;AACf,YAAI,IAAIA,GAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;AAC/B,YAAI;AACA,kBAAQ,MAAM,UAAU,MAAM,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG;AAAM,eAAG,KAAK,EAAE,KAAK;AAAA,QAC7E,SACOC,QAAO;AAAE,cAAI,EAAE,OAAOA,OAAM;AAAA,QAAG,UACtC;AACI,cAAI;AACA,gBAAI,KAAK,CAAC,EAAE,SAASD,KAAI,EAAE,QAAQ;AAAI,cAAAA,GAAE,KAAK,CAAC;AAAA,UACnD,UACA;AAAU,gBAAI;AAAG,oBAAM,EAAE;AAAA,UAAO;AAAA,QACpC;AACA,eAAO;AAAA,MACX;AAYA,MAAI;AAAA,MAA8B,WAAY;AAC1C,iBAASE,gBAAe;AACpB,eAAK,SAAS,oBAAI,IAAI;AAAA,QAC1B;AAIA,QAAAA,cAAa,UAAU,WAAW,SAAU,OAAO;AAC/C,kBAAQ,KAAK,MAAM,KAAK;AACxB,cAAI,aAAa,KAAK,OAAO,IAAI,KAAK;AACtC,cAAI,cAAc,MAAM;AACpB,yBAAa;AAAA,UACjB;AACA;AACA,eAAK,OAAO,IAAI,OAAO,UAAU;AAAA,QACrC;AAKA,QAAAA,cAAa,UAAU,WAAW,WAAY;AAC1C,cAAI,KAAKC;AACT,cAAI,gBAAgB;AACpB,cAAI,SAAS,IAAI,MAAM;AACvB,cAAI,UAAU,SAAUC,MAAKC,QAAO;AAChC,gBAAI,QAAQ;AAAA,cACR,QAAQ,WAAY;AAAE,uBAAOD;AAAA,cAAK;AAAA,cAClC,UAAU,WAAY;AAAE,uBAAOC;AAAA,cAAO;AAAA,YAC1C;AACA,gBAAI,MAAM,SAAS,IAAI,eAAe;AAClC,8BAAgB,MAAM,SAAS;AAC/B,uBAAS,CAAC;AACV,qBAAO,KAAK,MAAM,OAAO,CAAC;AAAA,YAC9B,WACS,MAAM,SAAS,MAAM,eAAe;AACzC,qBAAO,KAAK,MAAM,OAAO,CAAC;AAAA,YAC9B;AAAA,UACJ;AACA,cAAI;AACA,qBAAS,KAAKN,WAAS,KAAK,OAAO,QAAQ,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AACrF,kBAAI,KAAK,OAAO,GAAG,OAAO,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC;AACvD,sBAAQ,KAAK,KAAK;AAAA,YACtB;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,MAAM,CAAC,GAAG,SAASI,MAAK,GAAG;AAAS,gBAAAA,IAAG,KAAK,EAAE;AAAA,YACtD,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AACA,iBAAO,qBAAa,WAAW,MAAM;AAAA,QACzC;AACA,QAAAD,cAAa,UAAU,gBAAgB,SAAU,OAAO;AACpD,iBAAO,KAAK,OAAO,IAAI,KAAK;AAAA,QAChC;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,uBAAQ;AAAA;AAAA;;;AC/Gf,MAeII,aAaAC,YAmBA,mCA0QG;AAzTP;AAAA;AAwCA;AACA;AACA;AACA;AA5BA,MAAID,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUE,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AACH,MAAIF,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUG,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AASA,MAAI;AAAA,MAAmD,SAAU,QAAQ;AACrE,QAAAJ,YAAUK,oCAAmC,MAAM;AACnD,iBAASA,mCAAkC,aAAa,QAAQ;AAC5D,cAAI,QAAQ,OAAO,KAAK,MAAM,WAAW,KAAK;AAC9C,gBAAM,UAAU;AAChB,iBAAO;AAAA,QACX;AACA,QAAAA,mCAAkC,UAAU,gBAAgB,WAAY;AACpE,cAAI,KAAKC;AACT,cAAI;AACA,qBAAS,KAAKL,WAAS,KAAK,aAAa,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AACnF,kBAAI,WAAW,GAAG;AAClB,kBAAI,YAAY,MAAM;AAClB,yBAAS,iCAAiC;AAAA,cAC9C;AAAA,YACJ;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,MAAM,CAAC,GAAG,SAASK,MAAK,GAAG;AAAS,gBAAAA,IAAG,KAAK,EAAE;AAAA,YACtD,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AAAA,QACJ;AAKA,QAAAD,mCAAkC,UAAU,0CAA0C,SAAU,iBAAiB;AAC7G,cAAI,YAAY,KAAK,aAAa;AAClC,eAAK,cAAc;AACnB,eAAK,yBAAyB,WAAW,eAAe;AACxD,cAAI,cAAc,KAAK,eAAe;AACtC,cAAI,MAAM,KAAK,UAAU,YAAY,WAAW,IAAI,YAAY,YAAY;AAC5E,cAAI,SAAS,KAAK,UAAU,YAAY,cAAc,IAAI,YAAY,eAAe;AACrF,cAAI,WAAW,KAAK,wBAAwB,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC;AAClE,cAAI,UAAU,KAAK,wBAAwB,KAAK,MAAM,OAAO,KAAK,CAAC,CAAC;AAIpE,cAAI,aAAa;AACjB,cAAI,eAAe;AACnB,cAAI,mBAAmB;AACvB,mBAAS,eAAuB,UAAU,eAAe,SAAS,gBAAgB;AAC9E,gBAAI,UAAU,YAAY,KAAK,MAAM;AACjC;AAAA,YACJ;AACA,gBAAI,WAAW,UAAU,YAAY;AAQrC,gBAAI,gBAAgB,SAAS,aAAa,IAAI;AAE9C,gBAAI,kBAAkB,GAAG;AACrB;AAAA,YACJ,WACS,kBAAkB,GAAG;AAC1B,6BAAe,KAAK,IAAI,cAAc,gBAAgB;AACtD,iCAAmB;AACnB,2BAAa,SAAS,aAAa;AAAA,YACvC,WACS,gBAAgB,KACrB,SAAS,aAAa,KAAK,gBAAgB,YAAY,KACvD,gBAAgB,cAAc;AAC9B,wBAAU,YAAY,IAAI;AAAA,YAC9B,OACK;AACD,kBAAI,cAAc;AAClB,kBAAI,eAAe,GAAG;AAClB,+BAAe,eAAe,KAAK;AAAA,cACvC,OACK;AACD,8BAAc;AAAA,cAClB;AACA,kBAAI,6BAA6B,eAAe;AAChD,uBAAS,IAAY,GAAG,KAAK,eAAe,CAAC,4BAA4B,KAAK;AAG1E,6CAA6B,UAAU,eAAe,CAAC,KAAK;AAAA,cAChE;AACA,kBAAI,4BAA4B;AAC5B,0BAAU,YAAY,IAAI;AAAA,cAC9B,OACK;AACD,6BAAa,SAAS,aAAa;AACnC,mCAAmB;AAAA,cACvB;AAAA,YACJ;AAAA,UACJ;AAAA,QAEJ;AACA,QAAAA,mCAAkC,UAAU,gBAAgB,WAAY;AACpE,cAAI,KAAKC;AACT,cAAI,kBAAkB,KAAK,mBAAmB;AAC9C,cAAI,mBAAmB,MAAM;AACzB,mBAAO;AAAA,UACX;AACA,eAAK,0CAA0C,eAAe;AAC9D,cAAI,SAAS,IAAI,WAAW,gBAAgB,YAAY,CAAC;AACzD,cAAI;AACA,qBAAS,KAAKL,WAAS,KAAK,aAAa,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AACnF,kBAAI,WAAW,GAAG;AAClB,kBAAI,YAAY,MAAM;AAClB,oBAAI,YAAY,SAAS,aAAa;AACtC,oBAAI,aAAa,OAAO,QAAQ;AAE5B;AAAA,gBACJ;AACA,uBAAO,SAAS;AAAA,cACpB;AAAA,YACJ;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,MAAM,CAAC,GAAG,SAASK,MAAK,GAAG;AAAS,gBAAAA,IAAG,KAAK,EAAE;AAAA,YACtD,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AACA,iBAAO;AAAA,QACX;AAIA,QAAAD,mCAAkC,UAAU,4CAA4C,SAAU,iBAAiB;AAC/G,cAAI,cAAc,KAAK,eAAe;AACtC,cAAI,MAAM,KAAK,UAAU,YAAY,WAAW,IAAI,YAAY,YAAY;AAC5E,cAAI,SAAS,KAAK,UAAU,YAAY,cAAc,IAAI,YAAY,eAAe;AACrF,cAAI,WAAW,KAAK,wBAAwB,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC;AAClE,cAAI,UAAU,KAAK,wBAAwB,KAAK,MAAM,OAAO,KAAK,CAAC,CAAC;AAEpE,cAAI,YAAY,KAAK,aAAa;AAClC,cAAI,aAAa;AACjB,cAAI,eAAe;AACnB,cAAI,mBAAmB;AACvB,mBAAS,eAAuB,UAAU,eAAe,SAAS,gBAAgB;AAC9E,gBAAI,UAAU,YAAY,KAAK,MAAM;AACjC;AAAA,YACJ;AACA,gBAAI,WAAW,UAAU,YAAY;AACrC,qBAAS,iCAAiC;AAC1C,gBAAI,gBAAgB,SAAS,aAAa,IAAI;AAE9C,gBAAI,kBAAkB,GAAG;AACrB;AAAA,YACJ,WACS,kBAAkB,GAAG;AAC1B,6BAAe,KAAK,IAAI,cAAc,gBAAgB;AACtD,iCAAmB;AACnB,2BAAa,SAAS,aAAa;AAAA,YACvC,WACS,SAAS,aAAa,KAAK,gBAAgB,YAAY,GAAG;AAC/D,wBAAU,YAAY,IAAI;AAAA,YAC9B,OACK;AACD,2BAAa,SAAS,aAAa;AACnC,iCAAmB;AAAA,YACvB;AAAA,UACJ;AAAA,QAEJ;AACA,QAAAA,mCAAkC,UAAU,qBAAqB,WAAY;AACzE,cAAI,KAAKC;AACT,cAAI,YAAY,KAAK,aAAa;AAClC,cAAI,qBAAqB,IAAI,qBAAa;AAC1C,cAAI,2BAA2B,IAAI,qBAAa;AAChD,cAAI,2BAA2B,IAAI,qBAAa;AAChD,cAAI,iBAAiB,IAAI,qBAAa;AACtC,cAAI;AACA,qBAAS,cAAcL,WAAS,SAAS,GAAG,gBAAgB,YAAY,KAAK,GAAG,CAAC,cAAc,MAAM,gBAAgB,YAAY,KAAK,GAAG;AACrI,kBAAI,WAAW,cAAc;AAC7B,kBAAI,YAAY,MAAM;AAClB;AAAA,cACJ;AACA,uBAAS,iCAAiC;AAC1C,kBAAI,oBAAoB,SAAS,SAAS,IAAI;AAC9C,kBAAI,oBAAoB,SAAS,aAAa;AAC9C,kBAAI,CAAC,KAAK,SAAS;AACf,qCAAqB;AAAA,cACzB;AACA,sBAAQ,oBAAoB,GAAG;AAAA,gBAC3B,KAAK;AACD,2CAAyB,SAAS,oBAAoB,IAAI,CAAC;AAC3D;AAAA,gBACJ,KAAK;AACD,iCAAe,SAAS,oBAAoB,CAAC;AAC7C,2CAAyB,SAAS,oBAAoB,CAAC;AACvD;AAAA,gBACJ,KAAK;AACD,qCAAmB,SAAS,oBAAoB,CAAC;AACjD;AAAA,cACR;AAAA,YACJ;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,iBAAiB,CAAC,cAAc,SAASK,MAAK,YAAY;AAAS,gBAAAA,IAAG,KAAK,WAAW;AAAA,YAC9F,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AAEA,cAAK,mBAAmB,SAAS,EAAE,WAAW,KACzC,yBAAyB,SAAS,EAAE,WAAW,KAC/C,yBAAyB,SAAS,EAAE,WAAW,KAC/C,eAAe,SAAS,EAAE,WAAW,KACtC,mBAAmB,SAAS,EAAE,CAAC,IAAI,KACnC,yBAAyB,SAAS,EAAE,CAAC,IAAI,yBAAyB,SAAS,EAAE,CAAC,IAAI,qBAAa,uBAC/F,yBAAyB,SAAS,EAAE,CAAC,IAAI,yBAAyB,SAAS,EAAE,CAAC,IAAI,qBAAa,qBAAqB;AACpH,mBAAO;AAAA,UACX;AACA,cAAI,kBAAkB,IAAI,wBAAgB,mBAAmB,SAAS,EAAE,CAAC,GAAG,yBAAyB,SAAS,EAAE,CAAC,GAAG,yBAAyB,SAAS,EAAE,CAAC,GAAG,eAAe,SAAS,EAAE,CAAC,CAAC;AACxL,eAAK,yBAAyB,WAAW,eAAe;AACxD,iBAAO;AAAA,QACX;AACA,QAAAD,mCAAkC,UAAU,2BAA2B,SAAU,WAAW,iBAAiB;AAGzG,mBAAS,cAAsB,GAAG,cAAc,UAAU,QAAQ,eAAe;AAC7E,gBAAI,WAAW,UAAU,WAAW;AACpC,gBAAI,UAAU,WAAW,KAAK,MAAM;AAChC;AAAA,YACJ;AACA,gBAAI,oBAAoB,SAAS,SAAS,IAAI;AAC9C,gBAAI,oBAAoB,SAAS,aAAa;AAC9C,gBAAI,oBAAoB,gBAAgB,YAAY,GAAG;AACnD,wBAAU,WAAW,IAAI;AACzB;AAAA,YACJ;AACA,gBAAI,CAAC,KAAK,SAAS;AACf,mCAAqB;AAAA,YACzB;AACA,oBAAQ,oBAAoB,GAAG;AAAA,cAC3B,KAAK;AACD,oBAAI,oBAAoB,IAAI,MAAM,gBAAgB,qBAAqB,GAAG;AACtE,4BAAU,WAAW,IAAI;AAAA,gBAC7B;AACA;AAAA,cACJ,KAAK;AACD,oBAAI,KAAK,MAAM,oBAAoB,CAAC,MAAM,gBAAgB,wBAAwB,KAC9E,oBAAoB,MAAM,gBAAgB,qBAAqB,GAAG;AAClE,4BAAU,WAAW,IAAI;AAAA,gBAC7B;AACA;AAAA,cACJ,KAAK;AACD,oBAAI,oBAAoB,MAAM,gBAAgB,eAAe,GAAG;AAC5D,4BAAU,WAAW,IAAI;AAAA,gBAC7B;AACA;AAAA,YACR;AAAA,UACJ;AAAA,QACJ;AACA,QAAAA,mCAAkC,UAAU,SAAS,WAAY;AAC7D,iBAAO,KAAK;AAAA,QAChB;AAEA,QAAAA,mCAAkC,UAAU,WAAW,WAAY;AAC/D,iBAAO,aAAa,KAAK,UAAU,OAAO,OAAO,UAAU,SAAS,KAAK,IAAI;AAAA,QACjF;AACA,eAAOA;AAAA,MACX,EAAE,6BAAqB;AACvB,MAAO,4CAAQ;AAAA;AAAA;;;ACzTf,MAeIE,YAkBA,iBAqQG;AAtSP;AAAA;AA4BA;AACA;AAdA,MAAIA,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUC,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AAQA,MAAI;AAAA,MAAiC,WAAY;AAC7C,iBAASC,iBAAgB,iBAAiB,aAAa;AACzC,eAAK,yBAAyB;AACxC,eAAK,kBAAkB;AACvB,eAAK,qBAAqB,gBAAgB,eAAe;AACzD,eAAK,cAAc;AAEnB,eAAK,yBAAyB,IAAI,MAAM,KAAK,qBAAqB,CAAC;AAAA,QACvE;AACA,QAAAA,iBAAgB,UAAU,4BAA4B,WAAY;AAC9D,eAAK,gCAAgC,KAAK,uBAAuB,CAAC,CAAC;AACnE,eAAK,gCAAgC,KAAK,uBAAuB,KAAK,qBAAqB,CAAC,CAAC;AAC7F,cAAI,0BAA0B,qBAAa;AAC3C,cAAI;AACJ,aAAG;AACC,sCAA0B;AAC1B,sCAA0B,KAAK,4BAA4B;AAAA,UAC/D,SAAS,0BAA0B,KAAK,0BAA0B;AAClE,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,iBAAgB,UAAU,kCAAkC,SAAU,uBAAuB;AACzF,cAAI,yBAAyB,MAAM;AAC/B,kCACK,wCAAwC,KAAK,eAAe;AAAA,UACrE;AAAA,QACJ;AAQA,QAAAA,iBAAgB,UAAU,8BAA8B,WAAY;AAChE,cAAI,kBAAkB,KAAK,sBAAsB;AACjD,cAAI,oBAAoB,GAAG;AACvB,mBAAO;AAAA,UACX;AACA,mBAAS,gBAAwB,GAAG,gBAAgB,KAAK,qBAAqB,GAAG,iBAAiB;AAC9F,gBAAI,YAAY,KAAK,uBAAuB,aAAa,EAAE,aAAa;AACxE,qBAAS,eAAuB,GAAG,eAAe,UAAU,QAAQ,gBAAgB;AAChF,kBAAI,UAAU,YAAY,KAAK,MAAM;AACjC;AAAA,cACJ;AACA,kBAAI,CAAC,UAAU,YAAY,EAAE,kBAAkB,GAAG;AAC9C,qBAAK,iBAAiB,eAAe,cAAc,SAAS;AAAA,cAChE;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,iBAAgB,UAAU,wBAAwB,WAAY;AAC1D,eAAK,2BAA2B;AAKhC,cAAI,kBAAkB,KAAK,wBAAwB;AACnD,iBAAO,kBAAkB,KAAK,wBAAwB;AAAA,QAC1D;AACA,QAAAA,iBAAgB,UAAU,6BAA6B,WAAY;AAC/D,cAAI,KAAK,uBAAuB,CAAC,KAAK,QAAQ,KAAK,uBAAuB,KAAK,qBAAqB,CAAC,KAAK,MAAM;AAC5G;AAAA,UACJ;AACA,cAAI,eAAe,KAAK,uBAAuB,CAAC,EAAE,aAAa;AAC/D,cAAI,eAAe,KAAK,uBAAuB,KAAK,qBAAqB,CAAC,EAAE,aAAa;AACzF,mBAAS,eAAuB,GAAG,eAAe,aAAa,QAAQ,gBAAgB;AACnF,gBAAI,aAAa,YAAY,KAAK,QAC9B,aAAa,YAAY,KAAK,QAC9B,aAAa,YAAY,EAAE,aAAa,MAAM,aAAa,YAAY,EAAE,aAAa,GAAG;AACzF,uBAAS,gBAAwB,GAAG,iBAAiB,KAAK,oBAAoB,iBAAiB;AAC3F,oBAAI,WAAW,KAAK,uBAAuB,aAAa,EAAE,aAAa,EAAE,YAAY;AACrF,oBAAI,YAAY,MAAM;AAClB;AAAA,gBACJ;AACA,yBAAS,aAAa,aAAa,YAAY,EAAE,aAAa,CAAC;AAC/D,oBAAI,CAAC,SAAS,kBAAkB,GAAG;AAC/B,uBAAK,uBAAuB,aAAa,EAAE,aAAa,EAAE,YAAY,IAAI;AAAA,gBAC9E;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,QAAAA,iBAAgB,UAAU,0BAA0B,WAAY;AAC5D,cAAI,KAAK,uBAAuB,KAAK,qBAAqB,CAAC,KAAK,MAAM;AAClE,mBAAO;AAAA,UACX;AACA,cAAI,kBAAkB;AACtB,cAAI,YAAY,KAAK,uBAAuB,KAAK,qBAAqB,CAAC,EAAE,aAAa;AACtF,mBAAS,eAAuB,GAAG,eAAe,UAAU,QAAQ,gBAAgB;AAChF,gBAAI,UAAU,YAAY,KAAK,MAAM;AACjC;AAAA,YACJ;AACA,gBAAI,wBAAwB,UAAU,YAAY,EAAE,aAAa;AACjE,gBAAI,mBAAmB;AACvB,qBAAS,gBAAwB,KAAK,qBAAqB,GAAG,gBAAgB,KAAK,mBAAmB,KAAK,wBAAwB,iBAAiB;AAChJ,kBAAI,WAAW,KAAK,uBAAuB,aAAa,EAAE,aAAa,EAAE,YAAY;AACrF,kBAAI,YAAY,MAAM;AAClB,mCAAmBA,iBAAgB,uBAAuB,uBAAuB,kBAAkB,QAAQ;AAC3G,oBAAI,CAAC,SAAS,kBAAkB,GAAG;AAC/B;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,iBAAgB,UAAU,0BAA0B,WAAY;AAC5D,cAAI,KAAK,uBAAuB,CAAC,KAAK,MAAM;AACxC,mBAAO;AAAA,UACX;AACA,cAAI,kBAAkB;AACtB,cAAI,YAAY,KAAK,uBAAuB,CAAC,EAAE,aAAa;AAC5D,mBAAS,eAAuB,GAAG,eAAe,UAAU,QAAQ,gBAAgB;AAChF,gBAAI,UAAU,YAAY,KAAK,MAAM;AACjC;AAAA,YACJ;AACA,gBAAI,wBAAwB,UAAU,YAAY,EAAE,aAAa;AACjE,gBAAI,mBAAmB;AACvB,qBAAS,gBAAwB,GAAG,gBAAgB,KAAK,qBAAqB,KAAK,mBAAmB,KAAK,wBAAwB,iBAAiB;AAChJ,kBAAI,WAAW,KAAK,uBAAuB,aAAa,EAAE,aAAa,EAAE,YAAY;AACrF,kBAAI,YAAY,MAAM;AAClB,mCAAmBA,iBAAgB,uBAAuB,uBAAuB,kBAAkB,QAAQ;AAC3G,oBAAI,CAAC,SAAS,kBAAkB,GAAG;AAC/B;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,iBAAgB,yBAAyB,SAAU,uBAAuB,kBAAkB,UAAU;AAClG,cAAI,YAAY,MAAM;AAClB,mBAAO;AAAA,UACX;AACA,cAAI,CAAC,SAAS,kBAAkB,GAAG;AAC/B,gBAAI,SAAS,iBAAiB,qBAAqB,GAAG;AAClD,uBAAS,aAAa,qBAAqB;AAC3C,iCAAmB;AAAA,YACvB,OACK;AACD,gBAAE;AAAA,YACN;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,iBAAgB,UAAU,mBAAmB,SAAU,eAAe,cAAc,WAAW;AAC3F,cAAI,KAAKC;AACT,cAAI,KAAK,uBAAuB,gBAAgB,CAAC,KAAK,MAAM;AACxD;AAAA,UACJ;AACA,cAAI,WAAW,UAAU,YAAY;AACrC,cAAI,0BAA0B,KAAK,uBAAuB,gBAAgB,CAAC,EAAE,aAAa;AAC1F,cAAI,sBAAsB;AAC1B,cAAI,KAAK,uBAAuB,gBAAgB,CAAC,KAAK,MAAM;AACxD,kCAAsB,KAAK,uBAAuB,gBAAgB,CAAC,EAAE,aAAa;AAAA,UACtF;AAEA,cAAI,iBAAiB,IAAI,MAAM,EAAE;AACjC,yBAAe,CAAC,IAAI,wBAAwB,YAAY;AACxD,yBAAe,CAAC,IAAI,oBAAoB,YAAY;AACpD,cAAI,eAAe,GAAG;AAClB,2BAAe,CAAC,IAAI,UAAU,eAAe,CAAC;AAC9C,2BAAe,CAAC,IAAI,wBAAwB,eAAe,CAAC;AAC5D,2BAAe,CAAC,IAAI,oBAAoB,eAAe,CAAC;AAAA,UAC5D;AACA,cAAI,eAAe,GAAG;AAClB,2BAAe,CAAC,IAAI,UAAU,eAAe,CAAC;AAC9C,2BAAe,EAAE,IAAI,wBAAwB,eAAe,CAAC;AAC7D,2BAAe,EAAE,IAAI,oBAAoB,eAAe,CAAC;AAAA,UAC7D;AACA,cAAI,eAAe,UAAU,SAAS,GAAG;AACrC,2BAAe,CAAC,IAAI,UAAU,eAAe,CAAC;AAC9C,2BAAe,CAAC,IAAI,wBAAwB,eAAe,CAAC;AAC5D,2BAAe,CAAC,IAAI,oBAAoB,eAAe,CAAC;AAAA,UAC5D;AACA,cAAI,eAAe,UAAU,SAAS,GAAG;AACrC,2BAAe,CAAC,IAAI,UAAU,eAAe,CAAC;AAC9C,2BAAe,EAAE,IAAI,wBAAwB,eAAe,CAAC;AAC7D,2BAAe,EAAE,IAAI,oBAAoB,eAAe,CAAC;AAAA,UAC7D;AACA,cAAI;AACA,qBAAS,mBAAmBH,WAAS,cAAc,GAAG,qBAAqB,iBAAiB,KAAK,GAAG,CAAC,mBAAmB,MAAM,qBAAqB,iBAAiB,KAAK,GAAG;AACxK,kBAAI,gBAAgB,mBAAmB;AACvC,kBAAIE,iBAAgB,gBAAgB,UAAU,aAAa,GAAG;AAC1D;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,sBAAsB,CAAC,mBAAmB,SAASC,MAAK,iBAAiB;AAAS,gBAAAA,IAAG,KAAK,gBAAgB;AAAA,YAClH,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AAAA,QACJ;AAIA,QAAAD,iBAAgB,kBAAkB,SAAU,UAAU,eAAe;AACjE,cAAI,iBAAiB,MAAM;AACvB,mBAAO;AAAA,UACX;AACA,cAAI,cAAc,kBAAkB,KAAK,cAAc,UAAU,MAAM,SAAS,UAAU,GAAG;AACzF,qBAAS,aAAa,cAAc,aAAa,CAAC;AAClD,mBAAO;AAAA,UACX;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,iBAAgB,UAAU,wBAAwB,WAAY;AAC1D,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,iBAAgB,UAAU,qBAAqB,WAAY;AACvD,iBAAO,KAAK,gBAAgB,YAAY;AAAA,QAC5C;AACA,QAAAA,iBAAgB,UAAU,oBAAoB,WAAY;AACtD,iBAAO,KAAK,gBAAgB,wBAAwB;AAAA,QACxD;AACA,QAAAA,iBAAgB,UAAU,iBAAiB,SAAU,aAAa;AAC9D,eAAK,cAAc;AAAA,QACvB;AACA,QAAAA,iBAAgB,UAAU,iBAAiB,WAAY;AACnD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,iBAAgB,UAAU,2BAA2B,SAAU,eAAe,uBAAuB;AACjG,eAAK,uBAAuB,aAAa,IAAI;AAAA,QACjD;AACA,QAAAA,iBAAgB,UAAU,2BAA2B,SAAU,eAAe;AAC1E,iBAAO,KAAK,uBAAuB,aAAa;AAAA,QACpD;AAEA,QAAAA,iBAAgB,UAAU,WAAW,WAAY;AAC7C,cAAI,qBAAqB,KAAK,uBAAuB,CAAC;AACtD,cAAI,sBAAsB,MAAM;AAC5B,iCAAqB,KAAK,uBAAuB,KAAK,qBAAqB,CAAC;AAAA,UAChF;AAEA,cAAI,YAAY,IAAI,kBAAU;AAE9B,mBAAS,eAAuB,GAAG,eAAe,mBAAmB,aAAa,EAAE,QAAQ,gBAAgB;AACxG,sBAAU,OAAO,WAAW,YAAY;AACxC,qBAAS,gBAAwB,GAAG,gBAAgB,KAAK,qBAAqB,GAAG,iBAAiB;AAC9F,kBAAI,KAAK,uBAAuB,aAAa,KAAK,MAAM;AACpD,0BAAU,OAAO,UAAU;AAC3B;AAAA,cACJ;AACA,kBAAI,WAAW,KAAK,uBAAuB,aAAa,EAAE,aAAa,EAAE,YAAY;AACrF,kBAAI,YAAY,MAAM;AAClB,0BAAU,OAAO,UAAU;AAC3B;AAAA,cACJ;AACA,wBAAU,OAAO,YAAY,SAAS,aAAa,GAAG,SAAS,SAAS,CAAC;AAAA,YAC7E;AACA,sBAAU,OAAO,IAAI;AAAA,UACzB;AACA,iBAAO,UAAU,SAAS;AAAA,QAE9B;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,0BAAQ;AAAA;AAAA;;;ACtSf,MAmBI,UA6CG;AAhEP;AAAA;AAmBA,MAAI;AAAA,MAA0B,WAAY;AACtC,iBAASE,UAAS,QAAQ,MAAM,QAAQ,OAAO;AAC3C,eAAK,YAAYA,UAAS;AAC1B,eAAK,SAAS,KAAK,MAAM,MAAM;AAC/B,eAAK,OAAO,KAAK,MAAM,IAAI;AAC3B,eAAK,SAAS,KAAK,MAAM,MAAM;AAC/B,eAAK,QAAQ,KAAK,MAAM,KAAK;AAAA,QACjC;AACA,QAAAA,UAAS,UAAU,oBAAoB,WAAY;AAC/C,iBAAO,KAAK,iBAAiB,KAAK,SAAS;AAAA,QAC/C;AACA,QAAAA,UAAS,UAAU,mBAAmB,SAAU,WAAW;AACvD,iBAAO,cAAcA,UAAS,uBAAuB,KAAK,WAAY,YAAY,IAAK;AAAA,QAC3F;AACA,QAAAA,UAAS,UAAU,mCAAmC,WAAY;AAC9D,eAAK,YAAY,KAAK,MAAO,KAAK,MAAM,KAAK,QAAQ,EAAE,IAAK,IAAI,KAAK,MAAM,KAAK,SAAS,CAAC,CAAC;AAAA,QAC/F;AACA,QAAAA,UAAS,UAAU,WAAW,WAAY;AACtC,iBAAO,KAAK,OAAO,KAAK;AAAA,QAC5B;AACA,QAAAA,UAAS,UAAU,YAAY,WAAY;AACvC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,UAAS,UAAU,UAAU,WAAY;AACrC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,UAAS,UAAU,YAAY,WAAY;AACvC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,UAAS,UAAU,WAAW,WAAY;AACtC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,UAAS,UAAU,eAAe,WAAY;AAC1C,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,UAAS,UAAU,eAAe,SAAU,WAAW;AACnD,eAAK,YAAY;AAAA,QACrB;AAEA,QAAAA,UAAS,UAAU,WAAW,WAAY;AACtC,iBAAO,KAAK,YAAY,MAAM,KAAK;AAAA,QACvC;AACA,QAAAA,UAAS,sBAAsB;AAC/B,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,mBAAQ;AAAA;AAAA;;;AChEf,MAyBI,uBAoGG;AA7HP;AAAA;AAiBA;AAEA;AACA;AAKA,MAAI;AAAA,MAAuC,WAAY;AACnD,iBAASC,yBAAwB;AAAA,QACjC;AAMA,QAAAA,uBAAsB,aAAa,WAAY;AAE3C,mBAAiB,IAAI,GAAG,IAAI,qBAAa,aAAa,QAAQ,KAAK;AAC/D,gBAAI,gBAAgB,qBAAa,aAAa,CAAC;AAC/C,gBAAI,aAAa,gBAAgB;AACjC,qBAAiB,IAAI,GAAG,IAAI,qBAAa,gBAAgB,KAAK;AAC1D,kBAAI,OAAO;AACX,sBAAQ,gBAAgB,OAAS,YAAY;AACzC,wBAAQ;AACR,kCAAkB;AAAA,cACtB;AACA,2BAAa,gBAAgB;AAC7B,kBAAI,CAACA,uBAAsB,aAAa,CAAC,GAAG;AACxC,gBAAAA,uBAAsB,aAAa,CAAC,IAAI,IAAI,MAAM,qBAAa,cAAc;AAAA,cACjF;AACA,cAAAA,uBAAsB,aAAa,CAAC,EAAE,qBAAa,iBAAiB,IAAI,CAAC,IAAI,KAAK,OAAO,OAAO,qBAAa,mBAAmB;AAAA,YACpI;AAAA,UACJ;AACA,eAAK,oBAAoB;AAAA,QAC7B;AACA,QAAAA,uBAAsB,kBAAkB,SAAU,gBAAgB;AAC9D,cAAI,eAAeA,uBAAsB,wBAAwBA,uBAAsB,gBAAgB,cAAc,CAAC;AACtH,cAAI,iBAAiB,IAAI;AACrB,mBAAO;AAAA,UACX;AACA,iBAAOA,uBAAsB,uBAAuB,cAAc;AAAA,QACtE;AACA,QAAAA,uBAAsB,kBAAkB,SAAU,gBAAgB;AAC9D,cAAI,cAAc,kBAAU,IAAI,cAAc;AAC9C,cAAI,SAAS,IAAI,WAAW,qBAAa,cAAc;AACvD,cAAI,gBAAgB;AACpB,cAAI,kBAAkB;AACtB,mBAAiB,IAAI,GAAG,IAAI,qBAAa,qBAAqB,KAAK;AAC/D,gBAAI,cAAc,eAAe,IAAI,qBAAa,uBAC7C,IAAI,cAAe,qBAAa;AACrC,gBAAI,kBAAkB,eAAe,aAAa,KAAK,aAAa;AAChE,iCAAmB,eAAe,aAAa;AAC/C;AAAA,YACJ;AACA,mBAAO,aAAa;AAAA,UACxB;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,uBAAsB,0BAA0B,SAAU,gBAAgB;AACtE,cAAI,eAAeA,uBAAsB,YAAY,cAAc;AACnE,iBAAO,qBAAa,YAAY,YAAY,MAAM,KAAK,KAAK;AAAA,QAChE;AACA,QAAAA,uBAAsB,cAAc,SAAU,gBAAgB;AAC1D,cAAI;AAAA;AAAA,YAAkB;AAAA;AACtB,mBAAiB,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AACpD,qBAAiB,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,OAAO;AACtD,uBAAU,UAAU,KAAM,IAAI,MAAM,IAAI,IAAI;AAAA,YAChD;AAAA,UACJ;AACA,iBAAO,KAAK,MAAM,MAAM;AAAA,QAC5B;AAEA,QAAAA,uBAAsB,yBAAyB,SAAU,gBAAgB;AACrE,cAAI,cAAc,kBAAU,IAAI,cAAc;AAC9C,cAAI,iBAAiB,IAAI,MAAM,qBAAa,cAAc;AAC1D,cAAI,cAAc,GAAG;AACjB,qBAAiB,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AACpD,6BAAe,CAAC,IAAI,KAAK,OAAO,eAAe,CAAC,IAAI,WAAW;AAAA,YACnE;AAAA,UACJ;AACA,cAAI,iBAAiB,cAAM;AAC3B,cAAI,YAAY;AAChB,cAAI,CAAC,KAAK,mBAAmB;AACzB,YAAAA,uBAAsB,WAAW;AAAA,UACrC;AACA,mBAAiB,IAAI,GAAG,IAAIA,uBAAsB,aAAa,QAAQ,KAAK;AACxE,gBAAIC,SAAQ;AACZ,gBAAI,gBAAgBD,uBAAsB,aAAa,CAAC;AACxD,qBAAiB,IAAI,GAAG,IAAI,qBAAa,gBAAgB,KAAK;AAC1D,kBAAI,OAAO,KAAK,OAAO,cAAc,CAAC,IAAI,eAAe,CAAC,CAAC;AAC3D,cAAAC,UAAS,KAAK,OAAO,OAAO,IAAI;AAChC,kBAAIA,UAAS,gBAAgB;AACzB;AAAA,cACJ;AAAA,YACJ;AACA,gBAAIA,SAAQ,gBAAgB;AACxB,+BAAiBA;AACjB,0BAAY,qBAAa,aAAa,CAAC;AAAA,YAC3C;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAEA,QAAAD,uBAAsB,oBAAoB;AAC1C,QAAAA,uBAAsB,eAAe,IAAI,MAAM,qBAAa,aAAa,MAAM,EAAE,IAAI,SAAU,GAAG;AAAE,iBAAO,IAAI,IAAI,MAAM,qBAAa,cAAc;AAAA,QAAG,CAAC;AACxJ,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,gCAAQ;AAAA;AAAA;;;AC7Hf,MAmBI,sBAyHG;AA5IP;AAAA;AAmBA,MAAI;AAAA,MAAsC,WAAY;AAClD,iBAASE,wBAAuB;AAC5B,eAAK,eAAe;AACpB,eAAK,WAAW;AAChB,eAAK,YAAY;AACjB,eAAK,WAAW;AAAA,QACpB;AAMA,QAAAA,sBAAqB,UAAU,kBAAkB,WAAY;AACzD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,kBAAkB,SAAU,cAAc;AACrE,eAAK,eAAe;AAAA,QACxB;AAMA,QAAAA,sBAAqB,UAAU,YAAY,WAAY;AACnD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,YAAY,SAAU,QAAQ;AACzD,eAAK,SAAS;AAAA,QAClB;AAMA,QAAAA,sBAAqB,UAAU,kBAAkB,WAAY;AACzD,iBAAO,KAAK;AAAA,QAChB;AAMA,QAAAA,sBAAqB,UAAU,kBAAkB,SAAU,cAAc;AACrE,eAAK,eAAe;AAAA,QACxB;AAIA,QAAAA,sBAAqB,UAAU,gBAAgB,WAAY;AACvD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,iBAAiB,SAAU,aAAa;AACnE,eAAK,cAAc;AAAA,QACvB;AAIA,QAAAA,sBAAqB,UAAU,kBAAkB,WAAY;AACzD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,kBAAkB,SAAU,cAAsB;AAC7E,eAAK,eAAe;AAAA,QACxB;AACA,QAAAA,sBAAqB,UAAU,YAAY,WAAY;AACnD,iBAAO,KAAK,UAAU;AAAA,QAC1B;AACA,QAAAA,sBAAqB,UAAU,YAAY,SAAU,QAAQ;AACzD,eAAK,SAAS;AAAA,QAClB;AACA,QAAAA,sBAAqB,UAAU,eAAe,WAAY;AACtD,iBAAO,KAAK,aAAa;AAAA,QAC7B;AACA,QAAAA,sBAAqB,UAAU,eAAe,SAAU,WAAW;AAC/D,eAAK,YAAY;AAAA,QACrB;AAMA,QAAAA,sBAAqB,UAAU,cAAc,WAAY;AACrD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,cAAc,SAAU,UAAU;AAC7D,eAAK,WAAW;AAAA,QACpB;AAMA,QAAAA,sBAAqB,UAAU,cAAc,WAAY;AACrD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,cAAc,SAAU,UAAmB;AACtE,eAAK,WAAW;AAAA,QACpB;AAMA,QAAAA,sBAAqB,UAAU,cAAc,WAAY;AACrD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,cAAc,SAAU,UAAkB;AACrE,eAAK,WAAW;AAAA,QACpB;AAMA,QAAAA,sBAAqB,UAAU,eAAe,WAAY;AACtD,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,sBAAqB,UAAU,eAAe,SAAU,WAAoB;AACxE,eAAK,YAAY;AAAA,QACrB;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,+BAAQ;AAAA;AAAA;;;AC5If,MAGI,MAeG;AAlBP;AAAA;AAGA,MAAI;AAAA,MAAsB,WAAY;AAClC,iBAASC,QAAO;AAAA,QAChB;AAOA,QAAAA,MAAK,YAAY,SAAU,KAAK,OAAO;AACnC,cAAI,UAAU,QAAQ;AAAE,oBAAQ;AAAA,UAAW;AAC3C,iBAAO,SAAS,KAAK,KAAK;AAAA,QAC9B;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,eAAQ;AAAA;AAAA;;;AClBf,MAAIC,aAiBA,sBAQG;AAzBP;AAAA;AAaA;AAbA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAKH,MAAI;AAAA,MAAsC,SAAU,QAAQ;AACxD,QAAAF,YAAUG,uBAAsB,MAAM;AACtC,iBAASA,wBAAuB;AAC5B,iBAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,SAAS,KAAK;AAAA,QAC/D;AACA,QAAAA,sBAAqB,OAAO;AAC5B,eAAOA;AAAA,MACX,EAAE,iBAAS;AACX,MAAO,+BAAQ;AAAA;AAAA;;;ACzBf,MA6CI,cA6FG;AA1IP;AAAA;AAAA;AACA;AA4CA,MAAI;AAAA,MAAkE,WAAY;AAC9E,iBAASC,gBAAe;AAAA,QACxB;AAWA,QAAAA,cAAa,UAAU,aAAa,SAAU,GAAG;AAC7C,eAAK,iBAAiB,GAAG,GAAG,EAAE,MAAM;AAAA,QACxC;AA6BA,QAAAA,cAAa,UAAU,mBAAmB,SAAU,GAAG,KAAK,KAAK;AAC7D,cAAI,KAAK,MAAM;AACX,kBAAM,IAAI,6BAAqB;AAAA,UACnC,WACU,MAAM,KAAO,MAAM,EAAE,UAAY,MAAM,KAC3C,MAAM,MAAO,EAAE,UAAa,MAAM,MAAO,GAAI;AAC/C,kBAAM,IAAI,kCAA0B;AAAA,UACxC,WACS,QAAQ,GAAG;AAChB;AAAA,UACJ;AACA,mBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,iBAAK,MAAM,EAAE,MAAM,CAAC,CAAC;AAAA,UACzB;AAAA,QACJ;AAmBA,QAAAA,cAAa,UAAU,QAAQ,WAAY;AAAA,QAC3C;AAWA,QAAAA,cAAa,UAAU,QAAQ,WAAY;AAAA,QAC3C;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,uBAAQ;AAAA;AAAA;;;AC1If,MAAIC,aAiBA,kBAOG;AAxBP;AAAA;AAaA;AAbA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAKH,MAAI;AAAA,MAAkC,SAAU,QAAQ;AACpD,QAAAF,YAAUG,mBAAkB,MAAM;AAClC,iBAASA,oBAAmB;AACxB,iBAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,SAAS,KAAK;AAAA,QAC/D;AACA,eAAOA;AAAA,MACX,EAAE,iBAAS;AACX,MAAO,2BAAQ;AAAA;AAAA;;;ACxBf,MAwBIC,aAoCA,uBA4NG;AAxRP;AAAA;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAwBH,MAAI;AAAA,MAAuC,SAAU,QAAQ;AACzD,QAAAF,YAAUG,wBAAuB,MAAM;AAevC,iBAASA,uBAAsB,MAAM;AACjC,cAAI,SAAS,QAAQ;AAAE,mBAAO;AAAA,UAAI;AAClC,cAAI,QAAQ,OAAO,KAAK,IAAI,KAAK;AAIjC,gBAAM,QAAQ;AACd,cAAI,OAAO,GAAG;AACV,kBAAM,IAAI,iCAAyB,4BAC7B,IAAI;AAAA,UACd;AACA,gBAAM,MAAM,IAAI,WAAW,IAAI;AAC/B,iBAAO;AAAA,QACX;AAWA,QAAAA,uBAAsB,UAAU,iBAAiB,SAAU,aAAa;AAEpE,cAAI,cAAc,KAAK,IAAI,SAAS;AAChC,iBAAK,KAAK,WAAW;AAAA,QAC7B;AAOA,QAAAA,uBAAsB,UAAU,OAAO,SAAU,aAAa;AAE1D,cAAI,cAAc,KAAK,IAAI;AAC3B,cAAI,cAAc,eAAe;AACjC,cAAI,cAAc,cAAc;AAC5B,0BAAc;AAClB,cAAI,cAAc,GAAG;AACjB,gBAAI,cAAc;AACd,oBAAM,IAAI,yBAAiB;AAC/B,0BAAc,gBAAQ;AAAA,UAC1B;AACA,eAAK,MAAM,eAAO,iBAAiB,KAAK,KAAK,WAAW;AAAA,QAC5D;AAMA,QAAAA,uBAAsB,UAAU,QAAQ,SAAU,GAAG;AACjD,eAAK,eAAe,KAAK,QAAQ,CAAC;AAClC,eAAK,IAAI,KAAK,KAAK;AAAA,UAAe;AAClC,eAAK,SAAS;AAAA,QAClB;AASA,QAAAA,uBAAsB,UAAU,mBAAmB,SAAU,GAAG,KAAK,KAAK;AACtE,cAAK,MAAM,KAAO,MAAM,EAAE,UAAY,MAAM,KACtC,MAAM,MAAO,EAAE,SAAS,GAAI;AAC9B,kBAAM,IAAI,kCAA0B;AAAA,UACxC;AACA,eAAK,eAAe,KAAK,QAAQ,GAAG;AACpC,yBAAO,UAAU,GAAG,KAAK,KAAK,KAAK,KAAK,OAAO,GAAG;AAClD,eAAK,SAAS;AAAA,QAClB;AASA,QAAAA,uBAAsB,UAAU,UAAU,SAAU,KAAK;AACrD,cAAI,iBAAiB,KAAK,KAAK,GAAG,KAAK,KAAK;AAAA,QAChD;AASA,QAAAA,uBAAsB,UAAU,QAAQ,WAAY;AAChD,eAAK,QAAQ;AAAA,QACjB;AASA,QAAAA,uBAAsB,UAAU,cAAc,WAAY;AACtD,iBAAO,eAAO,iBAAiB,KAAK,KAAK,KAAK,KAAK;AAAA,QACvD;AAQA,QAAAA,uBAAsB,UAAU,OAAO,WAAY;AAC/C,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,uBAAsB,UAAU,WAAW,SAAU,OAAO;AACxD,cAAI,CAAC,OAAO;AACR,mBAAO,KAAK,cAAc;AAAA,UAC9B;AACA,cAAI,OAAO,UAAU,UAAU;AAC3B,mBAAO,KAAK,gBAAgB,KAAK;AAAA,UACrC;AACA,iBAAO,KAAK,gBAAgB,KAAK;AAAA,QACrC;AAgBA,QAAAA,uBAAsB,UAAU,gBAAgB,WAAY;AACxD,iBAAO,IAAI;AAAA,YAAO,KAAK;AAAA;AAAA,UAAuB,EAAE,SAAS;AAAA,QAC7D;AAmBA,QAAAA,uBAAsB,UAAU,kBAAkB,SAAU,aAAa;AACrE,iBAAO,IAAI;AAAA,YAAO,KAAK;AAAA;AAAA,UAAoC,EAAE,SAAS;AAAA,QAC1E;AAwBA,QAAAA,uBAAsB,UAAU,kBAAkB,SAAU,QAAQ;AAChE,iBAAO,IAAI;AAAA,YAAO,KAAK;AAAA;AAAA,UAA+B,EAAE,SAAS;AAAA,QACrE;AASA,QAAAA,uBAAsB,UAAU,QAAQ,WAAY;AAAA,QACpD;AACA,eAAOA;AAAA,MACX,EAAE,oBAAY;AACd,MAAO,gCAAQ;AAAA;AAAA;;;ACtOf,WAAS,uBAAuB;AAC5B,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,OAAO,QAAQ,KAAK;AAAA,IAC/B;AACA,QAAI,OAAO,WAAW,aAAa;AAC/B,aAAO,OAAO,QAAQ,KAAK;AAAA,IAC/B;AACA,QAAI,OAAO,SAAS,aAAa;AAC7B,aAAO,KAAK,QAAQ,KAAK;AAAA,IAC7B;AACA,UAAM,IAAI,MAAM,kCAAmC;AAAA,EACvD;AAUA,WAAS,aAAa,KAAK;AACvB,QAAI,OAAO,eAAe,aAAa;AACnC,mBAAa,qBAAqB;AAAA,IACtC;AACA,QAAI,eAAe,MAAM;AACrB,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC9C;AACA,WAAO,WAAW,GAAG;AAAA,EACzB;AACA,WAAS,YAAY;AAEjB,QAAI,SAAS,CAAC;AACd,WAAO,CAAC,IAAI,aAAa,CAAC;AAC1B,QAAI,cAAc,aAAa,GAAG;AAClC,WAAO,CAAC,IAAI;AAEZ,aAAS,IAAY,GAAG,IAAI,IAAI,KAAK;AACjC,aAAO,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI;AAAA,IAChC;AACA,WAAO;AAAA,EACX;AA3FA,MAmCgBC,OA8BZ,YAiCAC,yBAqqBGC;AAvwBP,MAAAC,+BAAA;AAAA;AAiBA;AAEA;AAEA;AAEA;AAMA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAC,SAAUH,OAAM;AACb,QAAAA,MAAKA,MAAK,OAAO,IAAI,CAAC,IAAI;AAC1B,QAAAA,MAAKA,MAAK,OAAO,IAAI,CAAC,IAAI;AAC1B,QAAAA,MAAKA,MAAK,OAAO,IAAI,CAAC,IAAI;AAC1B,QAAAA,MAAKA,MAAK,OAAO,IAAI,CAAC,IAAI;AAC1B,QAAAA,MAAKA,MAAK,aAAa,IAAI,CAAC,IAAI;AAChC,QAAAA,MAAKA,MAAK,aAAa,IAAI,CAAC,IAAI;AAAA,MACpC,GAAGA,UAASA,QAAO,CAAC,EAAE;AAuDtB,MAAIC;AAAA,MAAwC,WAAY;AACpD,iBAASA,0BAAyB;AAAA,QAClC;AAUA,QAAAA,wBAAuB,SAAS,SAAU,WAAW,SAAS;AAE1D,cAAI,SAAS,IAAI,sBAAc,EAAE;AAEjC,cAAI,WAAW,wBAAgB;AAQ/B,iBAAO,eAAe,QAAQ;AAE9B,cAAI,YAAY;AAChB,cAAI,OAAO,UAAU,WAAW;AAChC,cAAI,iBAAiB,IAAI,6BAAqB;AAC9C,iBAAO,YAAY,UAAU,CAAC,GAAG;AAC7B,oBAAQ,MAAM;AAAA,cACV,KAAKA,wBAAuB;AACxB,4BAAYA,wBAAuB,eAAe,WAAW,WAAW,MAAM;AAC9E;AAAA,cACJ,KAAKA,wBAAuB;AAAA,cAC5B,KAAKA,wBAAuB;AACxB,4BAAYA,wBAAuB,eAAe,MAAM,WAAW,UAAU,WAAW,MAAM;AAC9F;AAAA,cACJ,KAAKA,wBAAuB;AACxB,uBAAO;AAAA;AAAA,kBAAkB,UAAU,WAAW;AAAA,gBAAC;AAC/C;AAAA,cACJ,KAAKA,wBAAuB;AACxB,4BAAYA,wBAAuB,kBAAkB,WAAW,WAAW,MAAM;AACjF;AAAA,cACJ,KAAKA,wBAAuB;AACxB,oBAAI,aAAa,wBAAgB,0BAA0B,UAAU,WAAW,CAAC;AAEjF;AAAA,cACJ,KAAKA,wBAAuB;AAExB,6BAAa;AACb;AAAA,cACJ,KAAKA,wBAAuB;AAExB;AACA;AAAA,cACJ,KAAKA,wBAAuB;AACxB,4BAAYA,wBAAuB,iBAAiB,WAAW,WAAW,cAAc;AACxF;AAAA,cACJ,KAAKA,wBAAuB;AAAA,cAC5B,KAAKA,wBAAuB;AAExB,sBAAM,IAAI,wBAAgB;AAAA,cAC9B;AAII;AACA,4BAAYA,wBAAuB,eAAe,WAAW,WAAW,MAAM;AAC9E;AAAA,YACR;AACA,gBAAI,YAAY,UAAU,QAAQ;AAC9B,qBAAO,UAAU,WAAW;AAAA,YAChC,OACK;AACD,oBAAM,wBAAgB,kBAAkB;AAAA,YAC5C;AAAA,UACJ;AACA,cAAI,OAAO,OAAO,MAAM,GAAG;AACvB,kBAAM,wBAAgB,kBAAkB;AAAA,UAC5C;AACA,cAAI,gBAAgB,IAAI,sBAAc,MAAM,OAAO,SAAS,GAAG,MAAM,OAAO;AAC5E,wBAAc,SAAS,cAAc;AACrC,iBAAO;AAAA,QACX;AAcA,QAAAA,wBAAuB,mBAAmB,SAAU,WAAW,WAAW,gBAAgB;AACtF,cAAI,YAAYA,wBAAuB,+BAA+B,UAAU,CAAC,GAAG;AAEhF,kBAAM,wBAAgB,kBAAkB;AAAA,UAC5C;AACA,cAAI,oBAAoB,IAAI,WAAWA,wBAAuB,4BAA4B;AAC1F,mBAAS,IAAY,GAAG,IAAIA,wBAAuB,8BAA8B,KAAK,aAAa;AAC/F,8BAAkB,CAAC,IAAI,UAAU,SAAS;AAAA,UAC9C;AACA,yBAAe,gBAAgB,gBAAQ,SAASA,wBAAuB,sBAAsB,mBAAmBA,wBAAuB,4BAA4B,CAAC,CAAC;AACrK,cAAI,SAAS,IAAI,sBAAc;AAC/B,sBAAYA,wBAAuB,eAAe,WAAW,WAAW,MAAM;AAC9E,yBAAe,UAAU,OAAO,SAAS,CAAC;AAC1C,cAAI,sBAAsB;AAC1B,cAAI,UAAU,SAAS,MAAMA,wBAAuB,mCAAmC;AACnF,kCAAsB,YAAY;AAAA,UACtC;AACA,iBAAO,YAAY,UAAU,CAAC,GAAG;AAC7B,oBAAQ,UAAU,SAAS,GAAG;AAAA,cAC1B,KAAKA,wBAAuB;AACxB;AACA,wBAAQ,UAAU,SAAS,GAAG;AAAA,kBAC1B,KAAKA,wBAAuB;AACxB,wBAAI,WAAW,IAAI,sBAAc;AACjC,gCAAYA,wBAAuB,eAAe,WAAW,YAAY,GAAG,QAAQ;AACpF,mCAAe,YAAY,SAAS,SAAS,CAAC;AAC9C;AAAA,kBACJ,KAAKA,wBAAuB;AACxB,wBAAI,SAAS,IAAI,sBAAc;AAC/B,gCAAYA,wBAAuB,eAAe,WAAW,YAAY,GAAG,MAAM;AAClF,mCAAe,UAAU,OAAO,SAAS,CAAC;AAC1C;AAAA,kBACJ,KAAKA,wBAAuB;AACxB,wBAAI,YAAY,IAAI,sBAAc;AAClC,gCAAYA,wBAAuB,eAAe,WAAW,YAAY,GAAG,SAAS;AACrF,mCAAe,aAAa,UAAU,SAAS,CAAC;AAChD;AAAA,kBACJ,KAAKA,wBAAuB;AACxB,wBAAI,eAAe,IAAI,sBAAc;AACrC,gCAAYA,wBAAuB,kBAAkB,WAAW,YAAY,GAAG,YAAY;AAC3F,mCAAe,gBAAgB,gBAAQ,SAAS,aAAa,SAAS,CAAC,CAAC;AACxE;AAAA,kBACJ,KAAKA,wBAAuB;AACxB,wBAAI,YAAY,IAAI,sBAAc;AAClC,gCAAYA,wBAAuB,kBAAkB,WAAW,YAAY,GAAG,SAAS;AACxF,mCAAe,aAAa,aAAK,UAAU,UAAU,SAAS,CAAC,CAAC;AAChE;AAAA,kBACJ,KAAKA,wBAAuB;AACxB,wBAAI,WAAW,IAAI,sBAAc;AACjC,gCAAYA,wBAAuB,kBAAkB,WAAW,YAAY,GAAG,QAAQ;AACvF,mCAAe,YAAY,gBAAQ,SAAS,SAAS,SAAS,CAAC,CAAC;AAChE;AAAA,kBACJ,KAAKA,wBAAuB;AACxB,wBAAI,WAAW,IAAI,sBAAc;AACjC,gCAAYA,wBAAuB,kBAAkB,WAAW,YAAY,GAAG,QAAQ;AACvF,mCAAe,YAAY,aAAK,UAAU,SAAS,SAAS,CAAC,CAAC;AAC9D;AAAA,kBACJ;AACI,0BAAM,wBAAgB,kBAAkB;AAAA,gBAChD;AACA;AAAA,cACJ,KAAKA,wBAAuB;AACxB;AACA,+BAAe,eAAe,IAAI;AAClC;AAAA,cACJ;AACI,sBAAM,wBAAgB,kBAAkB;AAAA,YAChD;AAAA,UACJ;AAEA,cAAI,wBAAwB,IAAI;AAC5B,gBAAI,uBAAuB,YAAY;AACvC,gBAAI,eAAe,cAAc,GAAG;AAEhC;AAAA,YACJ;AACA,2BAAe,gBAAgB,eAAO,YAAY,WAAW,qBAAqB,sBAAsB,oBAAoB,CAAC;AAAA,UACjI;AACA,iBAAO;AAAA,QACX;AAWA,QAAAA,wBAAuB,iBAAiB,SAAU,WAAW,WAAW,QAAQ;AAE5E,cAAI,qBAAqB,IAAI,YAAY,UAAU,CAAC,IAAI,aAAa,CAAC;AAEtE,cAAI,qBAAqB,IAAI,YAAY,UAAU,CAAC,IAAI,aAAa,CAAC;AACtE,cAAIG,SAAQ;AACZ,cAAI,MAAM;AACV,iBAAQ,YAAY,UAAU,CAAC,KAAM,CAAC,KAAK;AACvC,gBAAI,OAAO,UAAU,WAAW;AAChC,gBAAI,OAAOH,wBAAuB,4BAA4B;AAC1D,iCAAmBG,MAAK,IAAI,OAAO;AACnC,iCAAmBA,SAAQ,CAAC,IAAI,OAAO;AACvC,cAAAA,UAAS;AAAA,YACb,OACK;AACD,sBAAQ,MAAM;AAAA,gBACV,KAAKH,wBAAuB;AAExB,qCAAmBG,QAAO,IAAIH,wBAAuB;AACrD;AAAA,gBACJ,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AACxB;AACA,wBAAM;AACN;AAAA,gBACJ,KAAKA,wBAAuB;AAOxB,qCAAmBG,MAAK,IAAIH,wBAAuB;AACnD,yBAAO,UAAU,WAAW;AAC5B,qCAAmBG,MAAK,IAAI;AAC5B,kBAAAA;AACA;AAAA,cACR;AAAA,YACJ;AAAA,UACJ;AACA,UAAAH,wBAAuB,qBAAqB,oBAAoB,oBAAoBG,QAAO,MAAM;AACjG,iBAAO;AAAA,QACX;AAiBA,QAAAH,wBAAuB,uBAAuB,SAAU,oBAAoB,oBAAoB,QAAQ,QAAQ;AAK5G,cAAI,UAAUD,MAAK;AACnB,cAAI,mBAAmBA,MAAK;AAC5B,cAAI,IAAI;AACR,iBAAO,IAAI,QAAQ;AACf,gBAAI,YAAY,mBAAmB,CAAC;AACpC,gBAAI;AAAA;AAAA,cAAc;AAAA;AAClB,oBAAQ,SAAS;AAAA,cACb,KAAKA,MAAK;AAEN,oBAAI,YAAY,IAAI;AAGhB;AAAA,kBAAkC,OAAO,aAAa,KAAK,SAAS;AAAA,gBACxE,OACK;AACD,0BAAQ,WAAW;AAAA,oBACf,KAAK;AACD,2BAAK;AACL;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AAExB,yCAAmB;AACnB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,6BAAO;AAAA;AAAA,wBAAkB,mBAAmB,CAAC;AAAA,sBAAC;AAC9C;AAAA,oBACJ,KAAKA,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,kBACR;AAAA,gBACJ;AACA;AAAA,cACJ,KAAKA,MAAK;AAEN,oBAAI,YAAY,IAAI;AAChB;AAAA,kBAAiC,OAAO,aAAa,KAAK,SAAS;AAAA,gBACvE,OACK;AACD,0BAAQ,WAAW;AAAA,oBACf,KAAK;AACD,2BAAK;AACL;AAAA,oBACJ,KAAKC,wBAAuB;AAExB,yCAAmB;AACnB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AAExB,yCAAmB;AACnB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AAExB,6BAAO;AAAA;AAAA,wBAAkB,mBAAmB,CAAC;AAAA,sBAAC;AAC9C;AAAA,oBACJ,KAAKA,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,kBACR;AAAA,gBACJ;AACA;AAAA,cACJ,KAAKA,MAAK;AAEN,oBAAI,YAAYC,wBAAuB,IAAI;AACvC,uBAAKA,wBAAuB,YAAY,SAAS;AAAA,gBACrD,OACK;AACD,0BAAQ,WAAW;AAAA,oBACf,KAAKA,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAK;AACD,2BAAK;AACL;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AAExB,yCAAmB;AACnB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,6BAAO;AAAA;AAAA,wBAAkB,mBAAmB,CAAC;AAAA,sBAAC;AAC9C;AAAA,oBACJ,KAAKA,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,kBACR;AAAA,gBACJ;AACA;AAAA,cACJ,KAAKA,MAAK;AAEN,oBAAI,YAAYC,wBAAuB,KAAK;AACxC,uBAAKA,wBAAuB,YAAY,SAAS;AAAA,gBACrD,OACK;AACD,0BAAQ,WAAW;AAAA,oBACf,KAAKA,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,6BAAO;AAAA;AAAA,wBAAkB,mBAAmB,CAAC;AAAA,sBAAC;AAC9C;AAAA,oBACJ,KAAKA,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,kBACR;AAAA,gBACJ;AACA;AAAA,cACJ,KAAKA,MAAK;AAEN,0BAAU;AACV,oBAAI,YAAY,IAAI;AAChB;AAAA,kBAAiC,OAAO,aAAa,KAAK,SAAS;AAAA,gBACvE,OACK;AACD,0BAAQ,WAAW;AAAA,oBACf,KAAK;AACD,2BAAK;AACL;AAAA,oBACJ,KAAKC,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,kBACR;AAAA,gBACJ;AACA;AAAA,cACJ,KAAKA,MAAK;AAEN,0BAAU;AACV,oBAAI,YAAYC,wBAAuB,KAAK;AACxC,uBAAKA,wBAAuB,YAAY,SAAS;AAAA,gBACrD,OACK;AACD,0BAAQ,WAAW;AAAA,oBACf,KAAKA,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,oBACJ,KAAKC,wBAAuB;AAGxB,6BAAO;AAAA;AAAA,wBAAkB,mBAAmB,CAAC;AAAA,sBAAC;AAC9C;AAAA,oBACJ,KAAKA,wBAAuB;AACxB,gCAAUD,MAAK;AACf;AAAA,kBACR;AAAA,gBACJ;AACA;AAAA,YACR;AAEA,gBAAI,OAAO,IAAI;AAEX,qBAAO,OAAO,EAAE;AAAA,YACpB;AACA;AAAA,UACJ;AAAA,QACJ;AAaA,QAAAC,wBAAuB,iBAAiB,SAAU,MAAM,WAAW,UAAU,WAAW,QAAQ;AAC5F,cAAI,eAAe,IAAI,8BAAsB;AAC7C,cAAII,SAAQ;AACZ,cAAI;AAAA;AAAA,YAAiB;AAAA;AACrB,cAAI,MAAM;AACV,kBAAQ,MAAM;AAAA,YACV,KAAKJ,wBAAuB;AAGxB,kBAAI,yBAAyB,IAAI,WAAW,CAAC;AAC7C,kBAAI,WAAW,UAAU,WAAW;AACpC,qBAAQ,YAAY,UAAU,CAAC,KAAM,CAAC,KAAK;AACvC,uCAAuBI,QAAO,IAAI;AAElC,wBAAQ,MAAM,QAAQ;AACtB,2BAAW,UAAU,WAAW;AAEhC,wBAAQ,UAAU;AAAA,kBACd,KAAKJ,wBAAuB;AAAA,kBAC5B,KAAKA,wBAAuB;AAAA,kBAC5B,KAAKA,wBAAuB;AAAA,kBAC5B,KAAKA,wBAAuB;AAAA,kBAC5B,KAAKA,wBAAuB;AAAA,kBAC5B,KAAKA,wBAAuB;AAAA,kBAC5B,KAAKA,wBAAuB;AACxB;AACA,0BAAM;AACN;AAAA,kBACJ;AACI,wBAAKI,SAAQ,MAAM,KAAOA,SAAQ,GAAI;AAGlC,+BAAS,IAAY,GAAG,IAAI,GAAG,EAAE,GAAG;AAKhC,qCAAa;AAAA;AAAA,0BAAiB,OAAO,aAAa,KAAK,KAAK,aAAa,KAAK,IAAI,EAAE,CAAC;AAAA,wBAAC;AAAA,sBAC1F;AACA,8BAAQ;AACR,sBAAAA,SAAQ;AAAA,oBACZ;AACA;AAAA,gBACR;AAAA,cACJ;AAEA,kBAAI,cAAc,UAAU,CAAC,KAAK,WAAWJ,wBAAuB,4BAA4B;AAC5F,uCAAuBI,QAAO,IAAI;AAAA,cACtC;AAIA,uBAAS,IAAY,GAAG,IAAIA,QAAO,KAAK;AACpC,6BAAa;AAAA;AAAA,kBAAiB,uBAAuB,CAAC;AAAA,gBAAC;AAAA,cAC3D;AACA;AAAA,YACJ,KAAKJ,wBAAuB;AAGxB,qBAAO,YAAY,UAAU,CAAC,KAAK,CAAC,KAAK;AACrC,oBAAI,OAAO,UAAU,WAAW;AAChC,oBAAI,OAAOA,wBAAuB,4BAA4B;AAC1D,kBAAAI;AAEA,0BAAQ,MAAM,QAAQ;AAAA,gBAC1B,OACK;AACD,0BAAQ,MAAM;AAAA,oBACV,KAAKJ,wBAAuB;AAAA,oBAC5B,KAAKA,wBAAuB;AAAA,oBAC5B,KAAKA,wBAAuB;AAAA,oBAC5B,KAAKA,wBAAuB;AAAA,oBAC5B,KAAKA,wBAAuB;AAAA,oBAC5B,KAAKA,wBAAuB;AAAA,oBAC5B,KAAKA,wBAAuB;AACxB;AACA,4BAAM;AACN;AAAA,kBACR;AAAA,gBACJ;AACA,oBAAKI,SAAQ,MAAM,KAAOA,SAAQ,GAAI;AAOlC,2BAAS,IAAY,GAAG,IAAI,GAAG,EAAE,GAAG;AAChC,iCAAa;AAAA;AAAA,sBAAiB,OAAO,aAAa,KAAK,KAAK,aAAa,KAAK,IAAI,EAAE,CAAC;AAAA,oBAAC;AAAA,kBAC1F;AACA,0BAAQ;AACR,kBAAAA,SAAQ;AAAA,gBACZ;AAAA,cACJ;AACA;AAAA,UACR;AACA,iBAAO,OAAO,uBAAe,OAAO,aAAa,YAAY,GAAG,QAAQ,CAAC;AACzE,iBAAO;AAAA,QACX;AAWA,QAAAJ,wBAAuB,oBAAoB,SAAU,WAAW,WAAmB,QAAQ;AACvF,cAAII,SAAQ;AACZ,cAAI,MAAM;AACV,cAAI,mBAAmB,IAAI,WAAWJ,wBAAuB,qBAAqB;AAClF,iBAAO,YAAY,UAAU,CAAC,KAAK,CAAC,KAAK;AACrC,gBAAI,OAAO,UAAU,WAAW;AAChC,gBAAI,cAAc,UAAU,CAAC,GAAG;AAC5B,oBAAM;AAAA,YACV;AACA,gBAAI,OAAOA,wBAAuB,4BAA4B;AAC1D,+BAAiBI,MAAK,IAAI;AAC1B,cAAAA;AAAA,YACJ,OACK;AACD,sBAAQ,MAAM;AAAA,gBACV,KAAKJ,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AAAA,gBAC5B,KAAKA,wBAAuB;AACxB;AACA,wBAAM;AACN;AAAA,cACR;AAAA,YACJ;AACA,iBAAKI,SAAQJ,wBAAuB,0BAA0B,KAAK,SAASA,wBAAuB,iCAAiC,QAAQI,SAAQ,GAAG;AAKnJ,qBAAO,OAAOJ,wBAAuB,sBAAsB,kBAAkBI,MAAK,CAAC;AACnF,cAAAA,SAAQ;AAAA,YACZ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AA6CA,QAAAJ,wBAAuB,wBAAwB,SAAU,WAAWI,QAAO;AACvE,cAAI,SAAS,aAAa,CAAC;AAC3B,mBAAS,IAAY,GAAG,IAAIA,QAAO,KAAK;AACpC,sBAAUJ,wBAAuB,OAAOI,SAAQ,IAAI,CAAC,IAAI,aAAa,UAAU,CAAC,CAAC;AAAA,UACtF;AACA,cAAI,eAAe,OAAO,SAAS;AACnC,cAAI,aAAa,OAAO,CAAC,MAAM,KAAK;AAChC,kBAAM,IAAI,wBAAgB;AAAA,UAC9B;AACA,iBAAO,aAAa,UAAU,CAAC;AAAA,QACnC;AACA,QAAAJ,wBAAuB,6BAA6B;AACpD,QAAAA,wBAAuB,6BAA6B;AACpD,QAAAA,wBAAuB,gCAAgC;AACvD,QAAAA,wBAAuB,+BAA+B;AACtD,QAAAA,wBAAuB,mBAAmB;AAC1C,QAAAA,wBAAuB,sBAAsB;AAC7C,QAAAA,wBAAuB,cAAc;AACrC,QAAAA,wBAAuB,mCAAmC;AAC1D,QAAAA,wBAAuB,oCAAoC;AAC3D,QAAAA,wBAAuB,0BAA0B;AACjD,QAAAA,wBAAuB,qCAAqC;AAC5D,QAAAA,wBAAuB,wBAAwB;AAC/C,QAAAA,wBAAuB,wCAAwC;AAC/D,QAAAA,wBAAuB,4CAA4C;AACnE,QAAAA,wBAAuB,yCAAyC;AAChE,QAAAA,wBAAuB,qCAAqC;AAC5D,QAAAA,wBAAuB,wCAAwC;AAC/D,QAAAA,wBAAuB,wCAAwC;AAC/D,QAAAA,wBAAuB,uCAAuC;AAC9D,QAAAA,wBAAuB,KAAK;AAC5B,QAAAA,wBAAuB,KAAK;AAC5B,QAAAA,wBAAuB,KAAK;AAC5B,QAAAA,wBAAuB,KAAK;AAC5B,QAAAA,wBAAuB,KAAK;AAC5B,QAAAA,wBAAuB,KAAK;AAC5B,QAAAA,wBAAuB,MAAM;AAC7B,QAAAA,wBAAuB,cAAc;AACrC,QAAAA,wBAAuB,cAAc;AAKrC,QAAAA,wBAAuB,SAAS,qBAAqB,IAAI,UAAU,IAAI,CAAC;AACxE,QAAAA,wBAAuB,+BAA+B;AACtD,eAAOA;AAAA,MACX,EAAE;AACF,MAAOC,kCAAQD;AAAA;AAAA;;;ACvwBf,MAeIK,YA0CA,uBAqoBG;AA9rBP;AAAA;AA4BA;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAAC;AAEA;AAlCA,MAAID,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUE,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AAgCA,MAAI;AAAA,MAAuC,WAAY;AACnD,iBAASC,yBAAwB;AAAA,QACjC;AA2BA,QAAAA,uBAAsB,SAAS,SAAU,OAAO,cAAc,iBAAiB,eAAe,kBAAkB,kBAAkB,kBAAkB;AAChJ,cAAI,cAAc,IAAI,oBAAY,OAAO,cAAc,iBAAiB,eAAe,gBAAgB;AACvG,cAAI,yBAAyB;AAC7B,cAAI,0BAA0B;AAC9B,cAAI;AACJ,mBAAS,YAAwB,QAAO,YAAY,OAAO;AACvD,gBAAI,gBAAgB,MAAM;AACtB,uCAAyBA,uBAAsB,sBAAsB,OAAO,aAAa,cAAc,MAAM,kBAAkB,gBAAgB;AAAA,YACnJ;AACA,gBAAI,iBAAiB,MAAM;AACvB,wCAA0BA,uBAAsB,sBAAsB,OAAO,aAAa,eAAe,OAAO,kBAAkB,gBAAgB;AAAA,YACtJ;AACA,8BAAkBA,uBAAsB,MAAM,wBAAwB,uBAAuB;AAC7F,gBAAI,mBAAmB,MAAM;AACzB,oBAAM,0BAAkB,oBAAoB;AAAA,YAChD;AACA,gBAAI,YAAY,gBAAgB,eAAe;AAC/C,gBAAI,aAAa,aAAa,SACzB,UAAU,QAAQ,IAAI,YAAY,QAAQ,KAAK,UAAU,QAAQ,IAAI,YAAY,QAAQ,IAAI;AAC9F,4BAAc;AAAA,YAClB,OACK;AACD;AAAA,YACJ;AAAA,UACJ;AACA,0BAAgB,eAAe,WAAW;AAC1C,cAAI,mBAAmB,gBAAgB,sBAAsB,IAAI;AACjE,0BAAgB,yBAAyB,GAAG,sBAAsB;AAClE,0BAAgB,yBAAyB,kBAAkB,uBAAuB;AAClF,cAAI,cAAc,0BAA0B;AAC5C,mBAAS,qBAA6B,GAAG,sBAAsB,kBAAkB,sBAAsB;AACnG,gBAAI,gBAAgB,cAAc,qBAAqB,mBAAmB;AAC1E,gBAAI,gBAAgB,yBAAyB,aAAa;AAAA,YAAiB,QAAW;AAElF;AAAA,YACJ;AACA,gBAAI,wBAAwB;AAC5B,gBAAI,kBAAkB,KAAK,kBAAkB,kBAAkB;AAC3D,sCAAwB,IAAI,0CAAkC,aAAa,kBAAkB,CAAC;AAAA,YAClG,OACK;AACD,sCAAwB,IAAI,8BAAsB,WAAW;AAAA,YACjE;AACA,4BAAgB,yBAAyB,eAAe,qBAAqB;AAC7E,gBAAI,cAAc;AAClB,gBAAI,sBAAsB;AAE1B,qBAAS,WAAmB,YAAY,QAAQ,GAAG,YAAY,YAAY,QAAQ,GAAG,YAAY;AAC9F,4BAAcA,uBAAsB,eAAe,iBAAiB,eAAe,UAAU,WAAW;AACxG,kBAAI,cAAc,KAAK,cAAc,YAAY,QAAQ,GAAG;AACxD,oBAAI,wBAAwB,IAAI;AAC5B;AAAA,gBACJ;AACA,8BAAc;AAAA,cAClB;AACA,kBAAI,WAAWA,uBAAsB,eAAe,OAAO,YAAY,QAAQ,GAAG,YAAY,QAAQ,GAAG,aAAa,aAAa,UAAU,kBAAkB,gBAAgB;AAC/K,kBAAI,YAAY,MAAM;AAClB,sCAAsB,YAAY,UAAU,QAAQ;AACpD,sCAAsB;AACtB,mCAAmB,KAAK,IAAI,kBAAkB,SAAS,SAAS,CAAC;AACjE,mCAAmB,KAAK,IAAI,kBAAkB,SAAS,SAAS,CAAC;AAAA,cACrE;AAAA,YACJ;AAAA,UACJ;AACA,iBAAOA,uBAAsB,oBAAoB,eAAe;AAAA,QACpE;AAQA,QAAAA,uBAAsB,QAAQ,SAAU,wBAAwB,yBAAyB;AACrF,cAAI,0BAA0B,QAAQ,2BAA2B,MAAM;AACnE,mBAAO;AAAA,UACX;AACA,cAAI,kBAAkBA,uBAAsB,mBAAmB,wBAAwB,uBAAuB;AAC9G,cAAI,mBAAmB,MAAM;AACzB,mBAAO;AAAA,UACX;AACA,cAAI,cAAc,oBAAY,MAAMA,uBAAsB,kBAAkB,sBAAsB,GAAGA,uBAAsB,kBAAkB,uBAAuB,CAAC;AACrK,iBAAO,IAAI,wBAAgB,iBAAiB,WAAW;AAAA,QAC3D;AAOA,QAAAA,uBAAsB,oBAAoB,SAAU,oBAAoB;AACpE,cAAI,KAAKC;AACT,cAAI,sBAAsB,MAAM;AAC5B,mBAAO;AAAA,UACX;AACA,cAAI,aAAa,mBAAmB,cAAc;AAClD,cAAI,cAAc,MAAM;AACpB,mBAAO;AAAA,UACX;AACA,cAAI,eAAeD,uBAAsB,OAAO,UAAU;AAC1D,cAAI,mBAAmB;AACvB,cAAI;AACA,qBAAS,eAAeH,WAAS,UAAU,GAAG,iBAAiB,aAAa,KAAK,GAAG,CAAC,eAAe,MAAM,iBAAiB,aAAa,KAAK,GAAG;AAC5I,kBAAI,YAAY,eAAe;AAC/B,kCAAoB,eAAe;AACnC,kBAAI,YAAY,GAAG;AACf;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,kBAAkB,CAAC,eAAe,SAASI,MAAK,aAAa;AAAS,gBAAAA,IAAG,KAAK,YAAY;AAAA,YAClG,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AACA,cAAI,YAAY,mBAAmB,aAAa;AAChD,mBAAS,MAAc,GAAG,mBAAmB,KAAK,UAAU,GAAG,KAAK,MAAM,OAAO;AAC7E;AAAA,UACJ;AACA,cAAI,iBAAiB;AACrB,mBAAS,MAAc,WAAW,SAAS,GAAG,OAAO,GAAG,OAAO;AAC3D,8BAAkB,eAAe,WAAW,GAAG;AAC/C,gBAAI,WAAW,GAAG,IAAI,GAAG;AACrB;AAAA,YACJ;AAAA,UACJ;AACA,mBAAS,MAAc,UAAU,SAAS,GAAG,iBAAiB,KAAK,UAAU,GAAG,KAAK,MAAM,OAAO;AAC9F;AAAA,UACJ;AACA,iBAAO,mBAAmB,eAAe,EAAE,eAAe,kBAAkB,gBAAgB,mBAAmB,OAAO,CAAC;AAAA,QAC3H;AACA,QAAAD,uBAAsB,SAAS,SAAU,QAAQ;AAC7C,cAAI,KAAKC;AACT,cAAI,WAAW;AACf,cAAI;AACA,qBAAS,WAAWJ,WAAS,MAAM,GAAG,aAAa,SAAS,KAAK,GAAG,CAAC,WAAW,MAAM,aAAa,SAAS,KAAK,GAAG;AAChH,kBAAI,QAAQ,WAAW;AACvB,yBAAW,KAAK,IAAI,UAAU,KAAK;AAAA,YACvC;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,cAAc,CAAC,WAAW,SAASI,MAAK,SAAS;AAAS,gBAAAA,IAAG,KAAK,QAAQ;AAAA,YAClF,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AACA,iBAAO;AAAA,QACX;AACA,QAAAD,uBAAsB,qBAAqB,SAAU,wBAAwB,yBAAyB;AAClG,cAAI;AACJ,cAAI,0BAA0B,SACzB,sBAAsB,uBAAuB,mBAAmB,MAAM,MAAM;AAC7E,mBAAO,2BAA2B,OAAO,OAAO,wBAAwB,mBAAmB;AAAA,UAC/F;AACA,cAAI;AACJ,cAAI,2BAA2B,SAC1B,uBAAuB,wBAAwB,mBAAmB,MAAM,MAAM;AAC/E,mBAAO;AAAA,UACX;AACA,cAAI,oBAAoB,eAAe,MAAM,qBAAqB,eAAe,KAC7E,oBAAoB,wBAAwB,MAAM,qBAAqB,wBAAwB,KAC/F,oBAAoB,YAAY,MAAM,qBAAqB,YAAY,GAAG;AAC1E,mBAAO;AAAA,UACX;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,uBAAsB,wBAAwB,SAAU,OAAO,aAAa,YAAY,aAAa,kBAAkB,kBAAkB;AACrI,cAAI,qBAAqB,IAAI,0CAAkC,aAAa,WAAW;AACvF,mBAAS,IAAY,GAAG,IAAI,GAAG,KAAK;AAChC,gBAAI,YAAY,MAAM,IAAI,IAAI;AAC9B,gBAAI,cAAc,KAAK,MAAM,KAAK,MAAM,WAAW,KAAK,CAAC,CAAC;AAC1D,qBAAS,WAAmB,KAAK,MAAM,KAAK,MAAM,WAAW,KAAK,CAAC,CAAC,GAAG,YAAY,YAAY,QAAQ,KACnG,YAAY,YAAY,QAAQ,GAAG,YAAY,WAAW;AAC1D,kBAAI,WAAWA,uBAAsB,eAAe,OAAO,GAAG,MAAM,SAAS,GAAG,aAAa,aAAa,UAAU,kBAAkB,gBAAgB;AACtJ,kBAAI,YAAY,MAAM;AAClB,mCAAmB,YAAY,UAAU,QAAQ;AACjD,oBAAI,aAAa;AACb,gCAAc,SAAS,UAAU;AAAA,gBACrC,OACK;AACD,gCAAc,SAAS,QAAQ;AAAA,gBACnC;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAWA,QAAAA,uBAAsB,sBAAsB,SAAU,iBAAiB,eAAe;AAClF,cAAI,kBAAkB,cAAc,CAAC,EAAE,CAAC;AACxC,cAAI,oBAAoB,gBAAgB,SAAS;AACjD,cAAI,8BAA8B,gBAAgB,sBAAsB,IACpE,gBAAgB,mBAAmB,IACnCA,uBAAsB,uBAAuB,gBAAgB,kBAAkB,CAAC;AACpF,cAAI,kBAAkB,WAAW,GAAG;AAChC,gBAAI,8BAA8B,KAAK,8BAA8B,qBAAa,0BAA0B;AACxG,oBAAM,0BAAkB,oBAAoB;AAAA,YAChD;AACA,4BAAgB,SAAS,2BAA2B;AAAA,UACxD,WACS,kBAAkB,CAAC,MAAM,6BAA6B;AAE3D,4BAAgB,SAAS,2BAA2B;AAAA,UACxD;AAAA,QACJ;AASA,QAAAA,uBAAsB,sBAAsB,SAAU,iBAAiB;AACnE,cAAI,gBAAgBA,uBAAsB,oBAAoB,eAAe;AAC7E,UAAAA,uBAAsB,oBAAoB,iBAAiB,aAAa;AACxE,cAAI,WAAmC,IAAI,MAAM;AACjD,cAAI,YAAY,IAAI,WAAW,gBAAgB,mBAAmB,IAAI,gBAAgB,sBAAsB,CAAC;AAC7G,cAAI;AAAA;AAAA,YAA2C,CAAC;AAAA;AAChD,cAAI;AAAA;AAAA,YAA+C,IAAI,MAAM;AAAA;AAC7D,mBAAS,MAAc,GAAG,MAAM,gBAAgB,mBAAmB,GAAG,OAAO;AACzE,qBAAS,SAAiB,GAAG,SAAS,gBAAgB,sBAAsB,GAAG,UAAU;AACrF,kBAAI,SAAS,cAAc,GAAG,EAAE,SAAS,CAAC,EAAE,SAAS;AACrD,kBAAI,gBAAgB,MAAM,gBAAgB,sBAAsB,IAAI;AACpE,kBAAI,OAAO,WAAW,GAAG;AACrB,yBAAS,KAAK,aAAa;AAAA,cAC/B,WACS,OAAO,WAAW,GAAG;AAC1B,0BAAU,aAAa,IAAI,OAAO,CAAC;AAAA,cACvC,OACK;AACD,qCAAqB,KAAK,aAAa;AACvC,yCAAyB,KAAK,MAAM;AAAA,cACxC;AAAA,YACJ;AAAA,UACJ;AACA,cAAI,uBAAuB,IAAI,MAAM,yBAAyB,MAAM;AACpE,mBAAS,IAAY,GAAG,IAAI,qBAAqB,QAAQ,KAAK;AAC1D,iCAAqB,CAAC,IAAI,yBAAyB,CAAC;AAAA,UACxD;AACA,iBAAOA,uBAAsB,uCAAuC,gBAAgB,kBAAkB,GAAG,WAAW,qBAAa,WAAW,QAAQ,GAAG,qBAAa,WAAW,oBAAoB,GAAG,oBAAoB;AAAA,QAC9N;AAiBA,QAAAA,uBAAsB,yCAAyC,SAAU,SAAS,WAAW,cAAc,kBAAkB,sBAAsB;AAC/I,cAAI,sBAAsB,IAAI,WAAW,iBAAiB,MAAM;AAChE,cAAI,QAAQ;AACZ,iBAAO,UAAU,GAAG;AAChB,qBAAS,IAAY,GAAG,IAAI,oBAAoB,QAAQ,KAAK;AACzD,wBAAU,iBAAiB,CAAC,CAAC,IAAI,qBAAqB,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAAA,YACnF;AACA,gBAAI;AACA,qBAAOA,uBAAsB,gBAAgB,WAAW,SAAS,YAAY;AAAA,YACjF,SACO,KAAK;AACR,kBAAI,UAAU,eAAe;AAC7B,kBAAI,CAAC,SAAS;AACV,sBAAM;AAAA,cACV;AAAA,YACJ;AACA,gBAAI,oBAAoB,WAAW,GAAG;AAClC,oBAAM,0BAAkB,oBAAoB;AAAA,YAChD;AACA,qBAAS,IAAY,GAAG,IAAI,oBAAoB,QAAQ,KAAK;AACzD,kBAAI,oBAAoB,CAAC,IAAI,qBAAqB,CAAC,EAAE,SAAS,GAAG;AAC7D,oCAAoB,CAAC;AACrB;AAAA,cACJ,OACK;AACD,oCAAoB,CAAC,IAAI;AACzB,oBAAI,MAAM,oBAAoB,SAAS,GAAG;AACtC,wBAAM,0BAAkB,oBAAoB;AAAA,gBAChD;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,gBAAM,0BAAkB,oBAAoB;AAAA,QAChD;AACA,QAAAA,uBAAsB,sBAAsB,SAAU,iBAAiB;AACnE,cAAI,KAAKC,KAAI,KAAK;AAGlB,cAAI,gBAAgB,MAAM,KAAK,EAAE,QAAQ,gBAAgB,mBAAmB,EAAE,GAAG,WAAY;AAAE,mBAAO,IAAI,MAAM,gBAAgB,sBAAsB,IAAI,CAAC;AAAA,UAAG,CAAC;AAC/J,mBAAS,MAAc,GAAG,MAAM,cAAc,QAAQ,OAAO;AACzD,qBAAS,WAAmB,GAAG,WAAW,cAAc,GAAG,EAAE,QAAQ,YAAY;AAC7E,4BAAc,GAAG,EAAE,QAAQ,IAAI,IAAI,qBAAa;AAAA,YACpD;AAAA,UACJ;AACA,cAAI,SAAS;AACb,cAAI;AACA,qBAAS,KAAKJ,WAAS,gBAAgB,0BAA0B,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AAC3G,kBAAI,wBAAwB,GAAG;AAC/B,kBAAI,yBAAyB,MAAM;AAC/B,oBAAI;AACA,2BAAS,MAAM,MAAM,QAAQA,WAAS,sBAAsB,aAAa,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AACpH,wBAAI,WAAW,GAAG;AAClB,wBAAI,YAAY,MAAM;AAClB,0BAAI,YAAY,SAAS,aAAa;AACtC,0BAAI,aAAa,GAAG;AAChB,4BAAI,aAAa,cAAc,QAAQ;AAEnC;AAAA,wBACJ;AACA,sCAAc,SAAS,EAAE,MAAM,EAAE,SAAS,SAAS,SAAS,CAAC;AAAA,sBACjE;AAAA,oBACJ;AAAA,kBACJ;AAAA,gBACJ,SACO,OAAO;AAAE,wBAAM,EAAE,OAAO,MAAM;AAAA,gBAAG,UACxC;AACI,sBAAI;AACA,wBAAI,MAAM,CAAC,GAAG,SAAS,KAAK,GAAG;AAAS,yBAAG,KAAK,EAAE;AAAA,kBACtD,UACA;AAAU,wBAAI;AAAK,4BAAM,IAAI;AAAA,kBAAO;AAAA,gBACxC;AAAA,cACJ;AACA;AAAA,YACJ;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,MAAM,CAAC,GAAG,SAASI,MAAK,GAAG;AAAS,gBAAAA,IAAG,KAAK,EAAE;AAAA,YACtD,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AACA,iBAAO;AAAA,QACX;AACA,QAAAD,uBAAsB,uBAAuB,SAAU,iBAAiB,eAAe;AACnF,iBAAO,iBAAiB,KAAK,iBAAiB,gBAAgB,sBAAsB,IAAI;AAAA,QAC5F;AACA,QAAAA,uBAAsB,iBAAiB,SAAU,iBAAiB,eAAe,UAAU,aAAa;AACpG,cAAI,KAAKC;AACT,cAAI,SAAS,cAAc,IAAI;AAC/B,cAAI,WAAW;AACf,cAAID,uBAAsB,qBAAqB,iBAAiB,gBAAgB,MAAM,GAAG;AACrF,uBAAW,gBAAgB,yBAAyB,gBAAgB,MAAM,EAAE,YAAY,QAAQ;AAAA,UACpG;AACA,cAAI,YAAY,MAAM;AAClB,mBAAO,cAAc,SAAS,QAAQ,IAAI,SAAS,UAAU;AAAA,UACjE;AACA,qBAAW,gBAAgB,yBAAyB,aAAa,EAAE,kBAAkB,QAAQ;AAC7F,cAAI,YAAY,MAAM;AAClB,mBAAO,cAAc,SAAS,UAAU,IAAI,SAAS,QAAQ;AAAA,UACjE;AACA,cAAIA,uBAAsB,qBAAqB,iBAAiB,gBAAgB,MAAM,GAAG;AACrF,uBAAW,gBAAgB,yBAAyB,gBAAgB,MAAM,EAAE,kBAAkB,QAAQ;AAAA,UAC1G;AACA,cAAI,YAAY,MAAM;AAClB,mBAAO,cAAc,SAAS,QAAQ,IAAI,SAAS,UAAU;AAAA,UACjE;AACA,cAAI,iBAAiB;AACrB,iBAAOA,uBAAsB,qBAAqB,iBAAiB,gBAAgB,MAAM,GAAG;AACxF,6BAAiB;AACjB,gBAAI;AACA,uBAAS,MAAM,MAAM,QAAQH,WAAS,gBAAgB,yBAAyB,aAAa,EAAE,aAAa,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AACtJ,oBAAI,sBAAsB,GAAG;AAC7B,oBAAI,uBAAuB,MAAM;AAC7B,0BAAQ,cAAc,oBAAoB,QAAQ,IAAI,oBAAoB,UAAU,KAChF,SACI,kBACC,oBAAoB,QAAQ,IAAI,oBAAoB,UAAU;AAAA,gBAC3E;AAAA,cACJ;AAAA,YACJ,SACO,OAAO;AAAE,oBAAM,EAAE,OAAO,MAAM;AAAA,YAAG,UACxC;AACI,kBAAI;AACA,oBAAI,MAAM,CAAC,GAAG,SAASI,MAAK,GAAG;AAAS,kBAAAA,IAAG,KAAK,EAAE;AAAA,cACtD,UACA;AAAU,oBAAI;AAAK,wBAAM,IAAI;AAAA,cAAO;AAAA,YACxC;AACA;AAAA,UACJ;AACA,iBAAO,cAAc,gBAAgB,eAAe,EAAE,QAAQ,IAAI,gBAAgB,eAAe,EAAE,QAAQ;AAAA,QAC/G;AACA,QAAAD,uBAAsB,iBAAiB,SAAU,OAAO,WAAW,WAAW,aAAa,aAAa,UAAU,kBAAkB,kBAAkB;AAClJ,wBAAcA,uBAAsB,0BAA0B,OAAO,WAAW,WAAW,aAAa,aAAa,QAAQ;AAK7H,cAAI,iBAAiBA,uBAAsB,kBAAkB,OAAO,WAAW,WAAW,aAAa,aAAa,QAAQ;AAC5H,cAAI,kBAAkB,MAAM;AACxB,mBAAO;AAAA,UACX;AACA,cAAI;AACJ,cAAI,mBAAmB,kBAAU,IAAI,cAAc;AACnD,cAAI,aAAa;AACb,wBAAY,cAAc;AAAA,UAC9B,OACK;AACD,qBAAS,IAAY,GAAG,IAAI,eAAe,SAAS,GAAG,KAAK;AACxD,kBAAI,WAAW,eAAe,CAAC;AAC/B,6BAAe,CAAC,IAAI,eAAe,eAAe,SAAS,IAAI,CAAC;AAChE,6BAAe,eAAe,SAAS,IAAI,CAAC,IAAI;AAAA,YACpD;AACA,wBAAY;AACZ,0BAAc,YAAY;AAAA,UAC9B;AAcA,cAAI,CAACA,uBAAsB,kBAAkB,kBAAkB,kBAAkB,gBAAgB,GAAG;AAGhG,mBAAO;AAAA,UACX;AACA,cAAI,eAAe,8BAAsB,gBAAgB,cAAc;AACvE,cAAI,WAAW,qBAAa,YAAY,YAAY;AACpD,cAAI,aAAa,IAAI;AACjB,mBAAO;AAAA,UACX;AACA,iBAAO,IAAI,iBAAS,aAAa,WAAWA,uBAAsB,wBAAwB,YAAY,GAAG,QAAQ;AAAA,QACrH;AACA,QAAAA,uBAAsB,oBAAoB,SAAU,OAAO,WAAW,WAAW,aAAa,aAAa,UAAU;AACjH,cAAI,cAAc;AAClB,cAAI,iBAAiB,IAAI,WAAW,CAAC;AACrC,cAAI,eAAe;AACnB,cAAI,YAAY,cAAc,IAAI;AAClC,cAAI,qBAAqB;AACzB,kBAAQ,cAAc,cAAc,YAAY,eAAe,cAC3D,eAAe,eAAe,QAAQ;AACtC,gBAAI,MAAM,IAAI,aAAa,QAAQ,MAAM,oBAAoB;AACzD,6BAAe,YAAY;AAC3B,6BAAe;AAAA,YACnB,OACK;AACD;AACA,mCAAqB,CAAC;AAAA,YAC1B;AAAA,UACJ;AACA,cAAI,iBAAiB,eAAe,UAC9B,iBAAiB,cAAc,YAAY,cACzC,iBAAiB,eAAe,SAAS,GAAI;AACjD,mBAAO;AAAA,UACX;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,uBAAsB,yBAAyB,SAAU,gBAAgB;AACrE,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,uBAAsB,4BAA4B,SAAU,OAAO,WAAW,WAAW,aAAa,qBAAqB,UAAU;AACjI,cAAI,uBAAuB;AAC3B,cAAI,YAAY,cAAc,KAAK;AAEnC,mBAAS,IAAY,GAAG,IAAI,GAAG,KAAK;AAChC,oBAAQ,cAAc,wBAAwB,YAAY,uBAAuB,cAC7E,gBAAgB,MAAM,IAAI,sBAAsB,QAAQ,GAAG;AAC3D,kBAAI,KAAK,IAAI,sBAAsB,oBAAoB,IAAIA,uBAAsB,oBAAoB;AACjG,uBAAO;AAAA,cACX;AACA,sCAAwB;AAAA,YAC5B;AACA,wBAAY,CAAC;AACb,0BAAc,CAAC;AAAA,UACnB;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,uBAAsB,oBAAoB,SAAU,cAAc,kBAAkB,kBAAkB;AAClG,iBAAO,mBAAmBA,uBAAsB,sBAAsB,gBAClE,gBAAgB,mBAAmBA,uBAAsB;AAAA,QACjE;AAKA,QAAAA,uBAAsB,kBAAkB,SAAU,WAAW,SAAS,UAAU;AAC5E,cAAI,UAAU,WAAW,GAAG;AACxB,kBAAM,wBAAgB,kBAAkB;AAAA,UAC5C;AACA,cAAI,iBAAiB,KAAM,UAAU;AACrC,cAAI,uBAAuBA,uBAAsB,cAAc,WAAW,UAAU,cAAc;AAClG,UAAAA,uBAAsB,oBAAoB,WAAW,cAAc;AAEnE,cAAI,gBAAgBE,gCAAuB,OAAO,WAAW,KAAK,OAAO;AACzE,wBAAc,mBAAmB,oBAAoB;AACrD,wBAAc,YAAY,SAAS,MAAM;AACzC,iBAAO;AAAA,QACX;AAUA,QAAAF,uBAAsB,gBAAgB,SAAU,WAAW,UAAU,gBAAgB;AACjF,cAAI,YAAY,QACZ,SAAS,SAAS,iBAAiB,IAAIA,uBAAsB,cAC7D,iBAAiB,KACjB,iBAAiBA,uBAAsB,kBAAkB;AAEzD,kBAAM,0BAAkB,oBAAoB;AAAA,UAChD;AACA,iBAAOA,uBAAsB,gBAAgB,OAAO,WAAW,gBAAgB,QAAQ;AAAA,QAC3F;AAKA,QAAAA,uBAAsB,sBAAsB,SAAU,WAAW,gBAAgB;AAC7E,cAAI,UAAU,SAAS,GAAG;AAGtB,kBAAM,wBAAgB,kBAAkB;AAAA,UAC5C;AAIA,cAAI,oBAAoB,UAAU,CAAC;AACnC,cAAI,oBAAoB,UAAU,QAAQ;AACtC,kBAAM,wBAAgB,kBAAkB;AAAA,UAC5C;AACA,cAAI,sBAAsB,GAAG;AAEzB,gBAAI,iBAAiB,UAAU,QAAQ;AACnC,wBAAU,CAAC,IAAI,UAAU,SAAS;AAAA,YACtC,OACK;AACD,oBAAM,wBAAgB,kBAAkB;AAAA,YAC5C;AAAA,UACJ;AAAA,QACJ;AACA,QAAAA,uBAAsB,yBAAyB,SAAU,UAAU;AAC/D,cAAI,SAAS,IAAI,WAAW,CAAC;AAC7B,cAAI,gBAAgB;AACpB,cAAI,IAAI,OAAO,SAAS;AACxB,iBAAO,MAAM;AACT,iBAAK,WAAW,OAAS,eAAe;AACpC,8BAAgB,WAAW;AAC3B;AACA,kBAAI,IAAI,GAAG;AACP;AAAA,cACJ;AAAA,YACJ;AACA,mBAAO,CAAC;AACR,yBAAa;AAAA,UACjB;AACA,iBAAO;AAAA,QACX;AACA,QAAAA,uBAAsB,0BAA0B,SAAU,UAAU;AAChE,cAAI,oBAAoB,YAAY;AAChC,mBAAO,KAAK,mCAAmC,QAAQ;AAAA,UAC3D;AACA,iBAAO,KAAK,+BAA+B,QAAQ;AAAA,QACvD;AACA,QAAAA,uBAAsB,iCAAiC,SAAU,UAAU;AACvE,iBAAOA,uBAAsB,wBAAwBA,uBAAsB,uBAAuB,QAAQ,CAAC;AAAA,QAC/G;AACA,QAAAA,uBAAsB,qCAAqC,SAAU,gBAAgB;AACjF,kBAAQ,eAAe,CAAC,IAAI,eAAe,CAAC,IAAI,eAAe,CAAC,IAAI,eAAe,CAAC,IAAI,KAAK;AAAA,QACjG;AACA,QAAAA,uBAAsB,WAAW,SAAU,eAAe;AACtD,cAAI,YAAY,IAAI,kBAAU;AAE9B,mBAAS,MAAc,GAAG,MAAM,cAAc,QAAQ,OAAO;AACzD,sBAAU,OAAO,aAAa,GAAG;AACjC,qBAAS,SAAiB,GAAG,SAAS,cAAc,GAAG,EAAE,QAAQ,UAAU;AACvE,kBAAI,eAAe,cAAc,GAAG,EAAE,MAAM;AAC5C,kBAAI,aAAa,SAAS,EAAE,WAAW,GAAG;AACtC,0BAAU,OAAO,YAAY,IAAI;AAAA,cACrC,OACK;AACD,0BAAU,OAAO,YAAY,aAAa,SAAS,EAAE,CAAC,GAAG,aAAa,cAAc,aAAa,SAAS,EAAE,CAAC,CAAC,CAAC;AAAA,cACnH;AAAA,YACJ;AACA,sBAAU,OAAO,IAAI;AAAA,UACzB;AACA,iBAAO,UAAU,SAAS;AAAA,QAE9B;AACU,QAAAA,uBAAsB,qBAAqB;AAC3C,QAAAA,uBAAsB,aAAa;AACnC,QAAAA,uBAAsB,mBAAmB;AACzC,QAAAA,uBAAsB,kBAAkB,IAAI,wBAAgB;AACtE,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,gCAAQ;AAAA;AAAA;;;AC9rBf,MAeIG,YAwCA,cAwGG;AA/JP;AAAA;AA4BA;AAEA;AAEA;AAEA;AAEA;AAMA;AACA;AACA;AACA,MAAAC;AACA;AA/BA,MAAID,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUE,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AA8BA,MAAI;AAAA,MAA8B,WAAY;AAC1C,iBAASC,gBAAe;AAAA,QACxB;AAWA,QAAAA,cAAa,UAAU,SAAS,SAAU,OAAO,OAAO;AACpD,cAAI,UAAU,QAAQ;AAAE,oBAAQ;AAAA,UAAM;AACtC,cAAI,SAASA,cAAa,OAAO,OAAO,OAAO,KAAK;AACpD,cAAI,UAAU,QAAQ,OAAO,WAAW,KAAK,OAAO,CAAC,KAAK,MAAM;AAC5D,kBAAM,0BAAkB,oBAAoB;AAAA,UAChD;AACA,iBAAO,OAAO,CAAC;AAAA,QACnB;AAQA,QAAAA,cAAa,UAAU,iBAAiB,SAAU,OAAO,OAAO;AAC5D,cAAI,UAAU,QAAQ;AAAE,oBAAQ;AAAA,UAAM;AACtC,cAAI;AACA,mBAAOA,cAAa,OAAO,OAAO,OAAO,IAAI;AAAA,UACjD,SACO,SAAS;AACZ,gBAAI,mBAAmB,2BAAmB,mBAAmB,2BAAmB;AAC5E,oBAAM,0BAAkB,oBAAoB;AAAA,YAChD;AACA,kBAAM;AAAA,UACV;AAAA,QACJ;AAWA,QAAAA,cAAa,SAAS,SAAU,OAAO,OAAO,UAAU;AACpD,cAAI,KAAKC;AACT,cAAI,UAAU,IAAI,MAAM;AACxB,cAAI,iBAAiBC,kBAAS,eAAe,OAAO,OAAO,QAAQ;AACnE,cAAI;AACA,qBAAS,KAAKL,WAAS,eAAe,UAAU,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AAC1F,kBAAI,SAAS,GAAG;AAChB,kBAAI,gBAAgB,8BAAsB,OAAO,eAAe,QAAQ,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAGG,cAAa,oBAAoB,MAAM,GAAGA,cAAa,oBAAoB,MAAM,CAAC;AACzM,kBAAI,SAAS,IAAI,eAAO,cAAc,QAAQ,GAAG,cAAc,YAAY,GAAG,QAAW,QAAQ,sBAAc,OAAO;AACtH,qBAAO,YAAY,2BAAmB,wBAAwB,cAAc,WAAW,CAAC;AACxF,kBAAI,uBAAuB,cAAc,SAAS;AAClD,kBAAI,wBAAwB,MAAM;AAC9B,uBAAO,YAAY,2BAAmB,uBAAuB,oBAAoB;AAAA,cACrF;AACA,sBAAQ,KAAK,MAAM;AAAA,YACvB;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,MAAM,CAAC,GAAG,SAASC,MAAK,GAAG;AAAS,gBAAAA,IAAG,KAAK,EAAE;AAAA,YACtD,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AACA,iBAAO,QAAQ,IAAI,SAAU,GAAG;AAAE,mBAAO;AAAA,UAAG,CAAC;AAAA,QACjD;AACA,QAAAD,cAAa,cAAc,SAAU,IAAI,IAAI;AACzC,cAAI,MAAM,QAAQ,MAAM,MAAM;AAC1B,mBAAO;AAAA,UACX;AACA,iBAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC;AAAA,QACrD;AACA,QAAAA,cAAa,cAAc,SAAU,IAAI,IAAI;AACzC,cAAI,MAAM,QAAQ,MAAM,MAAM;AAC1B,mBAAO,gBAAQ;AAAA,UACnB;AACA,iBAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC;AAAA,QACrD;AACA,QAAAA,cAAa,sBAAsB,SAAU,GAAG;AAC5C,iBAAO,KAAK,MAAM,KAAK,IAAI,KAAK,IAAIA,cAAa,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAGA,cAAa,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,qBAAa,sBAC1H,qBAAa,uBAAuB,GAAG,KAAK,IAAIA,cAAa,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAGA,cAAa,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,qBAAa,sBAC1I,qBAAa,uBAAuB,CAAC,CAAC;AAAA,QAC9C;AACA,QAAAA,cAAa,sBAAsB,SAAU,GAAG;AAC5C,iBAAO,KAAK,MAAM,KAAK,IAAI,KAAK,IAAIA,cAAa,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAGA,cAAa,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,qBAAa,sBAC1H,qBAAa,uBAAuB,GAAG,KAAK,IAAIA,cAAa,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAGA,cAAa,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,qBAAa,sBAC1I,qBAAa,uBAAuB,CAAC,CAAC;AAAA,QAC9C;AAEA,QAAAA,cAAa,UAAU,QAAQ,WAAY;AAAA,QAE3C;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,uBAAQ;AAAA;AAAA;;;AC/Jf,MAAIG,aAiBA,iBAQG;AAzBP;AAAA;AAaA;AAbA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAKH,MAAI;AAAA,MAAiC,SAAU,QAAQ;AACnD,QAAAF,YAAUG,kBAAiB,MAAM;AACjC,iBAASA,mBAAkB;AACvB,iBAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,SAAS,KAAK;AAAA,QAC/D;AACA,QAAAA,iBAAgB,OAAO;AACvB,eAAOA;AAAA,MACX,EAAE,iBAAS;AACX,MAAO,0BAAQ;AAAA;AAAA;;;ACzBf,MAeIC,YA6BA,mBAwKG;AApNP;AAAA;AA0BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAnBA,MAAIA,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUC,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AAmBA,MAAI;AAAA,MAAmC,WAAY;AAC/C,iBAASC,qBAAoB;AAAA,QAC7B;AA0BA,QAAAA,mBAAkB,UAAU,SAAS,SAAU,OAAO,OAAO;AACzD,eAAK,SAAS,KAAK;AACnB,iBAAO,KAAK,eAAe,KAAK;AAAA,QACpC;AAUA,QAAAA,mBAAkB,UAAU,kBAAkB,SAAU,OAAO;AAE3D,cAAI,KAAK,YAAY,QAAQ,KAAK,YAAY,QAAW;AACrD,iBAAK,SAAS,IAAI;AAAA,UACtB;AACA,iBAAO,KAAK,eAAe,KAAK;AAAA,QACpC;AAQA,QAAAA,mBAAkB,UAAU,WAAW,SAAU,OAAO;AACpD,eAAK,QAAQ;AACb,cAAI,YAAY,UAAU,QAAQ,UAAU,UAAa,WAAc,MAAM,IAAI,uBAAe,UAAU;AAE1G,cAAI,UAAU,UAAU,QAAQ,UAAU,SAAY,OAAO,MAAM,IAAI,uBAAe,gBAAgB;AACtG,cAAIC,WAAU,IAAI,MAAM;AACxB,cAAI,YAAY,QAAQ,YAAY,QAAW;AAC3C,gBAAI,gBAAgB,QAAQ,KAAK,SAAU,GAAG;AAC1C,qBAAO,MAAM,sBAAc,SACvB,MAAM,sBAAc,SACpB,MAAM,sBAAc,UACpB,MAAM,sBAAc,SACpB,MAAM,sBAAc,WACpB,MAAM,sBAAc,WACpB,MAAM,sBAAc,WACpB,MAAM,sBAAc,YACpB,MAAM,sBAAc,OACpB,MAAM,sBAAc,UACpB,MAAM,sBAAc;AAAA,YAC5B,CAAC;AAGD,gBAAI,iBAAiB,CAAC,WAAW;AAC7B,cAAAA,SAAQ,KAAK,IAAI,8BAAsB,KAAK,CAAC;AAAA,YACjD;AACA,gBAAI,QAAQ,SAAS,sBAAc,OAAO,GAAG;AACzC,cAAAA,SAAQ,KAAK,IAAI,qBAAa,CAAC;AAAA,YACnC;AACA,gBAAI,QAAQ,SAAS,sBAAc,WAAW,GAAG;AAC7C,cAAAA,SAAQ,KAAK,IAAI,yBAAiB,CAAC;AAAA,YACvC;AACA,gBAAI,QAAQ,SAAS,sBAAc,KAAK,GAAG;AACvC,cAAAA,SAAQ,KAAK,IAAI,oBAAY,CAAC;AAAA,YAClC;AACA,gBAAI,QAAQ,SAAS,sBAAc,OAAO,GAAG;AACzC,cAAAA,SAAQ,KAAK,IAAI,qBAAa,CAAC;AAAA,YACnC;AAKA,gBAAI,iBAAiB,WAAW;AAC5B,cAAAA,SAAQ,KAAK,IAAI,8BAAsB,KAAK,CAAC;AAAA,YACjD;AAAA,UACJ;AACA,cAAIA,SAAQ,WAAW,GAAG;AACtB,gBAAI,CAAC,WAAW;AACZ,cAAAA,SAAQ,KAAK,IAAI,8BAAsB,KAAK,CAAC;AAAA,YACjD;AACA,YAAAA,SAAQ,KAAK,IAAI,qBAAa,CAAC;AAC/B,YAAAA,SAAQ,KAAK,IAAI,yBAAiB,CAAC;AACnC,YAAAA,SAAQ,KAAK,IAAI,oBAAY,CAAC;AAC9B,YAAAA,SAAQ,KAAK,IAAI,qBAAa,CAAC;AAE/B,gBAAI,WAAW;AACX,cAAAA,SAAQ,KAAK,IAAI,8BAAsB,KAAK,CAAC;AAAA,YACjD;AAAA,UACJ;AACA,eAAK,UAAUA;AAAA,QACnB;AAEA,QAAAD,mBAAkB,UAAU,QAAQ,WAAY;AAC5C,cAAI,KAAKE;AACT,cAAI,KAAK,YAAY,MAAM;AACvB,gBAAI;AACA,uBAAS,KAAKJ,WAAS,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AAC5E,oBAAI,SAAS,GAAG;AAChB,uBAAO,MAAM;AAAA,cACjB;AAAA,YACJ,SACO,OAAO;AAAE,oBAAM,EAAE,OAAO,MAAM;AAAA,YAAG,UACxC;AACI,kBAAI;AACA,oBAAI,MAAM,CAAC,GAAG,SAASI,MAAK,GAAG;AAAS,kBAAAA,IAAG,KAAK,EAAE;AAAA,cACtD,UACA;AAAU,oBAAI;AAAK,wBAAM,IAAI;AAAA,cAAO;AAAA,YACxC;AAAA,UACJ;AAAA,QACJ;AAIA,QAAAF,mBAAkB,UAAU,iBAAiB,SAAU,OAAO;AAC1D,cAAI,KAAKE;AACT,cAAI,KAAK,YAAY,MAAM;AACvB,kBAAM,IAAI,wBAAgB,iDAAiD;AAAA,UAC/E;AACA,cAAI;AACA,qBAAS,KAAKJ,WAAS,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AAC5E,kBAAI,SAAS,GAAG;AAEhB,kBAAI;AACA,uBAAO,OAAO,OAAO,OAAO,KAAK,KAAK;AAAA,cAC1C,SACO,IAAI;AACP,oBAAI,cAAc,yBAAiB;AAC/B;AAAA,gBACJ;AAAA,cAEJ;AAAA,YACJ;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,MAAM,CAAC,GAAG,SAASI,MAAK,GAAG;AAAS,gBAAAA,IAAG,KAAK,EAAE;AAAA,YACtD,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AACA,gBAAM,IAAI,0BAAkB,sDAAsD;AAAA,QACtF;AACA,eAAOF;AAAA,MACX,EAAE;AACF,MAAO,4BAAQ;AAAA;AAAA;;;ACpNf,MAAIG,aAeA;AAfJ;AAAA;AAaA;AACA;AAdA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAGH,MAAI;AAAA,MAA0C,SAAU,QAAQ;AAC5D,QAAAF,YAAUG,2BAA0B,MAAM;AAC1C,iBAASA,0BAAyB,OAAO,wBAAwB;AAC7D,cAAI,UAAU,QAAQ;AAAE,oBAAQ;AAAA,UAAM;AACtC,cAAI,2BAA2B,QAAQ;AAAE,qCAAyB;AAAA,UAAK;AACvE,cAAI,QAAQ;AACZ,cAAI,SAAS,IAAI,0BAAkB;AACnC,iBAAO,SAAS,KAAK;AACrB,kBAAQ,OAAO,KAAK,MAAM,QAAQ,sBAAsB,KAAK;AAC7D,iBAAO;AAAA,QACX;AAKA,QAAAA,0BAAyB,UAAU,eAAe,SAAU,cAAc;AACtE,iBAAO,KAAK,OAAO,gBAAgB,YAAY;AAAA,QACnD;AACA,eAAOA;AAAA,MACX,EAAE,iBAAiB;AAAA;AAAA;;;AClCnB,MAAIC,aAoBA;AApBJ;AAAA;AAaA;AACA;AAdA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAQH,MAAI;AAAA,MAAqC,SAAU,QAAQ;AACvD,QAAAF,YAAUG,sBAAqB,MAAM;AAKrC,iBAASA,qBAAoB,wBAAwB;AACjD,cAAI,2BAA2B,QAAQ;AAAE,qCAAyB;AAAA,UAAK;AACvE,iBAAO,OAAO,KAAK,MAAM,IAAI,qBAAa,GAAG,sBAAsB,KAAK;AAAA,QAC5E;AACA,eAAOA;AAAA,MACX,EAAE,iBAAiB;AAAA;AAAA;;;AC/BnB,MAAIC,aAoBA;AApBJ;AAAA;AAaA;AACA;AAdA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAQH,MAAI;AAAA,MAAqC,SAAU,QAAQ;AACvD,QAAAF,YAAUG,sBAAqB,MAAM;AAKrC,iBAASA,qBAAoB,wBAAwB;AACjD,cAAI,2BAA2B,QAAQ;AAAE,qCAAyB;AAAA,UAAK;AACvE,iBAAO,OAAO,KAAK,MAAM,IAAI,qBAAa,GAAG,sBAAsB,KAAK;AAAA,QAC5E;AACA,eAAOA;AAAA,MACX,EAAE,iBAAiB;AAAA;AAAA;;;AC/BnB,MAqBI,gBAgGG;AArHP;AAAA;AAsBA,OAAC,SAAUC,iBAAgB;AAUvB,QAAAA,gBAAeA,gBAAe,kBAAkB,IAAI,CAAC,IAAI;AAIzD,QAAAA,gBAAeA,gBAAe,eAAe,IAAI,CAAC,IAAI;AAItD,QAAAA,gBAAeA,gBAAe,mBAAmB,IAAI,CAAC,IAAI;AAe1D,QAAAA,gBAAeA,gBAAe,qBAAqB,IAAI,CAAC,IAAI;AAQ5D,QAAAA,gBAAeA,gBAAe,UAAU,IAAI,CAAC,IAAI;AAOjD,QAAAA,gBAAeA,gBAAe,UAAU,IAAI,CAAC,IAAI;AAMjD,QAAAA,gBAAeA,gBAAe,QAAQ,IAAI,CAAC,IAAI;AAK/C,QAAAA,gBAAeA,gBAAe,gBAAgB,IAAI,CAAC,IAAI;AAMvD,QAAAA,gBAAeA,gBAAe,mBAAmB,IAAI,CAAC,IAAI;AAK1D,QAAAA,gBAAeA,gBAAe,mBAAmB,IAAI,CAAC,IAAI;AAQ1D,QAAAA,gBAAeA,gBAAe,cAAc,IAAI,EAAE,IAAI;AAKtD,QAAAA,gBAAeA,gBAAe,YAAY,IAAI,EAAE,IAAI;AAKpD,QAAAA,gBAAeA,gBAAe,YAAY,IAAI,EAAE,IAAI;AAKpD,QAAAA,gBAAeA,gBAAe,WAAW,IAAI,EAAE,IAAI;AAAA,MACvD,GAAG,mBAAmB,iBAAiB,CAAC,EAAE;AAC1C,MAAO,yBAAQ;AAAA;AAAA;;;ACrHf,MAwBI,oBAqEG;AA7FP;AAAA;AAeA;AACA;AACA;AAOA,MAAI;AAAA,MAAoC,WAAY;AAShD,iBAASC,oBAAmB,OAAO;AAC/B,eAAK,QAAQ;AACb,eAAK,mBAAmB,CAAC;AACzB,eAAK,iBAAiB,KAAK,IAAI,sBAAc,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,QAC7E;AACA,QAAAA,oBAAmB,UAAU,iBAAiB,SAAU,QAAgB;AACpE,cAAI,mBAAmB,KAAK;AAC5B,cAAI,UAAU,iBAAiB,QAAQ;AACnC,gBAAI,gBAAgB,iBAAiB,iBAAiB,SAAS,CAAC;AAChE,gBAAI,QAAQ,KAAK;AACjB,qBAAS,IAAI,iBAAiB,QAAQ,KAAK,QAAQ,KAAK;AACpD,kBAAI,gBAAgB,cAAc,SAAS,IAAI,sBAAc,OAAO,WAAW,KAAK,CAAC,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AACtI,+BAAiB,KAAK,aAAa;AACnC,8BAAgB;AAAA,YACpB;AAAA,UACJ;AACA,iBAAO,iBAAiB,MAAM;AAAA,QAClC;AAoBA,QAAAA,oBAAmB,UAAU,SAAS,SAAU,UAAU,SAAiB;AACvE,cAAI,YAAY,GAAG;AACf,kBAAM,IAAI,iCAAyB,2BAA2B;AAAA,UAClE;AACA,cAAI,YAAY,SAAS,SAAS;AAClC,cAAI,aAAa,GAAG;AAChB,kBAAM,IAAI,iCAAyB,wBAAwB;AAAA,UAC/D;AACA,cAAI,YAAY,KAAK,eAAe,OAAO;AAC3C,cAAI,mBAAmB,IAAI,WAAW,SAAS;AAC/C,yBAAO,UAAU,UAAU,GAAG,kBAAkB,GAAG,SAAS;AAC5D,cAAI,OAAO,IAAI,sBAAc,KAAK,OAAO,gBAAgB;AACzD,iBAAO,KAAK,mBAAmB,SAAS,CAAC;AACzC,cAAI,YAAY,KAAK,OAAO,SAAS,EAAE,CAAC;AACxC,cAAI,eAAe,UAAU,gBAAgB;AAC7C,cAAI,sBAAsB,UAAU,aAAa;AACjD,mBAAS,IAAI,GAAG,IAAI,qBAAqB,KAAK;AAC1C,qBAAS,YAAY,CAAC,IAAI;AAAA,UAC9B;AACA,yBAAO,UAAU,cAAc,GAAG,UAAU,YAAY,qBAAqB,aAAa,MAAM;AAAA,QACpG;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,6BAAQ;AAAA;AAAA;;;AC7Ff,MAqBI,UA8LG;AAnNP;AAAA;AAeA;AAMA,MAAI;AAAA,MAA0B,WAAY;AACtC,iBAASC,YAAW;AAAA,QAEpB;AAKA,QAAAA,UAAS,wBAAwB,SAAU,QAAQ;AAC/C,iBAAOA,UAAS,8BAA8B,QAAQ,IAAI,IAAIA,UAAS,8BAA8B,QAAQ,KAAK;AAAA,QACtH;AAMA,QAAAA,UAAS,wBAAwB,SAAU,QAAQ;AAC/C,cAAI,UAAU;AACd,cAAIC,SAAQ,OAAO,SAAS;AAC5B,cAAI,QAAQ,OAAO,SAAS;AAC5B,cAAI,SAAS,OAAO,UAAU;AAC9B,mBAAS,IAAI,GAAG,IAAI,SAAS,GAAG,KAAK;AACjC,gBAAI,SAASA,OAAM,CAAC;AACpB,qBAAS,IAAI,GAAG,IAAI,QAAQ,GAAG,KAAK;AAChC,kBAAI,QAAQ,OAAO,CAAC;AACpB,kBAAI,UAAU,OAAO,IAAI,CAAC,KAAK,UAAUA,OAAM,IAAI,CAAC,EAAE,CAAC,KAAK,UAAUA,OAAM,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG;AACvF;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,iBAAOD,UAAS,KAAK;AAAA,QACzB;AAMA,QAAAA,UAAS,wBAAwB,SAAU,QAAQ;AAC/C,cAAI,eAAe;AACnB,cAAIC,SAAQ,OAAO,SAAS;AAC5B,cAAI,QAAQ,OAAO,SAAS;AAC5B,cAAI,SAAS,OAAO,UAAU;AAC9B,mBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,qBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,kBAAI,SAASA,OAAM,CAAC;AACpB,kBAAI,IAAI,IAAI,SACR,OAAO,CAAC,MAAM,KACd,OAAO,IAAI,CAAC,MAAM,KAClB,OAAO,IAAI,CAAC,MAAM,KAClB,OAAO,IAAI,CAAC,MAAM,KAClB,OAAO,IAAI,CAAC,MAAM,KAClB,OAAO,IAAI,CAAC,MAAM,KAClB,OAAO,IAAI,CAAC,MAAM,MACjBD,UAAS,kBAAkB,QAAQ,IAAI,GAAG,CAAC,KAAKA,UAAS,kBAAkB,QAAQ,IAAI,GAAG,IAAI,EAAE,IAAI;AACrG;AAAA,cACJ;AACA,kBAAI,IAAI,IAAI,UACRC,OAAM,CAAC,EAAE,CAAC,MAAM,KAChBA,OAAM,IAAI,CAAC,EAAE,CAAC,MAAM,KACpBA,OAAM,IAAI,CAAC,EAAE,CAAC,MAAM,KACpBA,OAAM,IAAI,CAAC,EAAE,CAAC,MAAM,KACpBA,OAAM,IAAI,CAAC,EAAE,CAAC,MAAM,KACpBA,OAAM,IAAI,CAAC,EAAE,CAAC,MAAM,KACpBA,OAAM,IAAI,CAAC,EAAE,CAAC,MAAM,MACnBD,UAAS,gBAAgBC,QAAO,GAAG,IAAI,GAAG,CAAC,KAAKD,UAAS,gBAAgBC,QAAO,GAAG,IAAI,GAAG,IAAI,EAAE,IAAI;AACrG;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO,eAAeD,UAAS;AAAA,QACnC;AACA,QAAAA,UAAS,oBAAoB,SAAU,UAAUE,OAAcC,KAAY;AACvE,UAAAD,QAAO,KAAK,IAAIA,OAAM,CAAC;AACvB,UAAAC,MAAK,KAAK,IAAIA,KAAI,SAAS,MAAM;AACjC,mBAAS,IAAID,OAAM,IAAIC,KAAI,KAAK;AAC5B,gBAAI,SAAS,CAAC,MAAM,GAAG;AACnB,qBAAO;AAAA,YACX;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AACA,QAAAH,UAAS,kBAAkB,SAAUC,QAAO,KAAaC,OAAcC,KAAY;AAC/E,UAAAD,QAAO,KAAK,IAAIA,OAAM,CAAC;AACvB,UAAAC,MAAK,KAAK,IAAIA,KAAIF,OAAM,MAAM;AAC9B,mBAAS,IAAIC,OAAM,IAAIC,KAAI,KAAK;AAC5B,gBAAIF,OAAM,CAAC,EAAE,GAAG,MAAM,GAAG;AACrB,qBAAO;AAAA,YACX;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAKA,QAAAD,UAAS,wBAAwB,SAAU,QAAQ;AAC/C,cAAI,eAAe;AACnB,cAAIC,SAAQ,OAAO,SAAS;AAC5B,cAAI,QAAQ,OAAO,SAAS;AAC5B,cAAI,SAAS,OAAO,UAAU;AAC9B,mBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,gBAAI,SAASA,OAAM,CAAC;AACpB,qBAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC5B,kBAAI,OAAO,CAAC,MAAM,GAAG;AACjB;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,cAAI,gBAAgB,OAAO,UAAU,IAAI,OAAO,SAAS;AACzD,cAAI,uBAAuB,KAAK,MAAM,KAAK,IAAI,eAAe,IAAI,aAAa,IAAI,KAAK,aAAa;AACrG,iBAAO,uBAAuBD,UAAS;AAAA,QAC3C;AAKA,QAAAA,UAAS,iBAAiB,SAAU,aAAqB,GAAW,GAAW;AAC3E,cAAI;AACJ,cAAI;AACJ,kBAAQ,aAAa;AAAA,YACjB,KAAK;AACD,6BAAgB,IAAI,IAAK;AACzB;AAAA,YACJ,KAAK;AACD,6BAAe,IAAI;AACnB;AAAA,YACJ,KAAK;AACD,6BAAe,IAAI;AACnB;AAAA,YACJ,KAAK;AACD,8BAAgB,IAAI,KAAK;AACzB;AAAA,YACJ,KAAK;AACD,6BAAgB,KAAK,MAAM,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAK;AACzD;AAAA,YACJ,KAAK;AACD,qBAAO,IAAI;AACX,8BAAgB,OAAO,KAAQ,OAAO;AACtC;AAAA,YACJ,KAAK;AACD,qBAAO,IAAI;AACX,8BAAiB,OAAO,KAAQ,OAAO,IAAM;AAC7C;AAAA,YACJ,KAAK;AACD,qBAAO,IAAI;AACX,6BAAiB,OAAO,KAAO,IAAI,IAAK,KAAQ;AAChD;AAAA,YACJ;AACI,oBAAM,IAAI,iCAAyB,2BAA2B,WAAW;AAAA,UACjF;AACA,iBAAO,iBAAiB;AAAA,QAC5B;AAKA,QAAAA,UAAS,gCAAgC,SAAU,QAAQ,cAAc;AACrE,cAAI,UAAU;AACd,cAAI,SAAS,eAAe,OAAO,UAAU,IAAI,OAAO,SAAS;AACjE,cAAI,SAAS,eAAe,OAAO,SAAS,IAAI,OAAO,UAAU;AACjE,cAAIC,SAAQ,OAAO,SAAS;AAC5B,mBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,gBAAI,kBAAkB;AACtB,gBAAI,UAAU;AACd,qBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,kBAAI,MAAM,eAAeA,OAAM,CAAC,EAAE,CAAC,IAAIA,OAAM,CAAC,EAAE,CAAC;AACjD,kBAAI,QAAQ,SAAS;AACjB;AAAA,cACJ,OACK;AACD,oBAAI,mBAAmB,GAAG;AACtB,6BAAWD,UAAS,MAAM,kBAAkB;AAAA,gBAChD;AACA,kCAAkB;AAClB,0BAAU;AAAA,cACd;AAAA,YACJ;AACA,gBAAI,mBAAmB,GAAG;AACtB,yBAAWA,UAAS,MAAM,kBAAkB;AAAA,YAChD;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAEA,QAAAA,UAAS,KAAK;AACd,QAAAA,UAAS,KAAK;AACd,QAAAA,UAAS,KAAK;AACd,QAAAA,UAAS,KAAK;AACd,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,mBAAQ;AAAA;AAAA;;;ACnNf,MAeII,YAqBA,YAiGG;AArIP;AAAA;AA4BA;AACA;AAdA,MAAIA,aAAsC,SAAS,GAAG;AAClD,YAAI,IAAI,OAAO,WAAW,cAAc,OAAO,UAAUC,KAAI,KAAK,EAAE,CAAC,GAAG,IAAI;AAC5E,YAAIA;AAAG,iBAAOA,GAAE,KAAK,CAAC;AACtB,YAAI,KAAK,OAAO,EAAE,WAAW;AAAU,iBAAO;AAAA,YAC1C,MAAM,WAAY;AACd,kBAAI,KAAK,KAAK,EAAE;AAAQ,oBAAI;AAC5B,qBAAO,EAAE,OAAO,KAAK,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,cAAM,IAAI,UAAU,IAAI,4BAA4B,iCAAiC;AAAA,MACzF;AAWA,MAAI;AAAA,MAA4B,WAAY;AACxC,iBAASC,YAAW,OAAe,QAAgB;AAC/C,eAAK,QAAQ;AACb,eAAK,SAAS;AACd,cAAI,QAAQ,IAAI,MAAM,MAAM;AAC5B,mBAAS,IAAI,GAAG,MAAM,QAAQ,KAAK;AAC/B,kBAAM,CAAC,IAAI,IAAI,WAAW,KAAK;AAAA,UACnC;AACA,eAAK,QAAQ;AAAA,QACjB;AACA,QAAAA,YAAW,UAAU,YAAY,WAAY;AACzC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,YAAW,UAAU,WAAW,WAAY;AACxC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,YAAW,UAAU,MAAM,SAAU,GAAW,GAAW;AACvD,iBAAO,KAAK,MAAM,CAAC,EAAE,CAAC;AAAA,QAC1B;AAIA,QAAAA,YAAW,UAAU,WAAW,WAAY;AACxC,iBAAO,KAAK;AAAA,QAChB;AAEA,QAAAA,YAAW,UAAU,YAAY,SAAU,GAAW,GAAW,OAAoB;AACjF,eAAK,MAAM,CAAC,EAAE,CAAC,IAAI;AAAA,QACvB;AAIA,QAAAA,YAAW,UAAU,aAAa,SAAU,GAAW,GAAW,OAAO;AACrE,eAAK,MAAM,CAAC,EAAE,CAAC;AAAA,UAAiB,QAAQ,IAAI;AAAA,QAChD;AACA,QAAAA,YAAW,UAAU,QAAQ,SAAU,OAAgB;AACnD,cAAI,KAAKC;AACT,cAAI;AACA,qBAAS,KAAKH,WAAS,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,KAAK,GAAG;AAC1E,kBAAI,QAAQ,GAAG;AACf,6BAAO,KAAK,OAAO,KAAK;AAAA,YAC5B;AAAA,UACJ,SACO,OAAO;AAAE,kBAAM,EAAE,OAAO,MAAM;AAAA,UAAG,UACxC;AACI,gBAAI;AACA,kBAAI,MAAM,CAAC,GAAG,SAASG,MAAK,GAAG;AAAS,gBAAAA,IAAG,KAAK,EAAE;AAAA,YACtD,UACA;AAAU,kBAAI;AAAK,sBAAM,IAAI;AAAA,YAAO;AAAA,UACxC;AAAA,QACJ;AACA,QAAAD,YAAW,UAAU,SAAS,SAAU,GAAG;AACvC,cAAI,EAAE,aAAaA,cAAa;AAC5B,mBAAO;AAAA,UACX;AACA,cAAI,QAAQ;AACZ,cAAI,KAAK,UAAU,MAAM,OAAO;AAC5B,mBAAO;AAAA,UACX;AACA,cAAI,KAAK,WAAW,MAAM,QAAQ;AAC9B,mBAAO;AAAA,UACX;AACA,mBAAS,IAAI,GAAG,SAAS,KAAK,QAAQ,IAAI,QAAQ,EAAE,GAAG;AACnD,gBAAI,SAAS,KAAK,MAAM,CAAC;AACzB,gBAAI,cAAc,MAAM,MAAM,CAAC;AAC/B,qBAAS,IAAI,GAAG,QAAQ,KAAK,OAAO,IAAI,OAAO,EAAE,GAAG;AAChD,kBAAI,OAAO,CAAC,MAAM,YAAY,CAAC,GAAG;AAC9B,uBAAO;AAAA,cACX;AAAA,YACJ;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AAEA,QAAAA,YAAW,UAAU,WAAW,WAAY;AACxC,cAAI,SAAS,IAAI,sBAAc;AAC/B,mBAAS,IAAI,GAAG,SAAS,KAAK,QAAQ,IAAI,QAAQ,EAAE,GAAG;AACnD,gBAAI,SAAS,KAAK,MAAM,CAAC;AACzB,qBAAS,IAAI,GAAG,QAAQ,KAAK,OAAO,IAAI,OAAO,EAAE,GAAG;AAChD,sBAAQ,OAAO,CAAC,GAAG;AAAA,gBACf,KAAK;AACD,yBAAO,OAAO,IAAI;AAClB;AAAA,gBACJ,KAAK;AACD,yBAAO,OAAO,IAAI;AAClB;AAAA,gBACJ;AACI,yBAAO,OAAO,IAAI;AAClB;AAAA,cACR;AAAA,YACJ;AACA,mBAAO,OAAO,IAAI;AAAA,UACtB;AACA,iBAAO,OAAO,SAAS;AAAA,QAC3B;AACA,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,qBAAQ;AAAA;AAAA;;;ACrIf,MAoBI,QA+DG;AAnFP;AAAA;AAeA;AAKA,MAAI;AAAA,MAAwB,WAAY;AACpC,iBAASE,UAAS;AACd,eAAK,cAAc;AAAA,QACvB;AACA,QAAAA,QAAO,UAAU,UAAU,WAAY;AACnC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,QAAO,UAAU,aAAa,WAAY;AACtC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,QAAO,UAAU,aAAa,WAAY;AACtC,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,QAAO,UAAU,iBAAiB,WAAY;AAC1C,iBAAO,KAAK;AAAA,QAChB;AACA,QAAAA,QAAO,UAAU,YAAY,WAAY;AACrC,iBAAO,KAAK;AAAA,QAChB;AAEA,QAAAA,QAAO,UAAU,WAAW,WAAY;AACpC,cAAI,SAAS,IAAI,sBAAc;AAC/B,iBAAO,OAAO,MAAM;AACpB,iBAAO,OAAO,SAAS;AACvB,iBAAO,OAAO,KAAK,OAAO,KAAK,KAAK,SAAS,IAAI,MAAM;AACvD,iBAAO,OAAO,cAAc;AAC5B,iBAAO,OAAO,KAAK,UAAU,KAAK,QAAQ,SAAS,IAAI,MAAM;AAC7D,iBAAO,OAAO,cAAc;AAC5B,iBAAO,OAAO,KAAK,UAAU,KAAK,QAAQ,SAAS,IAAI,MAAM;AAC7D,iBAAO,OAAO,kBAAkB;AAChC,iBAAO,OAAO,KAAK,YAAY,SAAS,CAAC;AACzC,cAAI,KAAK,QAAQ;AACb,mBAAO,OAAO,cAAc;AAC5B,mBAAO,OAAO,KAAK,OAAO,SAAS,CAAC;AAAA,UACxC,OACK;AACD,mBAAO,OAAO,mBAAmB;AAAA,UACrC;AACA,iBAAO,OAAO,MAAM;AACpB,iBAAO,OAAO,SAAS;AAAA,QAC3B;AACA,QAAAA,QAAO,UAAU,UAAU,SAAU,OAAO;AACxC,eAAK,OAAO;AAAA,QAChB;AACA,QAAAA,QAAO,UAAU,aAAa,SAAU,OAAO;AAC3C,eAAK,UAAU;AAAA,QACnB;AACA,QAAAA,QAAO,UAAU,aAAa,SAAUC,UAAS;AAC7C,eAAK,UAAUA;AAAA,QACnB;AACA,QAAAD,QAAO,UAAU,iBAAiB,SAAU,OAAe;AACvD,eAAK,cAAc;AAAA,QACvB;AACA,QAAAA,QAAO,UAAU,YAAY,SAAU,OAAO;AAC1C,eAAK,SAAS;AAAA,QAClB;AAEA,QAAAA,QAAO,qBAAqB,SAAU,aAAqB;AACvD,iBAAO,eAAe,KAAK,cAAcA,QAAO;AAAA,QACpD;AACA,QAAAA,QAAO,oBAAoB;AAC3B,eAAOA;AAAA,MACX,EAAE;AACF,MAAO,iBAAQ;AAAA;AAAA;;;ACnFf,MAAIE,aAiBA,iBAQG;AAzBP;AAAA;AAaA;AAbA,MAAIA,cAAyC,WAAY;AACrD,YAAI,gBAAgB,SAAU,GAAG,GAAG;AAChC,0BAAgB,OAAO,kBAClB,EAAE,WAAW,CAAC,EAAE,aAAa,SAAS,SAAUC,IAAGC,IAAG;AAAE,YAAAD,GAAE,YAAYC;AAAA,UAAG,KAC1E,SAAUD,IAAGC,IAAG;AAAE,qBAAS,KAAKA;AAAG,kBAAIA,GAAE,eAAe,CAAC;AAAG,gBAAAD,GAAE,CAAC,IAAIC,GAAE,CAAC;AAAA,UAAG;AAC7E,iBAAO,cAAc,GAAG,CAAC;AAAA,QAC7B;AACA,eAAO,SAAU,GAAG,GAAG;AACnB,wBAAc,GAAG,CAAC;AAClB,mBAAS,KAAK;AAAE,iBAAK,cAAc;AAAA,UAAG;AACtC,YAAE,YAAY,MAAM,OAAO,OAAO,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,WAAW,IAAI,GAAG;AAAA,QACtF;AAAA,MACJ,EAAG;AAKH,MAAI;AAAA,MAAiC,SAAU,QAAQ;AACnD,QAAAF,YAAUG,kBAAiB,MAAM;AACjC,iBAASA,mBAAkB;AACvB,iBAAO,WAAW,QAAQ,OAAO,MAAM,MAAM,SAAS,KAAK;AAAA,QAC/D;AACA,QAAAA,iBAAgB,OAAO;AACvB,eAAOA;AAAA,MACX,EAAE,iBAAS;AACX,MAAO,0BAAQ;AAAA;AAAA;;;ACzBf,MA0BI,YAmZG;AA7aP;AAAA;AAgBA;AACA;AACA;AACA;AACA;AACA;AAKA,MAAI;AAAA,MAA4B,WAAY;AACxC,iBAASC,cAAa;AAAA,QAEtB;AAKA,QAAAA,YAAW,cAAc,SAAU,QAAQ;AAEvC,iBAAO;AAAA;AAAA;AAAA,YAAyB;AAAA,UAAG;AAAA,QACvC;AAGA,QAAAA,YAAW,cAAc,SAAU,UAAU,SAASC,UAAS,aAAqB,QAAQ;AACxF,UAAAD,YAAW,YAAY,MAAM;AAC7B,UAAAA,YAAW,mBAAmBC,UAAS,MAAM;AAE7C,UAAAD,YAAW,cAAc,SAAS,aAAa,MAAM;AAErD,UAAAA,YAAW,sBAAsBC,UAAS,MAAM;AAEhD,UAAAD,YAAW,cAAc,UAAU,aAAa,MAAM;AAAA,QAC1D;AAOA,QAAAA,YAAW,qBAAqB,SAAUC,UAAS,QAAQ;AAEvD,UAAAD,YAAW,4CAA4C,MAAM;AAE7D,UAAAA,YAAW,+BAA+B,MAAM;AAEhD,UAAAA,YAAW,qCAAqCC,UAAS,MAAM;AAE/D,UAAAD,YAAW,oBAAoB,MAAM;AAAA,QACzC;AAEA,QAAAA,YAAW,gBAAgB,SAAU,SAAS,aAAqB,QAAQ;AACvE,cAAI,eAAe,IAAI,iBAAS;AAChC,UAAAA,YAAW,iBAAiB,SAAS,aAAa,YAAY;AAC9D,mBAAS,IAAI,GAAG,OAAO,aAAa,QAAQ,GAAG,IAAI,MAAM,EAAE,GAAG;AAG1D,gBAAI,MAAM,aAAa,IAAI,aAAa,QAAQ,IAAI,IAAI,CAAC;AAEzD,gBAAI,cAAcA,YAAW,sBAAsB,CAAC;AACpD,gBAAI,KAAK,YAAY,CAAC;AACtB,gBAAI,KAAK,YAAY,CAAC;AACtB,mBAAO,WAAW,IAAI,IAAI,GAAG;AAC7B,gBAAI,IAAI,GAAG;AAEP,kBAAI,KAAK,OAAO,SAAS,IAAI,IAAI;AACjC,kBAAI,KAAK;AACT,qBAAO,WAAW,IAAI,IAAI,GAAG;AAAA,YACjC,OACK;AAED,kBAAI,KAAK;AACT,kBAAI,KAAK,OAAO,UAAU,IAAI,KAAK,IAAI;AACvC,qBAAO,WAAW,IAAI,IAAI,GAAG;AAAA,YACjC;AAAA,UACJ;AAAA,QACJ;AAGA,QAAAA,YAAW,wBAAwB,SAAUC,UAAS,QAAQ;AAC1D,cAAIA,SAAQ,iBAAiB,IAAI,GAAG;AAChC;AAAA,UACJ;AACA,cAAI,kBAAkB,IAAI,iBAAS;AACnC,UAAAD,YAAW,oBAAoBC,UAAS,eAAe;AACvD,cAAI,WAAW,IAAI,IAAI;AACvB,mBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,qBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAExB,kBAAI,MAAM,gBAAgB,IAAI,QAAQ;AACtC;AAEA,qBAAO,WAAW,GAAG,OAAO,UAAU,IAAI,KAAK,GAAG,GAAG;AAErD,qBAAO,WAAW,OAAO,UAAU,IAAI,KAAK,GAAG,GAAG,GAAG;AAAA,YACzD;AAAA,UACJ;AAAA,QACJ;AAIA,QAAAD,YAAW,gBAAgB,SAAU,UAAU,aAAqB,QAAQ;AACxE,cAAI,WAAW;AACf,cAAI,YAAY;AAEhB,cAAI,IAAI,OAAO,SAAS,IAAI;AAC5B,cAAI,IAAI,OAAO,UAAU,IAAI;AAC7B,iBAAO,IAAI,GAAG;AAEV,gBAAI,MAAM,GAAG;AACT,mBAAK;AAAA,YACT;AACA,mBAAO,KAAK,KAAK,IAAI,OAAO,UAAU,GAAG;AACrC,uBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,oBAAI,KAAK,IAAI;AAEb,oBAAI,CAACA,YAAW,QAAQ,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG;AACxC;AAAA,gBACJ;AACA,oBAAI,MAAM;AACV,oBAAI,WAAW,SAAS,QAAQ,GAAG;AAC/B,wBAAM,SAAS,IAAI,QAAQ;AAC3B,oBAAE;AAAA,gBACN,OACK;AAGD,wBAAM;AAAA,gBACV;AAEA,oBAAI,gBAAgB,OAAO,iBAAS,eAAe,aAAa,IAAI,CAAC,GAAG;AACpE,wBAAM,CAAC;AAAA,gBACX;AACA,uBAAO,WAAW,IAAI,GAAG,GAAG;AAAA,cAChC;AACA,mBAAK;AAAA,YACT;AACA,wBAAY,CAAC;AACb,iBAAK;AACL,iBAAK;AAAA,UACT;AAEA,cAAI,aAAa,SAAS,QAAQ,GAAG;AACjC,kBAAM,IAAI,wBAAgB,4BAA4B,WAAW,MAAM,SAAS,QAAQ,CAAC;AAAA,UAC7F;AAAA,QACJ;AAMA,QAAAA,YAAW,aAAa,SAAU,OAAe;AAC7C,iBAAO,KAAK,gBAAQ,qBAAqB,KAAK;AAAA,QAClD;AA0BA,QAAAA,YAAW,mBAAmB,SAAU,OAAe,MAAc;AACjE,cAAI,SAAS,GAAG;AACZ,kBAAM,IAAI,iCAAyB,cAAc;AAAA,UACrD;AAGA,cAAI,eAAeA,YAAW,WAAW,IAAI;AAC7C,oBAAU,eAAe;AAEzB,iBAAOA,YAAW,WAAW,KAAK,KAAK,cAAc;AACjD,qBAAS,QAASA,YAAW,WAAW,KAAK,IAAI;AAAA,UACrD;AAEA,iBAAO;AAAA,QACX;AAIA,QAAAA,YAAW,mBAAmB,SAAU,SAAS,aAAqB,MAAM;AACxE,cAAI,CAAC,eAAO,mBAAmB,WAAW,GAAG;AACzC,kBAAM,IAAI,wBAAgB,sBAAsB;AAAA,UACpD;AACA,cAAI,WAAY,QAAQ,QAAQ,KAAK,IAAK;AAC1C,eAAK,WAAW,UAAU,CAAC;AAC3B,cAAI,UAAUA,YAAW,iBAAiB,UAAUA,YAAW,cAAc;AAC7E,eAAK,WAAW,SAAS,EAAE;AAC3B,cAAI,WAAW,IAAI,iBAAS;AAC5B,mBAAS,WAAWA,YAAW,wBAAwB,EAAE;AACzD,eAAK,IAAI,QAAQ;AACjB,cAAI,KAAK,QAAQ,MAAM,IAAI;AACvB,kBAAM,IAAI,wBAAgB,mCAAmC,KAAK,QAAQ,CAAC;AAAA,UAC/E;AAAA,QACJ;AAGA,QAAAA,YAAW,sBAAsB,SAAUC,UAAS,MAAM;AACtD,eAAK,WAAWA,SAAQ,iBAAiB,GAAG,CAAC;AAC7C,cAAI,UAAUD,YAAW,iBAAiBC,SAAQ,iBAAiB,GAAGD,YAAW,iBAAiB;AAClG,eAAK,WAAW,SAAS,EAAE;AAC3B,cAAI,KAAK,QAAQ,MAAM,IAAI;AACvB,kBAAM,IAAI,wBAAgB,mCAAmC,KAAK,QAAQ,CAAC;AAAA,UAC/E;AAAA,QACJ;AAEA,QAAAA,YAAW,UAAU,SAAU,OAAe;AAC1C,iBAAO,UAAU;AAAA,QACrB;AACA,QAAAA,YAAW,sBAAsB,SAAU,QAAQ;AAG/C,mBAAS,IAAI,GAAG,IAAI,OAAO,SAAS,IAAI,GAAG,EAAE,GAAG;AAC5C,gBAAI,OAAO,IAAI,KAAK;AAEpB,gBAAIA,YAAW,QAAQ,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG;AACtC,qBAAO,UAAU,GAAG,GAAG,GAAG;AAAA,YAC9B;AAEA,gBAAIA,YAAW,QAAQ,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG;AACtC,qBAAO,UAAU,GAAG,GAAG,GAAG;AAAA,YAC9B;AAAA,UACJ;AAAA,QACJ;AAEA,QAAAA,YAAW,iCAAiC,SAAU,QAAQ;AAC1D,cAAI,OAAO,IAAI,GAAG,OAAO,UAAU,IAAI,CAAC,MAAM,GAAG;AAC7C,kBAAM,IAAI,wBAAgB;AAAA,UAC9B;AACA,iBAAO,UAAU,GAAG,OAAO,UAAU,IAAI,GAAG,CAAC;AAAA,QACjD;AACA,QAAAA,YAAW,mCAAmC,SAAU,QAAgB,QAAgB,QAAQ;AAC5F,mBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,gBAAI,CAACA,YAAW,QAAQ,OAAO,IAAI,SAAS,GAAG,MAAM,CAAC,GAAG;AACrD,oBAAM,IAAI,wBAAgB;AAAA,YAC9B;AACA,mBAAO,UAAU,SAAS,GAAG,QAAQ,CAAC;AAAA,UAC1C;AAAA,QACJ;AACA,QAAAA,YAAW,iCAAiC,SAAU,QAAgB,QAAgB,QAAQ;AAC1F,mBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,gBAAI,CAACA,YAAW,QAAQ,OAAO,IAAI,QAAQ,SAAS,CAAC,CAAC,GAAG;AACrD,oBAAM,IAAI,wBAAgB;AAAA,YAC9B;AACA,mBAAO,UAAU,QAAQ,SAAS,GAAG,CAAC;AAAA,UAC1C;AAAA,QACJ;AACA,QAAAA,YAAW,iCAAiC,SAAU,QAAgB,QAAgB,QAAQ;AAC1F,mBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,gBAAI,WAAWA,YAAW,4BAA4B,CAAC;AACvD,qBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,qBAAO,UAAU,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAAA,YACxD;AAAA,UACJ;AAAA,QACJ;AACA,QAAAA,YAAW,gCAAgC,SAAU,QAAgB,QAAgB,QAAQ;AACzF,mBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,gBAAI,WAAWA,YAAW,2BAA2B,CAAC;AACtD,qBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AACxB,qBAAO,UAAU,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAAA,YACxD;AAAA,UACJ;AAAA,QACJ;AAEA,QAAAA,YAAW,8CAA8C,SAAU,QAAQ;AAEvE,cAAI,WAAWA,YAAW,2BAA2B,CAAC,EAAE;AAExD,UAAAA,YAAW,8BAA8B,GAAG,GAAG,MAAM;AAErD,UAAAA,YAAW,8BAA8B,OAAO,SAAS,IAAI,UAAU,GAAG,MAAM;AAEhF,UAAAA,YAAW,8BAA8B,GAAG,OAAO,SAAS,IAAI,UAAU,MAAM;AAEhF,cAAI,WAAW;AAEf,UAAAA,YAAW,iCAAiC,GAAG,WAAW,GAAG,MAAM;AAEnE,UAAAA,YAAW,iCAAiC,OAAO,SAAS,IAAI,UAAU,WAAW,GAAG,MAAM;AAE9F,UAAAA,YAAW,iCAAiC,GAAG,OAAO,SAAS,IAAI,UAAU,MAAM;AAEnF,cAAI,UAAU;AAEd,UAAAA,YAAW,+BAA+B,SAAS,GAAG,MAAM;AAE5D,UAAAA,YAAW,+BAA+B,OAAO,UAAU,IAAI,UAAU,GAAG,GAAG,MAAM;AAErF,UAAAA,YAAW,+BAA+B,SAAS,OAAO,UAAU,IAAI,SAAS,MAAM;AAAA,QAC3F;AAEA,QAAAA,YAAW,uCAAuC,SAAUC,UAAS,QAAQ;AACzE,cAAIA,SAAQ,iBAAiB,IAAI,GAAG;AAChC;AAAA,UACJ;AACA,cAAIC,SAAQD,SAAQ,iBAAiB,IAAI;AACzC,cAAI,cAAcD,YAAW,6CAA6CE,MAAK;AAC/E,mBAAS,IAAI,GAAG,WAAW,YAAY,QAAQ,MAAM,UAAU,KAAK;AAChE,gBAAI,IAAI,YAAY,CAAC;AACrB,gBAAI,KAAK,GAAG;AACR,uBAAS,IAAI,GAAG,MAAM,UAAU,KAAK;AACjC,oBAAI,IAAI,YAAY,CAAC;AACrB,oBAAI,KAAK,KAAKF,YAAW,QAAQ,OAAO,IAAI,GAAG,CAAC,CAAC,GAAG;AAIhD,kBAAAA,YAAW,+BAA+B,IAAI,GAAG,IAAI,GAAG,MAAM;AAAA,gBAClE;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,QAAAA,YAAW,6BAA6B,MAAM,KAAK;AAAA,UAC/C,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UACrC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UACrC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UACrC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UACrC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UACrC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UACrC,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,QACzC,CAAC;AACD,QAAAA,YAAW,8BAA8B,MAAM,KAAK;AAAA,UAChD,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAC/B,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAC/B,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAC/B,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,UAC/B,WAAW,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAAA,QACnC,CAAC;AAED,QAAAA,YAAW,+CAA+C,MAAM,KAAK;AAAA,UACjE,WAAW,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC5C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAAA,UAC3C,WAAW,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;A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",
  "names": ["global", "isArray", "isFunction", "extend", "merge", "toDate", "defaultOptions", "hideLegend", "setTitle", "setMin", "setMax", "setStacked", "setXtitle", "setYtitle", "a", "isDate", "isNumber", "round", "min", "max", "hex", "colors", "color", "minTime", "maxTime", "defaultExport", "destroy", "type", "callback", "config", "createDataTable", "event", "c", "error", "$", "adapters", "Chart", "Chartkick", "LineChart", "PieChart", "ColumnChart", "BarChart", "AreaChart", "GeoChart", "ScatterChart", "BubbleChart", "Timeline", "fixProto", "target", "prototype", "setPrototypeOf", "Object", "__proto__", "fixStack", "fn", "constructor", "captureStackTrace", "Error", "__extends", "message", "options", "_super", "defineProperty", "_this", "value", "_newTarget", "name", "enumerable", "configurable", "CustomError", "__extends", "d", "b", "Exception", "__extends", "d", "b", "ArgumentException", "__extends", "d", "b", "IllegalArgumentException", "BinaryBitmap", "__extends", "d", "b", "ChecksumException", "Binarizer", "System", "__extends", "d", "b", "IndexOutOfBoundsException", "__extends", "d", "b", "ArrayIndexOutOfBoundsException", "index", "m", "Arrays", "a", "_a", "from", "to", "Integer", "BitArray", "from", "start", "max", "array", "DecodeHintType", "__extends", "d", "b", "FormatException", "__values", "m", "CharacterSetValueIdentifiers", "CharacterSetECI", "_a", "__extends", "d", "b", "UnsupportedOperationException", "StringEncoding", "StringUtils", "callback", "index", "StringBuilder", "c", "start", "BitMatrix", "max", "__extends", "d", "b", "NotFoundException", "__extends", "d", "b", "GlobalHistogramBinarizer", "score", "__extends", "d", "b", "HybridBinarizer", "min", "max", "LuminanceSource", "c", "__extends", "d", "b", "InvertedLuminanceSource", "__extends", "d", "b", "HTMLCanvasElementLuminanceSource", "alpha", "start", "VideoInputDevice", "__values", "resolve", "m", "BrowserCodeReader", "_a", "type", "Result", "format", "type", "BarcodeFormat", "ResultMetadataType", "DecoderResult", "AbstractGenericGF", "a", "GenericGFPoly", "a", "__extends", "d", "b", "ArithmeticException", "__extends", "d", "b", "GenericGF", "a", "__extends", "d", "b", "ReedSolomonException", "__extends", "d", "b", "IllegalStateException", "ReedSolomonDecoder", "a", "Table", "Decoder", "index", "compact", "MathUtils", "array", "count", "a", "Float", "ResultPoint", "patterns", "DetectorResult", "__extends", "d", "b", "AztecDetectorResult", "compact", "WhiteRectangleDetector", "a", "GridSampler", "PerspectiveTransform", "max", "__extends", "d", "b", "DefaultGridSampler", "transform", "max", "GridSamplerInstance", "Point", "Detector", "compact", "color", "c", "error", "init", "a", "AztecReader", "__extends", "d", "b", "BrowserAztecCodeReader", "OneDReader", "attempt", "start", "index", "__extends", "d", "b", "Code128Reader", "__extends", "__values", "d", "b", "m", "Code39Reader", "_a", "start", "max", "c", "__extends", "__values", "d", "b", "m", "Code93Reader", "_a", "start", "max", "c", "__extends", "__values", "d", "b", "m", "ITFReader", "_a", "error", "max", "__extends", "d", "b", "AbstractUPCEANReader", "start", "patterns", "max", "__values", "m", "UPCEANExtension5Support", "_a", "__values", "m", "UPCEANExtension2Support", "_a", "UPCEANExtensionSupport", "__extends", "d", "b", "UPCEANReader", "format", "__extends", "__values", "d", "b", "m", "EAN13Reader", "_a", "__extends", "__values", "d", "b", "m", "EAN8Reader", "_a", "__extends", "d", "b", "UPCAReader", "__extends", "__values", "d", "b", "m", "UPCEReader", "_a", "x", "__extends", "__values", "d", "b", "m", "MultiFormatUPCEANReader", "readers", "_a", "__extends", "d", "b", "CodaBarReader", "__extends", "__values", "d", "b", "m", "AbstractRSSReader", "array", "index", "_a", "DataCharacter", "FinderPattern", "startEnd", "start", "__values", "m", "RSSUtils", "_a", "elements", "BitArrayBuilder", "BlockParsedResult", "DecodedObject", "__extends", "d", "b", "DecodedChar", "__extends", "d", "b", "DecodedInformation", "__extends", "d", "b", "DecodedNumeric", "__values", "m", "FieldParser", "_a", "GeneralAppIdDecoder", "alpha", "c", "AbstractExpandedDecoder", "__extends", "d", "b", "AI01decoder", "__extends", "d", "b", "AI01AndOtherAIs", "__extends", "d", "b", "AnyAIDecoder", "__extends", "d", "b", "AI01weightDecoder", "__extends", "d", "b", "AI013x0xDecoder", "__extends", "d", "b", "AI013103decoder", "__extends", "d", "b", "AI01320xDecoder", "__extends", "d", "b", "AI01392xDecoder", "__extends", "d", "b", "AI01393xDecoder", "__extends", "d", "b", "AI013x0x1xDecoder", "ExpandedPair", "ExpandedRow", "__extends", "__values", "d", "b", "m", "RSSExpandedReader", "error", "_a", "start", "count", "__extends", "d", "b", "Pair", "__extends", "__values", "d", "b", "m", "RSS14Reader", "_a", "startEnd", "count", "start", "__extends", "d", "b", "MultiFormatOneDReader", "__extends", "d", "b", "BrowserBarcodeReader", "__values", "m", "ECBlocks", "ECB", "count", "Version", "_a", "version", "BitMatrixParser", "__values", "m", "DataBlock", "version", "_a", "max", "BitSource", "Mode", "DecodedBitStreamParser", "count", "__values", "Decoder", "Decoder_default", "init_Decoder", "m", "_a", "version", "Detector", "Detector_default", "init_Detector", "to", "min", "from", "error", "init_Decoder", "init_Detector", "DataMatrixReader", "Decoder_default", "Detector_default", "__extends", "d", "b", "BrowserDatamatrixCodeReader", "ErrorCorrectionLevelValues", "ErrorCorrectionLevel", "__values", "m", "FormatInformation", "a", "_a", "__values", "ECBlocks", "m", "_a", "ECB", "count", "__values", "Version", "Version_default", "init_Version", "m", "_a", "max", "DataMaskValues", "DataMask", "BitMatrixParser", "BitMatrixParser_default", "init_BitMatrixParser", "init_Version", "Version_default", "version", "count", "__values", "DataBlock", "DataBlock_default", "init_DataBlock", "m", "version", "_a", "max", "Mode", "ModeValues", "version", "DecodedBitStreamParser", "DecodedBitStreamParser_default", "init_DecodedBitStreamParser", "version", "count", "start", "QRCodeDecoderMetaData", "__values", "Decoder", "Decoder_default", "init_Decoder", "init_BitMatrixParser", "init_DataBlock", "init_DecodedBitStreamParser", "m", "BitMatrixParser_default", "_a", "version", "DataBlock_default", "DecodedBitStreamParser_default", "__extends", "d", "b", "AlignmentPattern", "__values", "m", "AlignmentPatternFinder", "_a", "__extends", "FinderPattern", "FinderPattern_default", "init_FinderPattern", "d", "b", "count", "FinderPatternInfo", "__values", "init_FinderPattern", "m", "FinderPatternFinder", "count", "index", "FinderPattern_default", "_a", "max", "Detector", "Detector_default", "init_Detector", "init_Version", "Version_default", "transform", "error", "state", "init_Decoder", "init_Detector", "QRCodeReader", "Decoder_default", "Detector_default", "__values", "m", "PDF417Common", "_a", "PDF417DetectorResult", "__values", "Detector", "Detector_default", "init_Detector", "m", "_a", "__values", "m", "ModulusPoly", "a", "_a", "ModulusBase", "a", "__extends", "d", "b", "ModulusGF", "__values", "m", "ErrorCorrection", "_a", "error", "a", "BoundingBox", "BarcodeMetadata", "Formatter", "callback", "__values", "m", "DetectionResultColumn", "_a", "__values", "m", "error", "BarcodeValue", "_a", "key", "value", "__extends", "__values", "d", "b", "m", "DetectionResultRowIndicatorColumn", "_a", "__values", "m", "DetectionResult", "_a", "Codeword", "PDF417CodewordDecoder", "error", "PDF417ResultMetadata", "Long", "__extends", "d", "b", "NullPointerException", "OutputStream", "__extends", "d", "b", "OutOfMemoryError", "__extends", "d", "b", "ByteArrayOutputStream", "Mode", "DecodedBitStreamParser", "DecodedBitStreamParser_default", "init_DecodedBitStreamParser", "index", "count", "__values", "init_DecodedBitStreamParser", "m", "PDF417ScanningDecoder", "_a", "DecodedBitStreamParser_default", "__values", "init_Detector", "m", "PDF417Reader", "_a", "Detector_default", "__extends", "d", "b", "ReaderException", "__values", "m", "MultiFormatReader", "readers", "_a", "__extends", "d", "b", "BrowserMultiFormatReader", "__extends", "d", "b", "BrowserPDF417Reader", "__extends", "d", "b", "BrowserQRCodeReader", "EncodeHintType", "ReedSolomonEncoder", "MaskUtil", "array", "from", "to", "__values", "m", "ByteMatrix", "_a", "QRCode", "version", "__extends", "d", "b", "WriterException", "MatrixUtil", "version", "index", "BlockPair", "__values", "init_Version", "m", "Encoder", "version", "Version_default", "c", "_a", "BrowserQRCodeSvgWriter", "QRCodeWriter", "format", "MultiFormatWriter", "format", "__extends", "d", "b", "PlanarYUVLuminanceSource", "__extends", "d", "b", "RGBLuminanceSource", "__extends", "d", "b", "Charset", "StandardCharsets", "DefaultPlacement", "LOG", "ALOG", "SymbolShapeHint", "ErrorCorrection", "ErrorCorrection_default", "init_ErrorCorrection", "m", "c", "ASCIIEncoder", "c", "Base256Encoder", "c", "C40Encoder", "c", "count", "EdifactEncoder", "c", "count", "__extends", "__values", "d", "b", "m", "SymbolInfo", "_a", "index", "DataMatrixSymbolInfo144", "EncoderContext", "c", "count", "__extends", "d", "b", "X12Encoder", "c", "count", "__extends", "TextEncoder", "d", "b", "c", "HighLevelEncoder", "TextEncoder", "min", "c", "hex", "__values", "m", "CharsetEncoder", "c", "ECIEncoderSet", "_a", "index", "MinimalECIInput", "c", "index", "start", "to", "from", "InputEdge", "__extends", "__values", "__read", "Mode", "Result", "d", "b", "m", "error", "MinimalEncoder", "_a", "from", "Edge", "c", "Input", "init_ErrorCorrection", "DataMatrixWriter", "format", "ErrorCorrection_default", "AztecCode", "compact", "Collections", "Token", "__extends", "d", "b", "SimpleToken", "start", "__extends", "d", "b", "BinaryShiftToken", "start", "start", "add", "SHIFT_TABLE", "_a", "__values", "m", "__values", "m", "State", "add", "index", "_a", "state", "CHAR_MAP", "c", "__values", "HighLevelEncoder", "HighLevelEncoder_default", "init_HighLevelEncoder", "m", "index", "a", "_a", "state", "add", "oldState", "__values", "Encoder", "Encoder_default", "init_Encoder", "init_HighLevelEncoder", "m", "HighLevelEncoder_default", "compact", "_a", "init_Encoder", "AztecWriter", "format", "Encoder_default", "Encoder_default", "HighLevelEncoder_default", "ErrorCorrection_default", "DecodedBitStreamParser_default", "Version_default", "init_ErrorCorrection", "init_DecodedBitStreamParser", "init_Version", "init_Encoder", "init_HighLevelEncoder", "a", "c", "$", "t", "e", "n", "m", "r", "i", "s", "u", "M", "f", "l", "y", "v", "g", "D", "o", "d", "h", "t", "e", "i", "r", "s", "findSubmitterFromClickTarget", "clickCaptured", "event", "submittersByForm", "frameLoadingStyleFromString", "FrameLoadingStyle", "expandURL", "getAnchor", "getAction", "getExtension", "getLastPathComponent", "isHTML", "isPrefixedBy", "getPrefix", "locationIsVisitable", "location", "getRequestURL", "toCacheKey", "urlsAreEqual", "getPathComponents", "addTrailingSlash", "activateScriptElement", "getMetaContent", "copyElementAttributes", "createDocumentFragment", "dispatch", "nextAnimationFrame", "resolve", "nextEventLoopTick", "nextMicrotask", "parseHTMLDocument", "unindent", "interpolate", "match", "uuid", "getAttribute", "elements", "hasAttribute", "markAsBusy", "clearBusyState", "waitForLoad", "getHistoryMethodForAction", "isAction", "getVisitAction", "getMetaElement", "setMetaContent", "findClosestRecursively", "_a", "fetchMethodFromString", "FetchMethod", "importStreamElements", "formEnctypeFromString", "FormEnctype", "buildFormData", "getCookieValue", "cookie", "responseSucceededWithoutRedirect", "mergeFormDataEntries", "getPermanentElementById", "id", "queryPermanentElementsAll", "submissionDoesNotDismissDialog", "submissionDoesNotTargetIFrame", "doesNotTargetIFrame", "createPlaceholderForPermanentElement", "elementIsFocusable", "readScrollLogicalPosition", "readScrollBehavior", "elementType", "elementIsScript", "elementIsStylesheet", "elementIsTracked", "elementIsNoscript", "elementIsMetaElementWithName", "elementWithoutNonce", "isSuccessful", "getPermanentElementMapForFragment", "fetchResponseFromEvent", "FetchResponse", "fetchResponseIsStream", "StreamMessage", "extendURLWithDeprecatedProperties", "deprecatedLocationPropertyDescriptors", "start", "session", "registerAdapter", "visit", "connectStreamSource", "disconnectStreamSource", "renderStreamMessage", "clearCache", "setProgressBarDelay", "setConfirmMethod", "FormSubmission", "setFormMode", "getFrameElementById", "FrameElement", "activateElement", "createConsumer", "m", "a", "FetchRequest", "AppearanceObserver", "FormSubmissionState", "Snapshot", "FormSubmitObserver", "View", "FrameView", "LinkInterceptor", "LinkClickObserver", "FormLinkClickObserver", "Bardo", "Renderer", "FrameRenderer", "ProgressBar", "HeadSnapshot", "PageSnapshot", "TimingMetric", "VisitState", "defaultOptions", "SystemStatusCode", "Visit", "BrowserAdapter", "CacheObserver", "FrameRedirector", "History", "Navigator", "PageStage", "PageObserver", "ScrollObserver", "StreamMessageRenderer", "StreamObserver", "ErrorRenderer", "PageRenderer", "SnapshotCache", "PageView", "Preloader", "Session", "Cache", "StreamActions", "cache", "navigator$1", "Turbo", "TurboFrameMissingError", "FrameController", "StreamElement", "StreamSourceElement", "adapters", "now", "extend", "HTMLElement", "raise", "error", "type", "callback", "clone", "index", "root", "frame", "state", "element", "document", "c", "consumer", "subscription", "a", "t", "n", "i", "o", "r", "e", "u", "f", "s", "m", "c", "e", "t", "r", "a", "a", "c", "t", "s", "n", "m", "$", "l", "i", "e", "r", "y", "o", "u", "d", "h", "callback", "args", "timeout", "start", "id", "type", "start", "a", "array", "degrees", "min", "max", "m", "rgb", "c", "type", "color", "root", "_descriptors", "cache", "index", "add", "set", "getTarget", "defaults", "resolve", "descriptors", "styleValue", "locale", "count", "type", "draw", "event", "from", "to", "duration", "config", "min", "max", "index", "scales", "start", "count", "elements", "elementType", "cache", "names", "transition", "a", "i", "format", "getRelativePosition", "inRange", "array", "layouts", "positions", "Element", "locale", "validIndex", "color", "id", "registry", "filter", "descriptors", "plugins", "set", "animationOptions", "c", "listener", "alpha", "skip", "map", "callback", "m", "round", "interval", "required", "locale", "sign", "sign", "sign", "locale", "count", "format", "index", "array", "index", "MILLISECONDS_IN_DAY", "locale", "locale", "locale", "MILLISECONDS_IN_WEEK", "sign", "formatters", "formatters", "localize", "sign", "formatLong", "format", "locale", "locale", "MILLISECONDS_IN_HOUR", "MILLISECONDS_IN_MINUTE", "sign", "match", "formattingTokensRegExp", "longFormattingTokensRegExp", "escapedStringRegExp", "doubleQuoteRegExp", "unescapedLatinCharacterRegExp", "parse", "locale", "firstCharacter", "cleanEscapedString", "setter", "a", "index", "array", "array", "sign", "isLeapYearIndex", "type", "parse", "max", "min", "Chartkick", "uid", "id", "isNullOrUndef", "isArray", "type", "isObject", "isNumberFinite", "finiteOrDefault", "valueOrDefault", "toPercentage", "toDimension", "callback", "each", "_elementsEqual", "clone$1", "isValidKey", "_merger", "merge", "mergeIf", "_mergerIf", "resolveObjectKey", "_capitalize", "defined", "isFunction", "setsEqual", "a", "_isClickEvent", "PI", "TAU", "PITAU", "INFINITY", "RAD_PER_DEG", "HALF_PI", "QUARTER_PI", "TWO_THIRDS_PI", "log10", "sign", "niceNum", "almostEquals", "_factorize", "isNumber", "almostWhole", "_setMinAndMaxByKey", "array", "toRadians", "degrees", "toDegrees", "_decimalPlaces", "isNumberFinite", "getAngleFromPoint", "distanceBetweenPoints", "_angleDiff", "_normalizeAngle", "_angleBetween", "start", "_limitValue", "min", "max", "_int16Range", "_isBetween", "_lookup", "index", "_lookupByKey", "_rlookupByKey", "_filterBetween", "arrayEvents", "listenArrayEvents", "unlistenArrayEvents", "_arrayUnique", "set", "requestAnimFrame", "callback", "throttled", "args", "debounce", "timeout", "_toLeftRightCenter", "_alignStartEnd", "start", "start", "count", "min", "max", "_limitValue", "_lookupByKey", "atEdge", "elasticIn", "TAU", "elasticOut", "effects", "HALF_PI", "PI", "m", "round", "lim", "p2b", "n2b", "b2n", "n2p", "map$1", "hex", "h1", "h2", "eq", "isShort", "hexParse", "a", "hexString", "HUE_RE", "hsl2rgbn", "hsv2rgbn", "hwb2rgbn", "rgb", "rgb2hsl", "calln", "c", "hsl2rgb", "hwb2rgb", "hsv2rgb", "hue", "hueParse", "rotate", "hslString", "map", "names$1", "unpack", "names", "nameParse", "RGB_RE", "rgbParse", "rgbString", "interpolate", "modHSL", "clone", "fromObject", "functionParse", "Color", "type", "color", "index_esm", "isPatternOrGradient", "getHoverColor", "overrides", "descriptors", "getScope$1", "set", "root", "merge", "Defaults", "_descriptors", "isObject", "valueOrDefault", "defaults", "toFontString", "isNullOrUndef", "_measureText", "_longestText", "cache", "isArray", "_alignPixel", "clearCanvas", "drawPoint", "RAD_PER_DEG", "TWO_THIRDS_PI", "QUARTER_PI", "_isPointInArea", "clipArea", "unclipArea", "_steppedLineTo", "_bezierCurveTo", "renderText", "setRenderOpts", "decorateText", "addRoundedRectPath", "LINE_HEIGHT", "FONT_STYLE", "toLineHeight", "numberOrZero", "_readValueToProps", "toTRBL", "toTRBLCorners", "toPadding", "toFont", "resolve", "index", "_addGrace", "toDimension", "add", "createContext", "_createResolver", "getTarget", "defined", "_resolve", "_cached", "_resolveWithPrefixes", "getKeysFromAllScopes", "_attachContext", "_resolveWithContext", "isFunction", "readKey", "_capitalize", "needsSubResolver", "_resolveScriptable", "_resolveArray", "createSubResolver", "resolveFallback", "getScope", "resolveObjectKey", "addScopes", "addScopesFromKey", "subGetTarget", "resolveKeysFromAllScopes", "EPSILON", "getPoint", "getValueAxis", "splineCurve", "distanceBetweenPoints", "monotoneAdjust", "almostEquals", "monotoneCompute", "splineCurveMonotone", "sign", "capControlPoint", "capBezierPoints", "_updateBezierControlPoints", "_isDomSupported", "_getParentNode", "parseMaxStyle", "styleValue", "getComputedStyle", "getStyle", "positions", "getPositionedStyle", "useOffsetPos", "getCanvasPosition", "getRelativePosition", "getContainerSize", "INFINITY", "round1", "getMaximumSize", "retinaScale", "supportsEventListenerOptions", "readUsedSize", "_pointInLine", "_steppedInterpolation", "_bezierInterpolation", "intlCache", "getNumberFormat", "locale", "formatNumber", "getRightToLeftAdapter", "getLeftToRightAdapter", "getRtlAdapter", "overrideTextDirection", "restoreTextDirection", "propertyFn", "_angleBetween", "_angleDiff", "_normalizeAngle", "_isBetween", "normalizeSegment", "getSegment", "_boundSegment", "_boundSegments", "findStartAndEnd", "solidSegments", "_computeSegments", "splitByStyles", "doSplitByStyles", "readStyle", "styleChanged", "Animator", "type", "requestAnimFrame", "draw", "event", "animator", "transparent", "interpolators", "from", "to", "color", "Animation", "resolve", "effects", "duration", "numbers", "colors", "defaults", "animationOptions", "Animations", "config", "isObject", "isArray", "resolveTargetOptions", "awaitAll", "scaleClip", "min", "max", "defaultClip", "toClip", "getSortedDatasetIndices", "applyStack", "isNumberFinite", "sign", "convertObjectDataToArray", "isStacked", "getStackKey", "getUserBounds", "getOrCreateStack", "getLastIndexInStack", "updateStacks", "index", "getFirstScaleId", "scales", "createDatasetContext", "createContext", "createDataContext", "clearStacks", "isDirectUpdateMode", "cloneIfNotShared", "createStack", "DatasetController", "valueOrDefault", "unlistenArrayEvents", "listenArrayEvents", "start", "count", "resolveObjectKey", "elements", "elementType", "cache", "defined", "names", "transition", "getAllScaleValues", "_arrayUnique", "a", "computeMinSampleSize", "computeFitCategoryTraits", "isNullOrUndef", "computeFlexCategoryTraits", "parseFloatBar", "parseValue", "parseArrayOrPrimitive", "isFloatBar", "barSign", "borderProps", "setBorderSkipped", "parseEdge", "swap", "startEnd", "setInflateAmount", "BarController", "BubbleController", "getRatioAndOffset", "TAU", "_angleBetween", "HALF_PI", "PI", "DoughnutController", "i", "toRadians", "toPercentage", "toDimension", "formatNumber", "LineController", "isNumber", "PolarAreaController", "PieController", "RadarController", "Element", "formatters", "locale", "calculateDelta", "log10", "Ticks", "autoSkip", "determineMaxTicks", "getMajorIndices", "skipMajors", "calculateSpacing", "skip", "getEvenSpacing", "_factorize", "reverseAlign", "offsetFromEdge", "sample", "getPixelForGridLine", "validIndex", "garbageCollect", "each", "getTickMarkLength", "getTitleHeight", "toFont", "toPadding", "createScaleContext", "createTickContext", "titleAlign", "_toLeftRightCenter", "titleArgs", "_alignStartEnd", "Scale", "finiteOrDefault", "callback", "_addGrace", "_limitValue", "toDegrees", "_measureText", "_int16Range", "_alignPixel", "clipArea", "renderText", "unclipArea", "TypedRegistry", "isIChartComponent", "id", "registerDefaults", "overrides", "merge", "routeDefaults", "Registry", "registry", "_capitalize", "ScatterController", "abstract", "DateAdapter", "format", "a", "adapters", "binarySearch", "_rlookupByKey", "_lookupByKey", "start", "index", "getDistanceMetricForAxis", "getIntersectItems", "_isPointInArea", "getNearestRadialItems", "getAngleFromPoint", "_angleBetween", "getNearestCartesianItems", "inRange", "getNearestItems", "getAxisItems", "Interaction", "getRelativePosition", "elements", "STATIC_POSITIONS", "filterByPosition", "array", "filterDynamicPositionByAxis", "sortByWeight", "wrapBoxes", "buildStacks", "layouts", "setLayoutDims", "buildLayoutBoxes", "getCombinedMax", "updateMaxPadding", "updateDims", "isObject", "handleMaxPadding", "getMargins", "positions", "fitBoxes", "setBoxDims", "placeBoxes", "defined", "defaults", "toPadding", "each", "BasePlatform", "type", "config", "BasicPlatform", "EXPANDO_KEY", "EVENT_TYPES", "isNullOrEmpty", "initCanvas", "readUsedSize", "eventListenerOptions", "supportsEventListenerOptions", "addListener", "removeListener", "fromNativeEvent", "event", "nodeListContains", "createAttachObserver", "createDetachObserver", "drpListeningCharts", "oldDevicePixelRatio", "onWindowResize", "listenDevicePixelRatioChanges", "unlistenDevicePixelRatioChanges", "createResizeObserver", "_getParentNode", "throttled", "releaseObserver", "createProxyAndListen", "DomPlatform", "isNullOrUndef", "getMaximumSize", "_detectPlatform", "_isDomSupported", "PluginService", "filter", "descriptors", "callback", "valueOrDefault", "plugins", "allPlugins", "createDescriptors", "registry", "getOpts", "id", "pluginOpts", "getIndexAxis", "getAxisFromDefaultScaleID", "getDefaultScaleIDFromAxis", "axisFromPosition", "determineAxis", "mergeScaleConfig", "overrides", "scales", "mergeIf", "initOptions", "initData", "initConfig", "keyCache", "keysCached", "cachedKeys", "addIfFound", "set", "resolveObjectKey", "Config", "transition", "elementType", "cache", "names", "getResolver", "needContext", "isFunction", "_attachContext", "_createResolver", "hasFunction", "_descriptors", "isArray", "version", "KNOWN_POSITIONS", "positionIsHorizontal", "compare2Level", "onAnimationsComplete", "animationOptions", "onAnimationProgress", "getCanvas", "instances", "getChart", "c", "moveNumericKeys", "determineLastEvent", "Chart", "uid", "debounce", "animator", "retinaScale", "clearCanvas", "setsEqual", "count", "clipArea", "unclipArea", "createContext", "listener", "_elementsEqual", "_isClickEvent", "invalidatePlugins", "enumerable", "clipArc", "HALF_PI", "toRadiusCorners", "_readValueToProps", "parseBorderRadius$1", "_limitValue", "rThetaToXY", "pathArc", "alpha", "PI", "drawArc", "TAU", "drawFullCircleBorders", "drawBorder", "ArcElement", "Element", "_isBetween", "setStyle", "lineTo", "getLineMethod", "_steppedLineTo", "_bezierCurveTo", "pathVars", "pathSegment", "fastPathSegment", "_getSegmentMethod", "_getInterpolationMethod", "_steppedInterpolation", "_bezierInterpolation", "_pointInLine", "strokePathWithCache", "strokePathDirect", "usePath2D", "draw", "LineElement", "_updateBezierControlPoints", "_computeSegments", "_boundSegments", "inRange$1", "PointElement", "drawPoint", "getBarBounds", "skipOrLimit", "skip", "min", "max", "parseBorderWidth", "toTRBL", "parseBorderRadius", "toTRBLCorners", "boundingRects", "hasRadius", "addNormalRectPath", "inflateRect", "BarElement", "addRoundedRectPath", "positioners", "count", "distanceBetweenPoints", "pushOrConcat", "isArray", "splitNewlines", "createTooltipItem", "index", "getTooltipSize", "toFont", "toPadding", "each", "determineYAlign", "doesNotFitWithAlign", "determineXAlign", "determineAlignment", "alignX", "alignY", "getBackgroundPoint", "toTRBLCorners", "_limitValue", "getAlignedX", "getBeforeAfterBodyLines", "callback", "createTooltipContext", "createContext", "overrideCallbacks", "Tooltip", "Element", "config", "Animations", "array", "a", "getRtlAdapter", "drawPoint", "isObject", "addRoundedRectPath", "overrideTextDirection", "restoreTextDirection", "_elementsEqual", "addIfString", "index", "findOrAddLabel", "validIndex", "max", "_limitValue", "CategoryScale", "Scale", "isNullOrUndef", "valueOrDefault", "min", "generateTicks$1", "count", "niceNum", "almostWhole", "almostEquals", "_decimalPlaces", "relativeLabelSize", "toRadians", "LinearScaleBase", "sign", "_setMinAndMaxByKey", "start", "formatNumber", "LinearScale", "isNumberFinite", "Ticks", "isMajor", "log10", "generateTicks", "finiteOrDefault", "LogarithmicScale", "m", "getTickBackdropHeight", "toPadding", "defaults", "measureLabelSize", "isArray", "_longestText", "determineLimits", "fitWithPointLabels", "PI", "toFont", "_normalizeAngle", "toDegrees", "updateLimits", "buildPointLabelItems", "HALF_PI", "yForAngle", "getTextAlignForAngle", "leftForTextAlign", "drawPointLabels", "toTRBLCorners", "addRoundedRectPath", "renderText", "pathRadiusLine", "TAU", "drawRadiusLine", "color", "createPointLabelContext", "createContext", "RadialLinearScale", "callback", "INTERVALS", "UNITS", "sorter", "a", "parse", "round", "isNumber", "determineUnitForAutoTicks", "interval", "determineUnitForFormatting", "determineMajorUnit", "addTick", "_lookup", "setMajorTicks", "map", "ticksFromTimestamps", "TimeScale", "adapters", "mergeIf", "_filterBetween", "format", "_arrayUnique", "interpolate", "_lookupByKey", "TimeSeriesScale", "event", "application", "map", "error", "index", "match", "filter", "callback", "fetch", "set", "callback", "match", "oldValue", "index", "error", "descriptors", "_a", "constructor", "a", "application", "logger", "elements", "element", "c", "array", "filter", "resolve", "type", "event", "frame", "key", "noop", "callback", "set", "type", "c", "document", "m", "m", "match", "match", "match", "m", "datum", "m", "selection", "m", "merge", "m", "a", "m", "callback", "m", "callback", "m", "names", "create", "create", "clone", "event", "parseTypenames", "m", "dispatchEvent", "type", "window", "event", "dispatch_default", "m", "dispatch_default", "select_default", "extend", "Color", "color", "format", "m", "a", "extend", "hex", "min", "max", "hsl2rgb", "constant_default", "a", "a", "constant_default", "color", "rgb", "start", "colors", "a", "a", "i", "a", "c", "m", "parse", "rotate", "a", "callback", "now", "callback", "id", "index", "get", "set", "self", "start", "empty", "interrupt_default", "id", "set", "get", "transition", "a", "c", "color", "attrRemove", "attrRemoveNS", "attrConstant", "interpolate", "attrConstantNS", "attrFunction", "attrFunctionNS", "attr_default", "id", "get", "id", "set", "get", "id", "set", "get", "id", "set", "filter_default", "match", "m", "merge_default", "transition", "m", "merge", "id", "set", "on_default", "get", "id", "remove_default", "select_default", "id", "m", "get", "selectAll_default", "id", "m", "children", "inherit", "get", "Selection", "selection_default", "interpolate", "styleRemove", "styleConstant", "styleFunction", "id", "event", "remove", "set", "style_default", "textConstant", "textFunction", "text_default", "m", "inherit", "get", "id", "resolve", "set", "id", "select_default", "selectAll_default", "filter_default", "merge_default", "selection_default", "on_default", "attr_default", "style_default", "text_default", "remove_default", "id", "transition_default", "m", "interrupt_default", "transition_default", "children", "each_default", "callback", "index", "callback", "children", "index", "callback", "children", "index", "callback", "index", "children", "sort_default", "start", "a", "c", "root", "iterator_default", "children", "children", "root", "Node", "each_default", "sort_default", "iterator_default", "constant_default", "array", "m", "a", "c", "a2", "c2", "a", "c", "a2", "Node", "root", "constant_default", "children", "index", "location", "identity", "select_default", "root", "a", "event", "event", "cookie", "error", "event", "event", "error", "event", "error", "tab", "event", "config", "callback", "observer", "event", "event", "error", "resolve", "timeout", "match", "event", "event", "track", "dayjs", "quarterOfYear", "event", "import_dayjs", "import_quarterOfYear", "dayjs", "quarterOfYear", "dateRange", "error", "event", "event", "error", "HTMLElement", "raise", "event", "FrameLoadingStyle", "_a", "location", "FetchResponse", "dispatch", "resolve", "interpolate", "match", "elements", "FetchMethod", "FetchRequest", "error", "FormSubmissionState", "FormEnctype", "cookie", "id", "type", "callback", "clone", "index", "root", "TimingMetric", "VisitState", "SystemStatusCode", "session", "visit", "frame", "state", "PageStage", "start", "Turbo", "element", "document", "c", "consumer", "now", "duration", "event", "duration", "disconnectedAt", "error", "import_dayjs", "dayjs", "timezone", "advancedFormat", "import_dayjs", "import_duration", "dayjs", "duration", "event", "track", "error", "resolve", "publisherOptions", "event", "defaultOptions", "event", "frame", "callback", "id", "count", "event", "error", "tab", "consumer", "event", "event", "id", "event", "config", "event", "event", "error", "event", "event", "event", "li", "event", "callback", "event", "filter", "event", "elements", "error", "event", "li", "id", "callback", "config", "event", "event", "callback", "event", "id", "count", "event", "frame", "event", "event", "a", "error", "session", "event", "type", "error", "error", "event", "error", "resolve", "m", "type", "id", "error", "event", "callback", "event", "event", "callback", "callback", "children", "elements", "error", "index", "m", "start", "config", "selectedDates", "event", "frame", "event", "tab", "panel", "event", "id", "event", "error", "callback", "observer", "now", "event", "event", "count", "names", "event", "event", "csrfToken", "id", "publisherOptions", "error", "event", "c", "getCookie", "callback", "skip", "event", "adapters", "logger", "now", "secondsSince", "ConnectionMonitor", "INTERNAL", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "consumer", "error", "state", "event", "type", "Chart", "logger"]
}
