decodeBitMatrix(bits, hints) {
			// Construct a parser and read version, error-correction level
			const parser = new BitMatrixParser$1(bits);
			let ex = null;
			try {
				return this.decodeBitMatrixParser(parser, hints);
			}
			catch (e /*: FormatException, ChecksumException*/) {
				ex = e;
			}
			try {
				// Revert the bit matrix
				parser.remask();
				// Will be attempting a mirrored reading of the version and format info.
				parser.setMirror(true);
				// Preemptively read the version.
				parser.readVersion();
				// Preemptively read the format information.
				parser.readFormatInformation();
				/*
                 * Since we're here, this means we have successfully detected some kind
                 * of version and format information when mirrored. This is a good sign,
                 * that the QR code may be mirrored, and we should try once more with a
                 * mirrored content.
                 */
				// Prepare for a mirrored reading.
				parser.mirror();
				const result = this.decodeBitMatrixParser(parser, hints);
				// Success! Notify the caller that the code was mirrored.
				result.setOther(new QRCodeDecoderMetaData(true));
				return result;
			}
			catch (e /*FormatException | ChecksumException*/) {
				// Throw the exception from the original reading
				if (ex !== null) {
					throw ex;
				}
				throw e;
			}
		}
<p>Decodes a QR Code represented as a {@link BitMatrix}. A 1 or "true" is taken to mean a black module.</p>

@param bits booleans representing white/black QR Code modules
@param hints decoding hints that should be used to influence decoding
@return text and bytes encoded within the QR Code
@throws FormatException if the QR Code cannot be decoded
@throws ChecksumException if error correction fails