{"version":3,"file":"index.min.js","sources":["../../node_modules/regenerator-runtime/runtime.js","../../node_modules/core-js/library/modules/_to-integer.js","../../node_modules/core-js/library/modules/_defined.js","../../node_modules/core-js/library/modules/_global.js","../../node_modules/core-js/library/modules/_core.js","../../node_modules/core-js/library/modules/_a-function.js","../../node_modules/core-js/library/modules/_ctx.js","../../node_modules/core-js/library/modules/_is-object.js","../../node_modules/core-js/library/modules/_an-object.js","../../node_modules/core-js/library/modules/_fails.js","../../node_modules/core-js/library/modules/_descriptors.js","../../node_modules/core-js/library/modules/_dom-create.js","../../node_modules/core-js/library/modules/_ie8-dom-define.js","../../node_modules/core-js/library/modules/_to-primitive.js","../../node_modules/core-js/library/modules/_object-dp.js","../../node_modules/core-js/library/modules/_property-desc.js","../../node_modules/core-js/library/modules/_hide.js","../../node_modules/core-js/library/modules/_has.js","../../node_modules/core-js/library/modules/_export.js","../../node_modules/core-js/library/modules/_redefine.js","../../node_modules/core-js/library/modules/_iterators.js","../../node_modules/core-js/library/modules/_cof.js","../../node_modules/core-js/library/modules/_iobject.js","../../node_modules/core-js/library/modules/_to-iobject.js","../../node_modules/core-js/library/modules/_to-length.js","../../node_modules/core-js/library/modules/_to-absolute-index.js","../../node_modules/core-js/library/modules/_shared.js","../../node_modules/core-js/library/modules/_uid.js","../../node_modules/core-js/library/modules/_shared-key.js","../../node_modules/core-js/library/modules/_object-keys-internal.js","../../node_modules/core-js/library/modules/_array-includes.js","../../node_modules/core-js/library/modules/_enum-bug-keys.js","../../node_modules/core-js/library/modules/_object-keys.js","../../node_modules/core-js/library/modules/_object-dps.js","../../node_modules/core-js/library/modules/_html.js","../../node_modules/core-js/library/modules/_object-create.js","../../node_modules/core-js/library/modules/_wks.js","../../node_modules/core-js/library/modules/_set-to-string-tag.js","../../node_modules/core-js/library/modules/_iter-create.js","../../node_modules/core-js/library/modules/_to-object.js","../../node_modules/core-js/library/modules/_object-gpo.js","../../node_modules/core-js/library/modules/_iter-define.js","../../node_modules/core-js/library/modules/es6.string.iterator.js","../../node_modules/core-js/library/modules/_string-at.js","../../node_modules/core-js/library/modules/_iter-step.js","../../node_modules/core-js/library/modules/es6.array.iterator.js","../../node_modules/core-js/library/modules/web.dom.iterable.js","../../node_modules/core-js/library/modules/_classof.js","../../node_modules/core-js/library/modules/_task.js","../../node_modules/core-js/library/modules/_an-instance.js","../../node_modules/core-js/library/modules/_iter-call.js","../../node_modules/core-js/library/modules/_is-array-iter.js","../../node_modules/core-js/library/modules/core.get-iterator-method.js","../../node_modules/core-js/library/modules/_for-of.js","../../node_modules/core-js/library/modules/_species-constructor.js","../../node_modules/core-js/library/modules/_invoke.js","../../node_modules/core-js/library/modules/_microtask.js","../../node_modules/core-js/library/modules/_new-promise-capability.js","../../node_modules/core-js/library/modules/_perform.js","../../node_modules/core-js/library/modules/_user-agent.js","../../node_modules/core-js/library/modules/_promise-resolve.js","../../node_modules/core-js/library/modules/_redefine-all.js","../../node_modules/core-js/library/modules/_set-species.js","../../node_modules/core-js/library/modules/_iter-detect.js","../../node_modules/core-js/library/modules/es6.promise.js","../../node_modules/core-js/library/modules/_library.js","../../node_modules/core-js/library/modules/es7.promise.finally.js","../../node_modules/core-js/library/modules/es7.promise.try.js","../../node_modules/core-js/library/fn/promise.js","../../node_modules/@babel/runtime-corejs2/helpers/asyncToGenerator.js","../../node_modules/objectFitPolyfill/dist/objectFitPolyfill.min.js","../../node_modules/core-js/library/modules/_meta.js","../../node_modules/core-js/library/modules/_validate-collection.js","../../node_modules/core-js/library/modules/_collection-strong.js","../../node_modules/core-js/library/modules/_is-array.js","../../node_modules/core-js/library/modules/_collection.js","../../node_modules/core-js/library/modules/_array-species-constructor.js","../../node_modules/core-js/library/modules/_array-methods.js","../../node_modules/core-js/library/modules/es6.set.js","../../node_modules/core-js/library/modules/_collection-to-json.js","../../node_modules/core-js/library/modules/_array-from-iterable.js","../../node_modules/core-js/library/modules/es7.set.to-json.js","../../node_modules/core-js/library/modules/_set-collection-of.js","../../node_modules/core-js/library/modules/es7.set.of.js","../../node_modules/core-js/library/modules/_set-collection-from.js","../../node_modules/core-js/library/modules/es7.set.from.js","../../node_modules/core-js/library/fn/set.js","../../node_modules/core-js/library/modules/_create-property.js","../../node_modules/core-js/library/modules/es6.array.from.js","../../node_modules/core-js/library/fn/array/from.js","../../node_modules/core-js/library/modules/es6.object.define-property.js","../../node_modules/core-js/library/fn/object/define-property.js","../../node_modules/@babel/runtime-corejs2/helpers/createClass.js","../../node_modules/core-js/library/modules/_bind.js","../../node_modules/core-js/library/modules/es6.reflect.construct.js","../../node_modules/core-js/library/fn/reflect/construct.js","../../node_modules/@babel/runtime-corejs2/helpers/classCallCheck.js","../../node_modules/core-js/library/modules/es6.object.create.js","../../node_modules/core-js/library/fn/object/create.js","../../node_modules/core-js/library/modules/_object-pie.js","../../node_modules/core-js/library/modules/_object-gopd.js","../../node_modules/core-js/library/modules/_set-proto.js","../../node_modules/core-js/library/modules/es6.object.set-prototype-of.js","../../node_modules/core-js/library/fn/object/set-prototype-of.js","../../node_modules/@babel/runtime-corejs2/helpers/setPrototypeOf.js","../../node_modules/@babel/runtime-corejs2/helpers/inherits.js","../../node_modules/core-js/library/modules/_wks-ext.js","../../node_modules/core-js/library/fn/symbol/iterator.js","../../node_modules/core-js/library/modules/_wks-define.js","../../node_modules/core-js/library/modules/_object-gops.js","../../node_modules/core-js/library/modules/_object-gopn.js","../../node_modules/core-js/library/modules/_object-gopn-ext.js","../../node_modules/core-js/library/modules/es6.symbol.js","../../node_modules/core-js/library/modules/_enum-keys.js","../../node_modules/core-js/library/modules/es7.symbol.async-iterator.js","../../node_modules/core-js/library/modules/es7.symbol.observable.js","../../node_modules/core-js/library/fn/symbol/index.js","../../node_modules/@babel/runtime-corejs2/helpers/typeof.js","../../node_modules/@babel/runtime-corejs2/helpers/assertThisInitialized.js","../../node_modules/@babel/runtime-corejs2/helpers/possibleConstructorReturn.js","../../node_modules/core-js/library/modules/_object-sap.js","../../node_modules/core-js/library/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/library/fn/object/get-prototype-of.js","../../node_modules/@babel/runtime-corejs2/helpers/getPrototypeOf.js","../../node_modules/eventemitter3/index.js","../../node_modules/core-js/library/modules/es6.map.js","../../node_modules/core-js/library/modules/es7.map.to-json.js","../../node_modules/core-js/library/modules/es7.map.of.js","../../node_modules/core-js/library/modules/es7.map.from.js","../../node_modules/core-js/library/fn/map.js","../../src/lib/barcode.ts","../../src/lib/browserCompatibility.ts","../../src/lib/browserHelper.ts","../../node_modules/js-cookie/src/js.cookie.js","../../node_modules/ua-parser-js/src/ua-parser.js","../../src/lib/workers/engineWorker.ts","../../src/lib/engineLoader.ts","../../src/lib/blurryRecognitionPreloader.ts","../../node_modules/@babel/runtime-corejs2/helpers/isNativeFunction.js","../../node_modules/@babel/runtime-corejs2/helpers/isNativeReflectConstruct.js","../../node_modules/@babel/runtime-corejs2/helpers/construct.js","../../src/lib/customError.ts","../../node_modules/@babel/runtime-corejs2/helpers/wrapNativeSuper.js","../../src/lib/unsupportedBrowserError.ts","../../src/lib/camera.ts","../../node_modules/howler/dist/howler.core.min.js","../../node_modules/core-js/library/fn/json/stringify.js","../../node_modules/core-js/library/modules/es6.array.is-array.js","../../node_modules/core-js/library/fn/array/is-array.js","../../src/lib/imageSettings.ts","../../src/lib/parser.ts","../../node_modules/@babel/runtime-corejs2/helpers/arrayLikeToArray.js","../../node_modules/core-js/library/modules/core.is-iterable.js","../../node_modules/@babel/runtime-corejs2/helpers/toConsumableArray.js","../../node_modules/@babel/runtime-corejs2/helpers/arrayWithoutHoles.js","../../node_modules/@babel/runtime-corejs2/helpers/iterableToArray.js","../../node_modules/@babel/runtime-corejs2/helpers/unsupportedIterableToArray.js","../../node_modules/@babel/runtime-corejs2/helpers/nonIterableSpread.js","../../src/lib/scanResult.ts","../../node_modules/core-js/library/modules/core.get-iterator.js","../../node_modules/core-js/library/modules/_object-to-array.js","../../node_modules/core-js/library/modules/es7.object.values.js","../../node_modules/core-js/library/fn/object/values.js","../../src/lib/symbologySettings.ts","../../src/lib/scanSettings.ts","../../src/lib/scanner.ts","../../src/lib/singleImageModeSettings.ts","../../src/lib/assets/base64assets.ts","../../node_modules/core-js/library/modules/es6.object.keys.js","../../node_modules/core-js/library/fn/object/keys.js","../../node_modules/core-js/library/modules/es6.object.define-properties.js","../../node_modules/core-js/library/fn/object/define-properties.js","../../node_modules/core-js/library/modules/_own-keys.js","../../node_modules/core-js/library/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/library/fn/object/get-own-property-descriptors.js","../../node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/library/fn/object/get-own-property-descriptor.js","../../node_modules/core-js/library/fn/object/get-own-property-symbols.js","../../node_modules/@babel/runtime-corejs2/helpers/defineProperty.js","../../node_modules/core-js/library/modules/_string-ws.js","../../node_modules/core-js/library/modules/_string-trim.js","../../node_modules/core-js/library/modules/_parse-int.js","../../node_modules/core-js/library/modules/es6.parse-int.js","../../node_modules/core-js/library/fn/parse-int.js","../../src/lib/cameraSettings.ts","../../src/lib/barcodePicker/cameraManager.ts","../../src/lib/cameraAccess.ts","../../src/lib/barcodePicker/dummyCameraManager.ts","../../node_modules/core-js/library/modules/_object-assign.js","../../node_modules/core-js/library/modules/es6.object.assign.js","../../node_modules/core-js/library/fn/object/assign.js","../../node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../../node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../../node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../../node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../../node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../../src/lib/barcodePicker/barcodePicker.ts","../../node_modules/@juggle/resize-observer/lib/utils/element.js","../../node_modules/@juggle/resize-observer/lib/utils/global.js","../../node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../../node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../../node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../../node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../../node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../../node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../../node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../../node_modules/@juggle/resize-observer/lib/utils/process.js","../../node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../../node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../../node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../../node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../../node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../../node_modules/@juggle/resize-observer/lib/ResizeObserver.js","../../src/lib/barcodePicker/gui.ts","../../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = require('./_hide');\n","module.exports = {};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var hide = require('./_hide');\nmodule.exports = function (target, src, safe) {\n for (var key in src) {\n if (safe && target[key]) target[key] = src[key];\n else hide(target, key, src[key]);\n } return target;\n};\n","'use strict';\nvar global = require('./_global');\nvar core = require('./_core');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = true;\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-promise-try\nvar $export = require('./_export');\nvar newPromiseCapability = require('./_new-promise-capability');\nvar perform = require('./_perform');\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapability.f(this);\n var result = perform(callbackfn);\n (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n return promiseCapability.promise;\n} });\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.promise');\nrequire('../modules/es7.promise.finally');\nrequire('../modules/es7.promise.try');\nmodule.exports = require('../modules/_core').Promise;\n","var _Promise = require(\"../core-js/promise\");\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n _Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new _Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","!function(){\"use strict\";if(\"undefined\"!=typeof window){var t=window.navigator.userAgent.match(/Edge\\/(\\d{2})\\./),n=!!t&&16<=parseInt(t[1],10);if(!(\"objectFit\"in document.documentElement.style!=!1)||n){var o=function(t,e,i){var n,o,l,a,d;if((i=i.split(\" \")).length<2&&(i[1]=i[0]),\"x\"===t)n=i[0],o=i[1],l=\"left\",a=\"right\",d=e.clientWidth;else{if(\"y\"!==t)return;n=i[1],o=i[0],l=\"top\",a=\"bottom\",d=e.clientHeight}if(n!==l&&o!==l){if(n!==a&&o!==a)return\"center\"===n||\"50%\"===n?(e.style[l]=\"50%\",void(e.style[\"margin-\"+l]=d/-2+\"px\")):void(0<=n.indexOf(\"%\")?(n=parseInt(n))<50?(e.style[l]=n+\"%\",e.style[\"margin-\"+l]=d*(n/-100)+\"px\"):(n=100-n,e.style[a]=n+\"%\",e.style[\"margin-\"+a]=d*(n/-100)+\"px\"):e.style[l]=n);e.style[a]=\"0\"}else e.style[l]=\"0\"},l=function(t){var e=t.dataset?t.dataset.objectFit:t.getAttribute(\"data-object-fit\"),i=t.dataset?t.dataset.objectPosition:t.getAttribute(\"data-object-position\");e=e||\"cover\",i=i||\"50% 50%\";var n=t.parentNode;return function(t){var e=window.getComputedStyle(t,null),i=e.getPropertyValue(\"position\"),n=e.getPropertyValue(\"overflow\"),o=e.getPropertyValue(\"display\");i&&\"static\"!==i||(t.style.position=\"relative\"),\"hidden\"!==n&&(t.style.overflow=\"hidden\"),o&&\"inline\"!==o||(t.style.display=\"block\"),0===t.clientHeight&&(t.style.height=\"100%\"),-1===t.className.indexOf(\"object-fit-polyfill\")&&(t.className=t.className+\" object-fit-polyfill\")}(n),function(t){var e=window.getComputedStyle(t,null),i={\"max-width\":\"none\",\"max-height\":\"none\",\"min-width\":\"0px\",\"min-height\":\"0px\",top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\",\"margin-top\":\"0px\",\"margin-right\":\"0px\",\"margin-bottom\":\"0px\",\"margin-left\":\"0px\"};for(var n in i)e.getPropertyValue(n)!==i[n]&&(t.style[n]=i[n])}(t),t.style.position=\"absolute\",t.style.width=\"auto\",t.style.height=\"auto\",\"scale-down\"===e&&(e=t.clientWidthn.clientWidth||\"contain\"===e&&t.clientWidth 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar meta = require('./_meta');\nvar fails = require('./_fails');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar setToStringTag = require('./_set-to-string-tag');\nvar dP = require('./_object-dp').f;\nvar each = require('./_array-methods')(0);\nvar DESCRIPTORS = require('./_descriptors');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n if (!DESCRIPTORS || typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME, '_c');\n target._c = new Base();\n if (iterable != undefined) forOf(iterable, IS_MAP, target[ADDER], target);\n });\n each('add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON'.split(','), function (KEY) {\n var IS_ADDER = KEY == 'add' || KEY == 'set';\n if (KEY in proto && !(IS_WEAK && KEY == 'clear')) hide(C.prototype, KEY, function (a, b) {\n anInstance(this, C, KEY);\n if (!IS_ADDER && IS_WEAK && !isObject(a)) return KEY == 'get' ? undefined : false;\n var result = this._c[KEY](a === 0 ? 0 : a, b);\n return IS_ADDER ? this : result;\n });\n });\n IS_WEAK || dP(C.prototype, 'size', {\n get: function () {\n return this._c.size;\n }\n });\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F, O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof');\nvar from = require('./_array-from-iterable');\nmodule.exports = function (NAME) {\n return function toJSON() {\n if (classof(this) != NAME) throw TypeError(NAME + \"#toJSON isn't generic\");\n return from(this);\n };\n};\n","var forOf = require('./_for-of');\n\nmodule.exports = function (iter, ITERATOR) {\n var result = [];\n forOf(iter, false, result.push, result, ITERATOR);\n return result;\n};\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') });\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { of: function of() {\n var length = arguments.length;\n var A = new Array(length);\n while (length--) A[length] = arguments[length];\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\nrequire('./_set-collection-of')('Set');\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar ctx = require('./_ctx');\nvar forOf = require('./_for-of');\n\nmodule.exports = function (COLLECTION) {\n $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {\n var mapFn = arguments[1];\n var mapping, A, n, cb;\n aFunction(this);\n mapping = mapFn !== undefined;\n if (mapping) aFunction(mapFn);\n if (source == undefined) return new this();\n A = [];\n if (mapping) {\n n = 0;\n cb = ctx(mapFn, arguments[2], 2);\n forOf(source, false, function (nextItem) {\n A.push(cb(nextItem, n++));\n });\n } else {\n forOf(source, false, A.push, A);\n }\n return new this(A);\n } });\n};\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\nrequire('./_set-collection-from')('Set');\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.set');\nrequire('../modules/es7.set.to-json');\nrequire('../modules/es7.set.of');\nrequire('../modules/es7.set.from');\nmodule.exports = require('../modules/_core').Set;\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n","var _Object$defineProperty = require(\"../core-js/object/define-property\");\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n\n _Object$defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","require('../../modules/es6.reflect.construct');\nmodule.exports = require('../../modules/_core').Reflect.construct;\n","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n return $Object.create(P, D);\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","var _Object$setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nfunction _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = _Object$setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var _Object$create = require(\"../core-js/object/create\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = _Object$create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","exports.f = require('./_wks');\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","var _Symbol$iterator = require(\"../core-js/symbol/iterator\");\n\nvar _Symbol = require(\"../core-js/symbol\");\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof _Symbol === \"function\" && typeof _Symbol$iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof _Symbol === \"function\" && obj.constructor === _Symbol && obj !== _Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n","var _Object$getPrototypeOf = require(\"../core-js/object/get-prototype-of\");\n\nvar _Object$setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nfunction _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = _Object$setPrototypeOf ? _Object$getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || _Object$getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export = require('./_export');\n\n$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') });\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\nrequire('./_set-collection-of')('Map');\n","// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\nrequire('./_set-collection-from')('Map');\n","require('../modules/es6.object.to-string');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/web.dom.iterable');\nrequire('../modules/es6.map');\nrequire('../modules/es7.map.to-json');\nrequire('../modules/es7.map.of');\nrequire('../modules/es7.map.from');\nmodule.exports = require('../modules/_core').Map;\n","import { BarcodeEncodingRange } from \"./barcodeEncodingRange\";\nimport { Quadrilateral } from \"./quadrilateral\";\n\n/**\n * A barcode result.\n */\nexport interface Barcode {\n /**\n * The symbology type.\n */\n readonly symbology: Barcode.Symbology;\n /**\n * The data encoded in the barcode interpreted as a UTF-8 string.\n * If the raw data is not a valid UTF-8 string, this field will be an empty string; information from [[rawData]]\n * and [[encodingArray]] can be used to reconstruct a string.\n */\n readonly data: string;\n /**\n * The raw data encoded in the barcode, given as an array of bytes.\n * To interpret this correctly you may have to use the information contained in [[encodingArray]].\n */\n readonly rawData: Uint8Array;\n /**\n * The location of the barcode.\n */\n readonly location: Quadrilateral;\n /**\n * Whether the barcode is part of a composite code.\n */\n readonly compositeFlag: Barcode.CompositeFlag;\n /**\n * Whether the barcode is a GS1 data carrier.\n */\n readonly isGs1DataCarrier: boolean;\n /**\n * The data encoding of the data in the barcode, given as an array of encoding ranges.\n */\n readonly encodingArray: BarcodeEncodingRange[];\n}\n\n/**\n * @hidden\n */\nexport type BarcodeWASMResult = {\n readonly symbology: Barcode.Symbology;\n readonly rawData: number[];\n readonly location: number[][];\n readonly compositeFlag: Barcode.CompositeFlag;\n readonly isGs1DataCarrier: boolean;\n readonly encodingArray: BarcodeEncodingRange[];\n readonly isRecognized: boolean;\n};\n\nexport namespace Barcode {\n // Deprecated but useful function for easy UTF-8 handling\n /**\n * @hidden\n */\n declare function escape(s: string): string;\n\n /**\n * @hidden\n *\n * Create a [[Barcode]] object from a partial object returned by the external Scandit Engine library.\n * The *rawData* and *data* fields are computed and stored.\n *\n * @param result The barcode result coming from the external Scandit Engine library.\n * @returns The generated [[Barcode]] object.\n */\n export function createFromWASMResult(result: BarcodeWASMResult): Barcode {\n let decodedData: string;\n try {\n decodedData = decodeURIComponent(escape(String.fromCharCode.apply(null, result.rawData)));\n } catch {\n decodedData = \"\";\n }\n\n return {\n symbology: result.symbology,\n data: decodedData,\n rawData: new Uint8Array(result.rawData),\n location: {\n topLeft: { x: result.location[0][0], y: result.location[0][1] },\n topRight: { x: result.location[1][0], y: result.location[1][1] },\n bottomRight: { x: result.location[2][0], y: result.location[2][1] },\n bottomLeft: { x: result.location[3][0], y: result.location[3][1] },\n },\n compositeFlag: result.compositeFlag,\n isGs1DataCarrier: result.isGs1DataCarrier,\n encodingArray: result.encodingArray,\n };\n }\n\n /**\n * Barcode symbology type.\n */\n export enum Symbology {\n AZTEC = \"aztec\",\n CODABAR = \"codabar\",\n CODE11 = \"code11\",\n CODE128 = \"code128\",\n CODE25 = \"code25\",\n CODE32 = \"code32\",\n CODE39 = \"code39\",\n CODE93 = \"code93\",\n DATA_MATRIX = \"data-matrix\",\n DOTCODE = \"dotcode\",\n EAN13 = \"ean13\",\n EAN8 = \"ean8\",\n FIVE_DIGIT_ADD_ON = \"five-digit-add-on\",\n GS1_DATABAR = \"databar\",\n GS1_DATABAR_EXPANDED = \"databar-expanded\",\n GS1_DATABAR_LIMITED = \"databar-limited\",\n IATA_2_OF_5 = \"iata2of5\",\n INTERLEAVED_2_OF_5 = \"itf\",\n KIX = \"kix\",\n LAPA4SC = \"lapa4sc\",\n MAXICODE = \"maxicode\",\n MICRO_PDF417 = \"micropdf417\",\n MICRO_QR = \"microqr\",\n MSI_PLESSEY = \"msi-plessey\",\n PDF417 = \"pdf417\",\n QR = \"qr\",\n RM4SCC = \"rm4scc\",\n TWO_DIGIT_ADD_ON = \"two-digit-add-on\",\n UPCA = \"upca\",\n UPCE = \"upce\",\n }\n\n /**\n * Flags to hint that two codes form a composite code.\n */\n export enum CompositeFlag {\n /**\n * Code is not part of a composite code.\n */\n NONE = 0x0,\n /**\n * Code could be part of a composite code. This flag is set by linear (1D) symbologies that have\n * no composite flag support but can be part of a composite code like the EAN/UPC symbology family.\n */\n UNKNOWN = 0x1,\n /**\n * Code is the linear component of a composite code. This flag can be set by GS1 DataBar or GS1-128 (Code 128).\n */\n LINKED = 0x2,\n /**\n * Code is a GS1 Composite Code Type A (CC - A).This flag can be set by MicroPDF417 codes.\n */\n GS1_A = 0x4,\n /**\n * Code is a GS1 Composite Code Type B (CC-B). This flag can be set by MicroPDF417 codes.\n */\n GS1_B = 0x8,\n /**\n * Code is a GS1 Composite Code Type C (CC-C). This flag can be set by PDF417 codes.\n */\n GS1_C = 0x10,\n }\n\n // istanbul ignore next\n export namespace Symbology {\n /**\n * @hidden\n */\n // tslint:disable:no-unnecessary-qualifier\n const humanizedSymbologyNames: Map = new Map([\n [Symbology.AZTEC, \"Aztec\"],\n [Symbology.CODABAR, \"Codabar\"],\n [Symbology.CODE11, \"Code 11\"],\n [Symbology.CODE128, \"Code 128\"],\n [Symbology.CODE25, \"Code 25\"],\n [Symbology.CODE32, \"Code 32\"],\n [Symbology.CODE39, \"Code 39\"],\n [Symbology.CODE93, \"Code 93\"],\n [Symbology.DATA_MATRIX, \"Data Matrix\"],\n [Symbology.DOTCODE, \"DotCode\"],\n [Symbology.EAN13, \"EAN-13\"],\n [Symbology.EAN8, \"EAN-8\"],\n [Symbology.FIVE_DIGIT_ADD_ON, \"Five-Digit Add-On\"],\n [Symbology.GS1_DATABAR_EXPANDED, \"GS1 DataBar Expanded\"],\n [Symbology.GS1_DATABAR_LIMITED, \"GS1 DataBar Limited\"],\n [Symbology.GS1_DATABAR, \"GS1 DataBar 14\"],\n [Symbology.IATA_2_OF_5, \"IATA 2 of 5\"],\n [Symbology.INTERLEAVED_2_OF_5, \"Interleaved 2 of 5\"],\n [Symbology.KIX, \"KIX\"],\n [Symbology.LAPA4SC, \"LAPA4SC\"],\n [Symbology.MAXICODE, \"MaxiCode\"],\n [Symbology.MICRO_PDF417, \"MicroPDF417\"],\n [Symbology.MICRO_QR, \"Micro QR\"],\n [Symbology.MSI_PLESSEY, \"MSI-Plessey\"],\n [Symbology.PDF417, \"PDF417\"],\n [Symbology.QR, \"QR\"],\n [Symbology.RM4SCC, \"RM4SCC\"],\n [Symbology.TWO_DIGIT_ADD_ON, \"Two-Digit Add-On\"],\n [Symbology.UPCA, \"UPC-A\"],\n [Symbology.UPCE, \"UPC-E\"],\n ]);\n\n /**\n * @hidden\n */\n const jsonSymbologyNames: Map = new Map([\n [Symbology.AZTEC, \"aztec\"],\n [Symbology.CODABAR, \"codabar\"],\n [Symbology.CODE11, \"code11\"],\n [Symbology.CODE128, \"code128\"],\n [Symbology.CODE25, \"code25\"],\n [Symbology.CODE32, \"code32\"],\n [Symbology.CODE39, \"code39\"],\n [Symbology.CODE93, \"code93\"],\n [Symbology.DATA_MATRIX, \"data-matrix\"],\n [Symbology.DOTCODE, \"dotcode\"],\n [Symbology.EAN13, \"ean13\"],\n [Symbology.EAN8, \"ean8\"],\n [Symbology.FIVE_DIGIT_ADD_ON, \"five-digit-add-on\"],\n [Symbology.GS1_DATABAR_EXPANDED, \"databar-expanded\"],\n [Symbology.GS1_DATABAR_LIMITED, \"databar-limited\"],\n [Symbology.GS1_DATABAR, \"databar\"],\n [Symbology.IATA_2_OF_5, \"iata2of5\"],\n [Symbology.INTERLEAVED_2_OF_5, \"itf\"],\n [Symbology.KIX, \"kix\"],\n [Symbology.LAPA4SC, \"lapa4sc\"],\n [Symbology.MAXICODE, \"maxicode\"],\n [Symbology.MICRO_PDF417, \"micropdf417\"],\n [Symbology.MICRO_QR, \"microqr\"],\n [Symbology.MSI_PLESSEY, \"msi-plessey\"],\n [Symbology.PDF417, \"pdf417\"],\n [Symbology.QR, \"qr\"],\n [Symbology.RM4SCC, \"rm4scc\"],\n [Symbology.TWO_DIGIT_ADD_ON, \"two-digit-add-on\"],\n [Symbology.UPCA, \"upca\"],\n [Symbology.UPCE, \"upce\"],\n ]);\n // tslint:enable:no-unnecessary-qualifier\n\n /**\n * Get the humanized name of a symbology.\n *\n * @param symbology The symbology for which to retrieve the name.\n * @returns The humanized name of the symbology.\n */\n export function toHumanizedName(symbology: Symbology): string {\n return humanizedSymbologyNames.get(symbology.toLowerCase()) ?? \"Unknown\";\n }\n\n /**\n * Get the JSON key name of a symbology, used for JSON-formatted ScanSettings and Scandit Engine library.\n *\n * @param symbology The symbology for which to retrieve the name.\n * @returns The json key name of the symbology.\n */\n export function toJSONName(symbology: Symbology): string {\n return jsonSymbologyNames.get(symbology.toLowerCase()) ?? \"unknown\";\n }\n }\n}\n","/**\n * An object containing details about the support level of the used OS/browser combination regarding\n * the features needed by this library.\n */\nexport interface BrowserCompatibility {\n /**\n * Whether the full set of features required to have continuous camera video streaming are supported.\n */\n readonly fullSupport: boolean;\n /**\n * Whether the set of features required to use a [[Scanner]] to perform scans (Single Image Mode) are supported.\n */\n readonly scannerSupport: boolean;\n /**\n * The list of features that are missing.\n */\n readonly missingFeatures: BrowserCompatibility.Feature[];\n}\n\nexport namespace BrowserCompatibility {\n /**\n * Browser feature.\n */\n export enum Feature {\n /**\n * [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) -\n * [current support?](https://caniuse.com/#feat=blobbuilder)\n */\n BLOB = \"blob\",\n /**\n * [MediaDevices/getUserMedia](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) -\n * [current support?](https://caniuse.com/#feat=stream)\n */\n MEDIA_DEVICES = \"mediaDevices\",\n /**\n * [OffscreenCanvas](https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas) -\n * [current support?](https://caniuse.com/#feat=offscreencanvas)\n */\n OFFSCREEN_CANVAS = \"offscreenCanvas\",\n /**\n * [URL/createObjectURL](https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL) -\n * [current support?](https://caniuse.com/#feat=bloburls)\n */\n URL_OBJECT = \"urlObject\",\n /**\n * [Web Workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) -\n * [current support?](https://caniuse.com/#feat=webworkers)\n */\n WEB_WORKERS = \"webWorkers\",\n /**\n * [WebAssembly](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/WebAssembly) -\n * [current support?](https://caniuse.com/#feat=wasm)\n */\n WEB_ASSEMBLY = \"webAssembly\",\n /**\n * WebAssembly without memory corruption (specific iOS version 11.2.2/11.2.5/11.2.6 bug)\n */\n WEB_ASSEMBLY_ERROR_FREE = \"webAssemblyErrorFree\",\n /**\n * [WebGL](https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API) -\n * [current support?](https://caniuse.com/#feat=webgl)\n */\n WEBGL = \"webgl\",\n }\n}\n","import Cookies from \"js-cookie\";\nimport { UAParser } from \"ua-parser-js\";\nexport { UAParser };\n\nimport { BrowserCompatibility } from \"./browserCompatibility\";\n\nexport namespace BrowserHelper {\n /**\n * @hidden\n */\n interface Browser {\n name?: string;\n version?: string;\n }\n\n /**\n * @hidden\n */\n interface CPU {\n architecture?: string;\n }\n\n /**\n * @hidden\n */\n interface Device {\n model?: string;\n vendor?: string;\n // tslint:disable-next-line:no-reserved-keywords\n type?: string;\n }\n\n /**\n * @hidden\n */\n interface Engine {\n name?: string;\n version?: string;\n }\n\n /**\n * @hidden\n */\n interface OS {\n name?: string;\n version?: string;\n }\n\n /**\n * @hidden\n */\n export const userAgentInfo: {\n getBrowser(): Browser;\n getOS(): OS;\n getEngine(): Engine;\n getDevice(): Device;\n getCPU(): CPU;\n getUA(): string;\n setUA(uastring: string): void;\n } = new UAParser(navigator.userAgent);\n\n /**\n * @hidden\n */\n export const canvas: HTMLCanvasElement = document.createElement(\"canvas\");\n\n /**\n * @returns The built [[BrowserCompatibility]] object representing the current OS/Browser's support for features.\n */\n export function checkBrowserCompatibility(): BrowserCompatibility {\n function objectHasPropertyWithType(object: object, propertyNames: string[], propertyType: string): boolean {\n // tslint:disable-next-line:no-any\n const objectProperty: any = (object)[propertyNames[0]];\n if (objectProperty == null) {\n return false;\n }\n if (propertyNames.length === 1) {\n return typeof objectProperty === propertyType;\n } else {\n return (\n (typeof objectProperty === \"function\" || typeof objectProperty === \"object\") &&\n objectHasPropertyWithType(objectProperty, propertyNames.slice(1), propertyType)\n );\n }\n }\n\n function isBrokenWebAssemblyOS(os: OS): boolean {\n return os.name === \"iOS\" && os.version != null && [\"11.2.2\", \"11.2.5\", \"11.2.6\"].includes(os.version);\n }\n\n let fullSupport: boolean = true;\n let scannerSupport: boolean = true;\n const missingFeatures: BrowserCompatibility.Feature[] = [];\n\n if (\n !objectHasPropertyWithType(navigator, [\"mediaDevices\", \"getUserMedia\"], \"function\") &&\n !objectHasPropertyWithType(navigator, [\"enumerateDevices\"], \"function\") &&\n !objectHasPropertyWithType(window, [\"MediaStreamTrack\", \"getSources\"], \"function\")\n ) {\n missingFeatures.push(BrowserCompatibility.Feature.MEDIA_DEVICES);\n fullSupport = false;\n }\n\n if (!objectHasPropertyWithType(window, [\"Worker\"], \"function\")) {\n missingFeatures.push(BrowserCompatibility.Feature.WEB_WORKERS);\n fullSupport = scannerSupport = false;\n }\n\n if (!objectHasPropertyWithType(window, [\"WebAssembly\"], \"object\")) {\n missingFeatures.push(BrowserCompatibility.Feature.WEB_ASSEMBLY);\n fullSupport = scannerSupport = false;\n }\n\n if (!objectHasPropertyWithType(window, [\"Blob\"], \"function\")) {\n missingFeatures.push(BrowserCompatibility.Feature.BLOB);\n fullSupport = scannerSupport = false;\n }\n\n if (!objectHasPropertyWithType(window, [\"URL\", \"createObjectURL\"], \"function\")) {\n missingFeatures.push(BrowserCompatibility.Feature.URL_OBJECT);\n fullSupport = scannerSupport = false;\n }\n\n if (!objectHasPropertyWithType(window, [\"OffscreenCanvas\"], \"function\")) {\n missingFeatures.push(BrowserCompatibility.Feature.OFFSCREEN_CANVAS);\n }\n\n try {\n if (\n !objectHasPropertyWithType(window, [\"WebGLRenderingContext\"], \"function\") ||\n (canvas.getContext(\"webgl\") == null && canvas.getContext(\"experimental-webgl\") == null)\n ) {\n throw new Error();\n }\n } catch {\n missingFeatures.push(BrowserCompatibility.Feature.WEBGL);\n }\n\n const userAgentOS: OS = userAgentInfo.getOS();\n if (isBrokenWebAssemblyOS(userAgentOS)) {\n missingFeatures.push(BrowserCompatibility.Feature.WEB_ASSEMBLY_ERROR_FREE);\n fullSupport = scannerSupport = false;\n }\n\n return {\n fullSupport,\n scannerSupport,\n missingFeatures,\n };\n }\n\n /**\n * @hidden\n *\n * Get a device id for the current browser.\n *\n * When available it's retrieved from localStorage, as fallback from cookies (used by older library versions),\n * when not available it's randomly generated and stored in localStorage to be retrieved by later calls and returned.\n *\n * @returns The device id for the current browser.\n */\n export function getDeviceId(): string {\n const devideIdKey: string = \"scandit-device-id\";\n let deviceId: string | undefined | null = localStorage.getItem(devideIdKey);\n if (deviceId != null && deviceId !== \"\") {\n return deviceId;\n }\n\n deviceId = Cookies.get(devideIdKey);\n if (deviceId != null && deviceId !== \"\") {\n localStorage.setItem(devideIdKey, deviceId);\n\n return deviceId;\n }\n\n const randomDeviceIdBytes: Uint8Array = new Uint8Array(20);\n crypto.getRandomValues(randomDeviceIdBytes);\n deviceId = Array.from(randomDeviceIdBytes)\n .map((byteNumber) => {\n const byteHex: string = byteNumber.toString(16);\n\n return byteHex.length === 1 ? /* istanbul ignore next */ `0${byteHex}` : byteHex;\n })\n .join(\"\");\n\n localStorage.setItem(devideIdKey, deviceId);\n\n return deviceId;\n }\n\n /**\n * @hidden\n *\n * Check if a given object is a valid HTMLElement\n *\n * @param object The object to check.\n * @returns Whether the given object is a valid HTMLElement.\n */\n // tslint:disable-next-line:no-any\n export function isValidHTMLElement(object: any): boolean {\n return (\n object instanceof HTMLElement ||\n (object != null && typeof object === \"object\" && typeof object.tagName === \"string\")\n );\n }\n}\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/*!\n * UAParser.js v0.7.21\n * Lightweight JavaScript-based User-Agent string parser\n * https://github.com/faisalman/ua-parser-js\n *\n * Copyright © 2012-2019 Faisal Salman \n * Licensed under MIT License\n */\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '0.7.21',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major', // deprecated\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded';\n\n\n ///////////\n // Helper\n //////////\n\n\n var util = {\n extend : function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n has : function (str1, str2) {\n if (typeof str1 === \"string\") {\n return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;\n } else {\n return false;\n }\n },\n lowerize : function (str) {\n return str.toLowerCase();\n },\n major : function (version) {\n return typeof(version) === STR_TYPE ? version.replace(/[^\\d\\.]/g,'').split(\".\")[0] : undefined;\n },\n trim : function (str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n };\n\n\n ///////////////\n // Map helper\n //////////////\n\n\n var mapper = {\n\n rgx : function (ua, arrays) {\n\n var i = 0, j, k, p, q, matches, match;\n\n // loop through all regexes maps\n while (i < arrays.length && !matches) {\n\n var regex = arrays[i], // even sequence (0,2,4,..)\n props = arrays[i + 1]; // odd sequence (1,3,5,..)\n j = k = 0;\n\n // try matching uastring with regexes\n while (j < regex.length && !matches) {\n\n matches = regex[j++].exec(ua);\n\n if (!!matches) {\n for (p = 0; p < props.length; p++) {\n match = matches[++k];\n q = props[p];\n // check if given property is actually array\n if (typeof q === OBJ_TYPE && q.length > 0) {\n if (q.length == 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length == 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length == 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n str : function (str, map) {\n\n for (var i in map) {\n // check if array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (util.has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (util.has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n }\n };\n\n\n ///////////////\n // String map\n //////////////\n\n\n var maps = {\n\n browser : {\n oldsafari : {\n version : {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n }\n }\n },\n\n device : {\n amazon : {\n model : {\n 'Fire Phone' : ['SD', 'KF']\n }\n },\n sprint : {\n model : {\n 'Evo Shift 4G' : '7373KT'\n },\n vendor : {\n 'HTC' : 'APA',\n 'Sprint' : 'Sprint'\n }\n }\n },\n\n os : {\n windows : {\n version : {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n }\n }\n }\n };\n\n\n //////////////\n // Regex map\n /////////////\n\n\n var regexes = {\n\n browser : [[\n\n // Presto based\n /(opera\\smini)\\/([\\w\\.-]+)/i, // Opera Mini\n /(opera\\s[mobiletab]+).+version\\/([\\w\\.-]+)/i, // Opera Mobi/Tablet\n /(opera).+version\\/([\\w\\.]+)/i, // Opera > 9.80\n /(opera)[\\/\\s]+([\\w\\.]+)/i // Opera < 9.80\n ], [NAME, VERSION], [\n\n /(opios)[\\/\\s]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [[NAME, 'Opera Mini'], VERSION], [\n\n /\\s(opr)\\/([\\w\\.]+)/i // Opera Webkit\n ], [[NAME, 'Opera'], VERSION], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/\\s]?([\\w\\.]*)/i,\n // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant\\s|iemobile|slim)(?:browser)?[\\/\\s]?([\\w\\.]*)/i,\n // Avant/IEMobile/SlimBrowser\n /(bidubrowser|baidubrowser)[\\/\\s]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie)\\s([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based\n /(rekonq)\\/([\\w\\.]*)/i, // Rekonq\n /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\\/([\\w\\.-]+)/i\n // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n ], [NAME, VERSION], [\n\n /(konqueror)\\/([\\w\\.]+)/i // Konqueror\n ], [[NAME, 'Konqueror'], VERSION], [\n\n /(trident).+rv[:\\s]([\\w\\.]+).+like\\sgecko/i // IE11\n ], [[NAME, 'IE'], VERSION], [\n\n /(edge|edgios|edga|edg)\\/((\\d+)?[\\w\\.]+)/i // Microsoft Edge\n ], [[NAME, 'Edge'], VERSION], [\n\n /(yabrowser)\\/([\\w\\.]+)/i // Yandex\n ], [[NAME, 'Yandex'], VERSION], [\n\n /(Avast)\\/([\\w\\.]+)/i // Avast Secure Browser\n ], [[NAME, 'Avast Secure Browser'], VERSION], [\n\n /(AVG)\\/([\\w\\.]+)/i // AVG Secure Browser\n ], [[NAME, 'AVG Secure Browser'], VERSION], [\n\n /(puffin)\\/([\\w\\.]+)/i // Puffin\n ], [[NAME, 'Puffin'], VERSION], [\n\n /(focus)\\/([\\w\\.]+)/i // Firefox Focus\n ], [[NAME, 'Firefox Focus'], VERSION], [\n\n /(opt)\\/([\\w\\.]+)/i // Opera Touch\n ], [[NAME, 'Opera Touch'], VERSION], [\n\n /((?:[\\s\\/])uc?\\s?browser|(?:juc.+)ucweb)[\\/\\s]?([\\w\\.]+)/i // UCBrowser\n ], [[NAME, 'UCBrowser'], VERSION], [\n\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n\n /(windowswechat qbcore)\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [[NAME, 'WeChat(Win) Desktop'], VERSION], [\n\n /(micromessenger)\\/([\\w\\.]+)/i // WeChat\n ], [[NAME, 'WeChat'], VERSION], [\n\n /(brave)\\/([\\w\\.]+)/i // Brave browser\n ], [[NAME, 'Brave'], VERSION], [\n\n /(qqbrowserlite)\\/([\\w\\.]+)/i // QQBrowserLite\n ], [NAME, VERSION], [\n\n /(QQ)\\/([\\d\\.]+)/i // QQ, aka ShouQ\n ], [NAME, VERSION], [\n\n /m?(qqbrowser)[\\/\\s]?([\\w\\.]+)/i // QQBrowser\n ], [NAME, VERSION], [\n\n /(baiduboxapp)[\\/\\s]?([\\w\\.]+)/i // Baidu App\n ], [NAME, VERSION], [\n\n /(2345Explorer)[\\/\\s]?([\\w\\.]+)/i // 2345 Browser\n ], [NAME, VERSION], [\n\n /(MetaSr)[\\/\\s]?([\\w\\.]+)/i // SouGouBrowser\n ], [NAME], [\n\n /(LBBROWSER)/i // LieBao Browser\n ], [NAME], [\n\n /xiaomi\\/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI Browser']], [\n\n /;fbav\\/([\\w\\.]+);/i // Facebook App for iOS & Android\n ], [VERSION, [NAME, 'Facebook']], [\n\n /safari\\s(line)\\/([\\w\\.]+)/i, // Line App for iOS\n /android.+(line)\\/([\\w\\.]+)\\/iab/i // Line App for Android\n ], [NAME, VERSION], [\n\n /headlesschrome(?:\\/([\\w\\.]+)|\\s)/i // Chrome Headless\n ], [VERSION, [NAME, 'Chrome Headless']], [\n\n /\\swv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, /(.+)/, '$1 WebView'], VERSION], [\n\n /((?:oculus|samsung)browser)\\/([\\w\\.]+)/i\n ], [[NAME, /(.+(?:g|us))(.+)/, '$1 $2'], VERSION], [ // Oculus / Samsung Browser\n\n /android.+version\\/([\\w\\.]+)\\s+(?:mobile\\s?safari|safari)*/i // Android Browser\n ], [VERSION, [NAME, 'Android Browser']], [\n\n /(sailfishbrowser)\\/([\\w\\.]+)/i // Sailfish Browser\n ], [[NAME, 'Sailfish Browser'], VERSION], [\n\n /(chrome|omniweb|arora|[tizenoka]{5}\\s?browser)\\/v?([\\w\\.]+)/i\n // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /(dolfin)\\/([\\w\\.]+)/i // Dolphin\n ], [[NAME, 'Dolphin'], VERSION], [\n\n /(qihu|qhbrowser|qihoobrowser|360browser)/i // 360\n ], [[NAME, '360 Browser']], [\n\n /((?:android.+)crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [[NAME, 'Chrome'], VERSION], [\n\n /(coast)\\/([\\w\\.]+)/i // Opera Coast\n ], [[NAME, 'Opera Coast'], VERSION], [\n\n /fxios\\/([\\w\\.-]+)/i // Firefox for iOS\n ], [VERSION, [NAME, 'Firefox']], [\n\n /version\\/([\\w\\.]+).+?mobile\\/\\w+\\s(safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n\n /version\\/([\\w\\.]+).+?(mobile\\s?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n\n /webkit.+?(gsa)\\/([\\w\\.]+).+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Google Search Appliance on iOS\n ], [[NAME, 'GSA'], VERSION], [\n\n /webkit.+?(mobile\\s?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape)\\/([\\w\\.-]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo\\sbrowser|minimo|conkeror)[\\/\\s]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror\n /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([\\w\\.-]+)$/i,\n\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(mozilla)\\/([\\w\\.]+).+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\\/\\s]?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir\n /(links)\\s\\(([\\w\\.]+)/i, // Links\n /(gobrowser)\\/?([\\w\\.]*)/i, // GoBrowser\n /(ice\\s?browser)\\/v?([\\w\\._]+)/i, // ICE Browser\n /(mosaic)[\\/\\s]([\\w\\.]+)/i // Mosaic\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\\)]/i // AMD64\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, util.lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32\n ], [[ARCHITECTURE, 'ia32']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows\\s(ce|mobile);\\sppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?:\\smac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, '', util.lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|arm(?:64|(?=v\\d+[;l]))|(?=atmel\\s)avr|(?:irix|mips|sparc)(?:64)?(?=;)|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, util.lowerize]]\n ],\n\n device : [[\n\n /\\((ipad|playbook);[\\w\\s\\),;-]+(rim|apple)/i // iPad/PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/ // iPad\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [\n\n /(apple\\s{0,1}tv)/i // Apple TV\n ], [[MODEL, 'Apple TV'], [VENDOR, 'Apple'], [TYPE, SMARTTV]], [\n\n /(archos)\\s(gamepad2?)/i, // Archos\n /(hp).+(touchpad)/i, // HP TouchPad\n /(hp).+(tablet)/i, // HP Tablet\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /\\s(nook)[\\w\\s]+build\\/(\\w+)/i, // Nook\n /(dell)\\s(strea[kpr\\s\\d]*[\\dko])/i // Dell Streak\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(kf[A-z]+)\\sbuild\\/.+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n /(sd|kf)[0349hijorstuw]+\\sbuild\\/.+silk\\//i // Fire Phone\n ], [[MODEL, mapper.str, maps.device.amazon.model], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [\n /android.+aft([bms])\\sbuild/i // Fire TV\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [\n\n /\\((ip[honed|\\s\\w*]+);.+(apple)/i // iPod/iPhone\n ], [MODEL, VENDOR, [TYPE, MOBILE]], [\n /\\((ip[honed|\\s\\w*]+);/i // iPod/iPhone\n ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [\n\n /(blackberry)[\\s-]?(\\w+)/i, // BlackBerry\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\\s_-]?([\\w-]*)/i,\n // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp)\\s([\\w\\s]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i // Asus\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /\\(bb10;\\s(\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [\n // Asus Tablets\n /android.+(transfo[prime\\s]{4,10}\\s\\w+|eeepc|slider\\s\\w+|nexus 7|padfone|p00c)/i\n ], [MODEL, [VENDOR, 'Asus'], [TYPE, TABLET]], [\n\n /(sony)\\s(tablet\\s[ps])\\sbuild\\//i, // Sony\n /(sony)?(?:sgp.+)\\sbuild\\//i\n ], [[VENDOR, 'Sony'], [MODEL, 'Xperia Tablet'], [TYPE, TABLET]], [\n /android.+\\s([c-g]\\d{4}|so[-l]\\w+)(?=\\sbuild\\/|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [\n\n /\\s(ouya)\\s/i, // Ouya\n /(nintendo)\\s([wids3u]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n\n /android.+;\\s(shield)\\sbuild/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n\n /(playstation\\s[34portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [\n\n /(sprint\\s(\\w+))/i // Sprint Phones\n ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [\n\n /(htc)[;_\\s-]+([\\w\\s]+(?=\\)|\\sbuild)|\\w+)/i, // HTC\n /(zte)-(\\w*)/i, // ZTE\n /(alcatel|geeksphone|nexian|panasonic|(?=;\\s)sony)[_\\s-]?([\\w-]*)/i\n // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n /(nexus\\s9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n\n /d\\/huawei([\\w\\s-]+)[;\\)]/i,\n /(nexus\\s6p|vog-l29|ane-lx1|eml-l29)/i // Huawei\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [\n\n /android.+(bah2?-a?[lw]\\d{2})/i // Huawei MediaPad\n ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [\n\n /(microsoft);\\s(lumia[\\s\\w]+)/i // Microsoft Lumia\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /[\\s\\(;](xbox(?:\\sone)?)[\\s\\);]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\s(milestone|droid(?:[2-4x]|\\s(?:bionic|x2|pro|razr))?:?(\\s4g)?)[\\w\\s]+build\\//i,\n /mot[\\s-]?(\\w*)/i,\n /(XT\\d{3,4}) build\\//i,\n /(nexus\\s6)/i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [\n /android.+\\s(mz60\\d|xoom[\\s2]{0,2})\\sbuild\\//i\n ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [\n\n /hbbtv\\/\\d+\\.\\d+\\.\\d+\\s+\\([\\w\\s]*;\\s*(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, util.trim], [MODEL, util.trim], [TYPE, SMARTTV]], [\n\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [\n\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n\n /android.+((sch-i[89]0\\d|shw-m380s|gt-p\\d{4}|gt-n\\d+|sgh-t8[56]9|nexus 10))/i,\n /((SM-T\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung\n /smart-tv.+(samsung)/i\n ], [VENDOR, [TYPE, SMARTTV], MODEL], [\n /((s[cgp]h-\\w+|gt-\\w+|galaxy\\snexus|sm-\\w[\\w\\d]+))/i,\n /(sam[sung]*)[\\s-]*(\\w+-?[\\w-]*)/i,\n /sec-((sgh\\w+))/i\n ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [\n\n /sie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n\n /(maemo|nokia).*(n900|lumia\\s\\d+)/i, // Nokia\n /(nokia)[\\s_-]?([\\w-]*)/i\n ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [\n\n /android[x\\d\\.\\s;]+\\s([ab][1-7]\\-?[0178a]\\d\\d?)/i // Acer\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n /android.+([vl]k\\-?\\d{3})\\s+build/i // LG Tablet\n ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [\n /android\\s3\\.[\\s\\w;-]{10}(lg?)-([06cv9]{3,4})/i // LG Tablet\n ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [\n /(lg) netcast\\.tv/i // LG SmartTV\n ], [VENDOR, MODEL, [TYPE, SMARTTV]], [\n /(nexus\\s[45])/i, // LG\n /lg[e;\\s\\/-]+(\\w*)/i,\n /android.+lg(\\-?[\\d\\w]+)\\s+build/i\n ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [\n\n /(lenovo)\\s?(s(?:5000|6000)(?:[\\w-]+)|tab(?:[\\s\\w]+))/i // Lenovo tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n /android.+(ideatab[a-z0-9\\-\\s]+)/i // Lenovo\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n /(lenovo)[_\\s-]?([\\w-]+)/i\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /linux;.+((jolla));/i // Jolla\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /((pebble))app\\/[\\d\\.]+\\s/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n\n /android.+;\\s(oppo)\\s?([\\w\\s]+)\\sbuild/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /crkey/i // Google Chromecast\n ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [\n\n /android.+;\\s(glass)\\s\\d/i // Google Glass\n ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [\n\n /android.+;\\s(pixel c)[\\s)]/i // Google Pixel C\n ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [\n\n /android.+;\\s(pixel( [23])?( xl)?)[\\s)]/i // Google Pixel\n ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [\n\n /android.+;\\s(\\w+)\\s+build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /android.+(hm[\\s\\-_]*note?[\\s_]*(?:\\d\\w)?)\\s+build/i, // Xiaomi Hongmi\n /android.+(mi[\\s\\-_]*(?:a\\d|one|one[\\s_]plus|note lte)?[\\s_]*(?:\\d?\\w?)[\\s_]*(?:plus)?)\\s+build/i, \n // Xiaomi Mi\n /android.+(redmi[\\s\\-_]*(?:note)?(?:[\\s_]*[\\w\\s]+))\\s+build/i // Redmi Phones\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [\n /android.+(mi[\\s\\-_]*(?:pad)(?:[\\s_]*[\\w\\s]+))\\s+build/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [\n /android.+;\\s(m[1-5]\\snote)\\sbuild/i // Meizu\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n /(mz)-([\\w-]{2,})/i\n ], [[VENDOR, 'Meizu'], MODEL, [TYPE, MOBILE]], [\n\n /android.+a000(1)\\s+build/i, // OnePlus\n /android.+oneplus\\s(a\\d{4})[\\s)]/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(RCT[\\d\\w]+)\\s+build/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n\n /android.+[;\\/\\s]+(Venue[\\d\\s]{2,7})\\s+build/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Q[T|M][\\d\\w]+)\\s+build/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(Barnes[&\\s]+Noble\\s+|BN[RT])(V?.*)\\s+build/i // Barnes & Noble Tablet\n ], [[VENDOR, 'Barnes & Noble'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s+(TM\\d{3}.*\\b)\\s+build/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n\n /android.+;\\s(k88)\\sbuild/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(gen\\d{3})\\s+build.*49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n\n /android.+[;\\/]\\s*(zur\\d{3})\\s+build/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((Zeki)?TB.*\\b)\\s+build/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n\n /(android).+[;\\/]\\s+([YR]\\d{2})\\s+build/i,\n /android.+[;\\/]\\s+(Dragon[\\-\\s]+Touch\\s+|DT)(\\w{5})\\sbuild/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(NS-?\\w{0,9})\\sbuild/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*((NX|Next)-?\\w{0,9})\\s+build/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Xtreme\\_)?(V(1[045]|2[015]|30|40|60|7[05]|90))\\s+build/i\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones\n\n /android.+[;\\/]\\s*(LVTEL\\-)?(V1[12])\\s+build/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n\n /android.+;\\s(PH-1)\\s/i\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1\n\n /android.+[;\\/]\\s*(V(100MD|700NA|7011|917G).*\\b)\\s+build/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Le[\\s\\-]+Pan)[\\s\\-]+(\\w{1,9})\\s+build/i // Le Pan Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trio[\\s\\-]*.*)\\s+build/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*(Trinity)[\\-\\s]*(T\\d{3})\\s+build/i // Trinity Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /android.+[;\\/]\\s*TU_(1491)\\s+build/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n\n /android.+(KS(.+))\\s+build/i // Amazon Kindle Tablets\n ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [\n\n /android.+(Gigaset)[\\s\\-]+(Q\\w{1,9})\\s+build/i // Gigaset Tablets\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /\\s(tablet|tab)[;\\/]/i, // Unidentifiable Tablet\n /\\s(mobile)(?:[;\\/]|\\ssafari)/i // Unidentifiable Mobile\n ], [[TYPE, util.lowerize], VENDOR, MODEL], [\n\n /[\\s\\/\\(](smart-?tv)[;\\)]/i // SmartTV\n ], [[TYPE, SMARTTV]], [\n\n /(android[\\w\\.\\s\\-]{0,9});.+build/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+\\sedge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, 'EdgeHTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, \n // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /(khtml|tasman|links)[\\/\\s]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/\\s]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9}).+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows based\n /microsoft\\s(windows)\\s(vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows)\\snt\\s6\\.2;\\s(arm)/i, // Windows RT\n /(windows\\sphone(?:\\sos)*)[\\s\\/]?([\\d\\.\\s\\w]*)/i, // Windows Phone\n /(windows\\smobile|windows)[\\s\\/]?([ntce\\d\\.\\s]+\\w)/i\n ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [\n /(win(?=3|9|n)|win\\s9x\\s)([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [\n\n // Mobile/Embedded OS\n /\\((bb)(10);/i // BlackBerry 10\n ], [[NAME, 'BlackBerry'], VERSION], [\n /(blackberry)\\w*\\/?([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/\\s]([\\w\\.]+)/i, // Tizen/KaiOS\n /(android|webos|palm\\sos|qnx|bada|rim\\stablet\\sos|meego|sailfish|contiki)[\\/\\s-]?([\\w\\.]*)/i\n // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS\n ], [NAME, VERSION], [\n /(symbian\\s?os|symbos|s60(?=;))[\\/\\s-]?([\\w\\.]*)/i // Symbian\n ], [[NAME, 'Symbian'], VERSION], [\n /\\((series40);/i // Series 40\n ], [NAME], [\n /mozilla.+\\(mobile;.+gecko.+firefox/i // Firefox OS\n ], [[NAME, 'Firefox OS'], VERSION], [\n\n // Console\n /(nintendo|playstation)\\s([wids34portablevu]+)/i, // Nintendo/Playstation\n\n // GNU/Linux based\n /(mint)[\\/\\s\\(]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[;\\s]/i, // Mageia/VectorLinux\n /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|(?=\\s)arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\\/\\s-]?(?!chrom)([\\w\\.-]*)/i,\n // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware\n // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus\n /(hurd|linux)\\s?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu)\\s?([\\w\\.]*)/i // GNU\n ], [NAME, VERSION], [\n\n /(cros)\\s[\\w]+\\s([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Solaris\n /(sunos)\\s?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n\n // BSD based\n /\\s([frentopc-]{0,4}bsd|dragonfly)\\s?([\\w\\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly\n ], [NAME, VERSION],[\n\n /(haiku)\\s(\\w+)/i // Haiku\n ], [NAME, VERSION],[\n\n /cfnetwork\\/.+darwin/i,\n /ip[honead]{2,4}(?:.*os\\s([\\w]+)\\slike\\smac|;\\sopera)/i // iOS\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n\n /(mac\\sos\\sx)\\s?([\\w\\s\\.]*)/i,\n /(macintosh|mac(?=_powerpc)\\s)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Other\n /((?:open)?solaris)[\\/\\s-]?([\\w\\.]*)/i, // Solaris\n /(aix)\\s((\\d)(?=\\.|\\)|\\s)[\\w\\.])*/i, // AIX\n /(plan\\s9|minix|beos|os\\/2|amigaos|morphos|risc\\sos|openvms|fuchsia)/i,\n // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia\n /(unix)\\s?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n\n /////////////////\n // Constructor\n ////////////////\n var UAParser = function (uastring, extensions) {\n\n if (typeof uastring === 'object') {\n extensions = uastring;\n uastring = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(uastring, extensions).getResult();\n }\n\n var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var browser = { name: undefined, version: undefined };\n mapper.rgx.call(browser, ua, rgxmap.browser);\n browser.major = util.major(browser.version); // deprecated\n return browser;\n };\n this.getCPU = function () {\n var cpu = { architecture: undefined };\n mapper.rgx.call(cpu, ua, rgxmap.cpu);\n return cpu;\n };\n this.getDevice = function () {\n var device = { vendor: undefined, model: undefined, type: undefined };\n mapper.rgx.call(device, ua, rgxmap.device);\n return device;\n };\n this.getEngine = function () {\n var engine = { name: undefined, version: undefined };\n mapper.rgx.call(engine, ua, rgxmap.engine);\n return engine;\n };\n this.getOS = function () {\n var os = { name: undefined, version: undefined };\n mapper.rgx.call(os, ua, rgxmap.os);\n return os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return ua;\n };\n this.setUA = function (uastring) {\n ua = uastring;\n return this;\n };\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = {\n NAME : NAME,\n MAJOR : MAJOR, // deprecated\n VERSION : VERSION\n };\n UAParser.CPU = {\n ARCHITECTURE : ARCHITECTURE\n };\n UAParser.DEVICE = {\n MODEL : MODEL,\n VENDOR : VENDOR,\n TYPE : TYPE,\n CONSOLE : CONSOLE,\n MOBILE : MOBILE,\n SMARTTV : SMARTTV,\n TABLET : TABLET,\n WEARABLE: WEARABLE,\n EMBEDDED: EMBEDDED\n };\n UAParser.ENGINE = {\n NAME : NAME,\n VERSION : VERSION\n };\n UAParser.OS = {\n NAME : NAME,\n VERSION : VERSION\n };\n\n ///////////\n // Export\n //////////\n\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === 'function' && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (window) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = window && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (uastring) {\n parser.setUA(uastring);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","import { Barcode, BarcodeWASMResult } from \"../barcode\";\nimport { ImageSettings } from \"../imageSettings\";\nimport { Parser } from \"../parser\";\n\n// WARNING\n// ==========\n// The \"engine\" function is extracted and executed in isolation as a WebWorker in the browser.\n// We currently cannot use too advanced language features here as the code will not get transformed/polyfilled correctly\n// by Rollup and Babel as it might refer to other externally defined variables/functions.\n// This means we also cannot import and use variables from the rest of the project.\n// The used language features should be compatible with (supported by) the browsers mentioned in the documentation.\n// See rollup.config.js and .browserslistrc.worker for more details.\n// TODO: This should be fixed...\n\n// tslint:disable:no-any\n\ndeclare const self: any;\ndeclare const importScripts: (...urls: string[]) => Promise | undefined; // Promise is used only during testing\ndeclare const postMessage: (message: any, transfer?: any[]) => void;\n// Defined here as we cannot use too recent typescript type definitions\ndeclare namespace WebAssembly {\n interface Instance {\n readonly exports: any;\n }\n\n interface WebAssemblyInstantiatedSource {\n instance: Instance;\n // tslint:disable-next-line:no-reserved-keywords\n module: {};\n }\n}\n\ntype FileSystemType = {};\n\nexport declare type Module = {\n HEAPU8: Uint8Array;\n lengthBytesUTF8(str: string): number;\n UTF8ToString(ptr: number): string;\n stringToUTF8(str: string, outPtr: number, maxBytesToWrite: number): void;\n _malloc(size: number): number;\n _free(ptr: number): void;\n _create_context(\n licenseKeyPointer: number,\n writableDataPathPointer: number,\n delayedRegistration: boolean,\n debug: boolean\n ): void;\n _scanner_settings_new_from_json(\n jsonSettingsPointer: number,\n blurryRecognitionEnabled: boolean,\n matrixScanEnabled: boolean,\n highQualitySingleFrameMode: boolean,\n gpuEnabled: boolean\n ): number;\n _scanner_image_settings_new(width: number, height: number, channels: number): void;\n _scanner_session_clear(): void;\n _can_hide_logo(): number;\n _scanner_scan(imageDataPointer: number): number;\n _parser_parse_string(\n parserType: number,\n stringDataPointer: number,\n stringDataLength: number,\n optionsPointer: number\n ): number;\n _create_blurry_table(symbologyPointer: number): void;\n canvas(): HTMLCanvasElement;\n instantiateWasm(importObject: object, successCallback: (instance: WebAssembly.Instance) => void): void;\n preRun(): Promise; // Promise is used only during testing\n onRuntimeInitialized(): void;\n callMain(): void;\n};\n\ndeclare let Module: Module;\n\ndeclare namespace FS {\n function syncfs(populate: boolean, callback: (e: any) => any): void;\n function mount(fsType: FileSystemType, opts: any, mountpoint: string): any;\n function mkdir(path: string, mode?: number): any;\n}\n\ndeclare const IDBFS: FileSystemType;\n\n// tslint:enable:no-any\n\ndeclare type ScanWorkUnit = {\n requestId: number;\n data: Uint8Array;\n highQualitySingleFrameMode: boolean;\n};\n\ndeclare type ParseWorkUnit = {\n requestId: number;\n dataFormat: Parser.DataFormat;\n dataString: string;\n options: string;\n};\n\n// tslint:disable:no-reserved-keywords\nexport declare type EngineReceivedMessageData =\n | {\n type: \"load-library\";\n deviceId: string;\n libraryLocation: string;\n path: string;\n preload: boolean;\n delayedRegistration: boolean;\n licenseKey?: string;\n deviceModelName?: string;\n }\n | {\n type: \"settings\";\n settings: string;\n blurryRecognitionAvailable: boolean;\n blurryRecognitionRequiresUpdate: boolean;\n }\n | { type: \"image-settings\"; imageSettings: ImageSettings }\n | { type: \"scan-image\"; requestId: number; data: Uint8Array; highQualitySingleFrameMode: boolean }\n | { type: \"parse-string\"; requestId: number; dataFormat: Parser.DataFormat; dataString: string; options: string }\n | { type: \"clear-session\" }\n | { type: \"create-blurry-table\"; symbology: Barcode.Symbology }\n | { type: \"reset\" };\n// tslint:enable:no-reserved-keywords\nexport declare type EngineSentMessageData =\n | [\"library-loaded\"]\n | [\"context-created\", object]\n | [\"work-result\", { requestId: number; result: { scanResult: BarcodeWASMResult[] } }, Uint8Array]\n | [\"work-error\", { requestId: number; error: { errorCode: number; errorMessage: string } }, Uint8Array]\n | [\"parse-string-result\", { requestId: number; result: string }]\n | [\"parse-string-error\", { requestId: number; error: { errorCode: number; errorMessage: string } }]\n | [\"create-blurry-table-result\", Barcode.Symbology];\n\nexport interface EngineWorker extends Worker {\n onmessage: ((this: Worker, ev: MessageEvent & { data: EngineSentMessageData }) => void) | null;\n postMessage(message: EngineReceivedMessageData, transfer: Transferable[]): void;\n postMessage(message: EngineReceivedMessageData, options?: PostMessageOptions): void;\n}\n\nexport declare type Engine = {\n loadLibrary(\n deviceId: string,\n libraryLocation: string,\n locationPath: string,\n preload: boolean,\n delayedRegistration: boolean,\n licenseKey?: string,\n deviceModelName?: string\n ): Promise;\n setSettings(settings: string, blurryRecognitionAvailable: boolean, blurryRecognitionRequiresUpdate: boolean): void;\n setImageSettings(imageSettings: ImageSettings): void;\n workOnScanQueue(): void;\n workOnParseQueue(): void;\n addScanWorkUnit(scanWorkUnit: ScanWorkUnit): void;\n addParseWorkUnit(parseWorkUnit: ParseWorkUnit): void;\n clearSession(): void;\n createBlurryTable(symbology: Barcode.Symbology): void;\n reset(): void;\n};\n\n/**\n * @returns Engine\n */\n// tslint:disable-next-line:max-func-body-length\nexport function engine(): Engine {\n const writableDataPathPreload: string = \"/scandit_sync_folder_preload\";\n const writableDataPathStandard: string = \"/scandit_sync_folder\";\n const scanQueue: ScanWorkUnit[] = [];\n const parseQueue: ParseWorkUnit[] = [];\n const gpuAccelerationAvailable: boolean = typeof self.OffscreenCanvas === \"function\";\n\n let originalFSSyncfs: typeof FS.syncfs | undefined;\n let imageBufferPointer: number | undefined;\n let imageBufferSize: number | undefined;\n let preloading: boolean;\n let writableDataPath: string;\n let delayedRegistration: boolean | undefined;\n let licenseKey: string | undefined;\n let settings: string | undefined;\n let imageSettings: ImageSettings | undefined;\n let blurryRecognitionAvailable: boolean = false;\n let workSubmitted: boolean = false;\n let loadingInProgress: boolean = false;\n let fileSystemSynced: boolean = false;\n let runtimeLoaded: boolean = false;\n let wasmReady: boolean = false;\n let scannerSettingsReady: boolean = false;\n let scannerImageSettingsReady: boolean = false;\n let contextAvailable: boolean = false;\n let fsSyncPromise: Promise = Promise.resolve();\n let fsSyncInProgress: boolean = false;\n let fsSyncScheduled: boolean = false;\n\n // Public\n\n // Promise is used only during testing\n function loadLibrary(\n deviceId: string,\n libraryLocation: string,\n locationPath: string,\n preload: boolean,\n newDelayedRegistration: boolean,\n newLicenseKey?: string,\n deviceModelName?: string\n ): Promise {\n function reportLoadSuccess(): void {\n postMessage([\"library-loaded\"]);\n createContext(newDelayedRegistration, newLicenseKey);\n }\n\n function start(): void {\n if (!wasmReady && fileSystemSynced && runtimeLoaded) {\n loadingInProgress = false;\n Module.callMain();\n wasmReady = true;\n reportLoadSuccess();\n if (!newDelayedRegistration) {\n workOnScanQueue();\n workOnParseQueue();\n }\n }\n }\n\n if (loadingInProgress) {\n return Promise.resolve();\n }\n\n if (wasmReady) {\n reportLoadSuccess();\n\n return Promise.resolve();\n }\n\n loadingInProgress = true;\n\n const { jsURI, wasmURI } = getLibraryLocationURIs(libraryLocation);\n preloading = preload;\n writableDataPath = preload ? writableDataPathPreload : writableDataPathStandard;\n self.window = self.document = self; // Fix some Emscripten quirks\n self.path = locationPath; // Used by the Scandit SDK Engine library\n self.deviceModelName = deviceModelName; // Used by the Scandit SDK Engine library\n Module = ({\n arguments: [deviceId],\n canvas: gpuAccelerationAvailable ? new self.OffscreenCanvas(32, 32) : /* istanbul ignore next */ undefined,\n instantiateWasm: (importObject: object, successCallback: (instance: WebAssembly.Instance) => void) => {\n // wasmJSVersion is globally defined inside scandit-engine-sdk.min.js\n const wasmJSVersion: string = self.wasmJSVersion ?? \"undefined\";\n // istanbul ignore if\n if (wasmJSVersion !== \"%VERSION%\") {\n console.error(\n `The Scandit SDK Engine library JS file found at ${jsURI} seems invalid: ` +\n `expected version doesn't match (received: ${wasmJSVersion}, expected: ${\"%VERSION%\"}). ` +\n `Please ensure the correct Scandit SDK Engine file (with correct version) is retrieved.`\n );\n }\n\n if (typeof self.WebAssembly.instantiateStreaming === \"function\") {\n instantiateWebAssemblyStreaming(importObject, wasmURI, successCallback);\n } else {\n instantiateWebAssembly(importObject, wasmURI, successCallback);\n }\n\n return {};\n },\n noInitialRun: true,\n preRun: () => {\n return setupFS()\n .catch((error) => {\n console.debug(\"No IndexedDB support, some data will not be persisted:\", error);\n })\n .then(() => {\n fileSystemSynced = true;\n start();\n });\n },\n onRuntimeInitialized: () => {\n runtimeLoaded = true;\n start();\n },\n });\n\n function tryImportScripts(): Promise {\n try {\n return importScripts(jsURI) ?? Promise.resolve();\n } catch (error) {\n return Promise.reject(error);\n }\n }\n\n return retryWithExponentialBackoff(tryImportScripts, 250, 4000, (error) => {\n console.warn(error);\n console.warn(`Couldn't retrieve Scandit SDK Engine library at ${jsURI}, retrying...`);\n }).catch((error) => {\n console.error(error);\n console.error(\n `Couldn't retrieve Scandit SDK Engine library at ${jsURI}, did you configure the path for it correctly?`\n );\n\n return Promise.resolve(error); // Promise is used only during testing\n });\n }\n\n // tslint:disable-next-line: bool-param-default\n function createContext(newDelayedRegistration?: boolean, newLicenseKey?: string): void {\n function completeCreateContext(): void {\n postMessage([\n \"context-created\",\n {\n hiddenScanditLogoAllowed: Module._can_hide_logo() === 1,\n },\n ]);\n }\n\n if (contextAvailable) {\n return completeCreateContext();\n }\n\n if (newDelayedRegistration != null) {\n delayedRegistration = newDelayedRegistration;\n }\n if (newLicenseKey != null) {\n licenseKey = newLicenseKey;\n }\n if (!wasmReady || delayedRegistration == null || (!workSubmitted && !delayedRegistration) || licenseKey == null) {\n return;\n }\n\n const licenseKeyLength: number = Module.lengthBytesUTF8(licenseKey) + 1;\n const licenseKeyPointer: number = Module._malloc(licenseKeyLength);\n Module.stringToUTF8(licenseKey, licenseKeyPointer, licenseKeyLength);\n const writableDataPathLength: number = Module.lengthBytesUTF8(writableDataPath) + 1;\n const writableDataPathPointer: number = Module._malloc(writableDataPathLength);\n Module.stringToUTF8(writableDataPath, writableDataPathPointer, writableDataPathLength);\n Module._create_context(licenseKeyPointer, writableDataPathPointer, delayedRegistration, false);\n Module._free(licenseKeyPointer);\n Module._free(writableDataPathPointer);\n\n contextAvailable = true;\n\n completeCreateContext();\n }\n\n function setSettings(\n newSettings: string,\n newBlurryRecognitionAvailable: boolean,\n blurryRecognitionRequiresUpdate: boolean\n ): void {\n function completeSetSettings(): void {\n settings = newSettings;\n blurryRecognitionAvailable = newBlurryRecognitionAvailable;\n applySettings();\n workOnScanQueue();\n }\n\n settings = undefined;\n scannerSettingsReady = false;\n\n if (newBlurryRecognitionAvailable && blurryRecognitionRequiresUpdate) {\n syncFS(true, false, true).then(completeSetSettings).catch(completeSetSettings);\n } else {\n completeSetSettings();\n }\n }\n\n function setImageSettings(newImageSettings: ImageSettings): void {\n imageSettings = newImageSettings;\n applyImageSettings();\n workOnScanQueue();\n }\n\n function augmentErrorInformation(error: { errorCode: number; errorMessage: string }): void {\n if (error.errorCode === 260) {\n let hostname: string;\n // istanbul ignore if\n if (location.href?.indexOf(\"blob:null/\") === 0) {\n hostname = \"localhost\";\n } else {\n hostname = new URL(\n location.pathname != null && location.pathname !== \"\" && !location.pathname.startsWith(\"/\")\n ? /* istanbul ignore next */ location.pathname\n : location.origin\n ).hostname;\n }\n // istanbul ignore next\n if (hostname[0].startsWith(\"[\") && hostname.endsWith(\"]\")) {\n hostname = hostname.slice(1, -1);\n }\n error.errorMessage = error.errorMessage.replace(\"domain name\", `domain name (${hostname})`);\n }\n\n // License Key related error codes from 6 to 25 and 260\n if (\n [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 260].includes(error.errorCode) &&\n licenseKey != null &&\n licenseKey.length > 0\n ) {\n error.errorMessage += ` License Key: ${licenseKey.slice(0, 15)}...`;\n }\n }\n\n function processScanWorkUnit(scanWorkUnit: ScanWorkUnit): void {\n if (scanWorkUnit.highQualitySingleFrameMode) {\n applySettings(true);\n }\n const resultData: string = scanImage(scanWorkUnit.data);\n if (scanWorkUnit.highQualitySingleFrameMode) {\n applySettings(false);\n }\n const result: {\n scanResult?: BarcodeWASMResult[];\n error?: { errorCode: number; errorMessage: string };\n } = JSON.parse(resultData);\n if (result.error != null) {\n augmentErrorInformation(result.error);\n postMessage(\n [\n \"work-error\",\n {\n requestId: scanWorkUnit.requestId,\n error: result.error,\n },\n scanWorkUnit.data,\n ],\n [scanWorkUnit.data.buffer]\n );\n } else {\n // istanbul ignore else\n if (result.scanResult != null) {\n postMessage(\n [\n \"work-result\",\n {\n requestId: scanWorkUnit.requestId,\n result,\n },\n scanWorkUnit.data,\n ],\n [scanWorkUnit.data.buffer]\n );\n }\n }\n }\n\n function workOnScanQueue(): void {\n if (!wasmReady || scanQueue.length === 0) {\n return;\n }\n\n // Initialization for first submitted work unit\n if (!contextAvailable) {\n createContext();\n }\n if (!scannerSettingsReady) {\n applySettings();\n }\n if (!scannerImageSettingsReady) {\n applyImageSettings();\n }\n\n if (!contextAvailable || !scannerSettingsReady || !scannerImageSettingsReady) {\n return;\n }\n\n while (scanQueue.length !== 0) {\n if (scanQueue[0].highQualitySingleFrameMode && !blurryRecognitionAvailable) {\n break;\n }\n processScanWorkUnit(scanQueue.shift());\n }\n }\n\n function processParseWorkUnit(parseWorkUnit: ParseWorkUnit): void {\n const resultData: string = parseString(parseWorkUnit.dataFormat, parseWorkUnit.dataString, parseWorkUnit.options);\n const result: { result?: string; error?: { errorCode: number; errorMessage: string } } = JSON.parse(resultData);\n if (result.error != null) {\n augmentErrorInformation(result.error);\n postMessage([\n \"parse-string-error\",\n {\n requestId: parseWorkUnit.requestId,\n error: result.error,\n },\n ]);\n } else {\n // istanbul ignore else\n if (result.result != null) {\n postMessage([\n \"parse-string-result\",\n {\n requestId: parseWorkUnit.requestId,\n result: result.result,\n },\n ]);\n }\n }\n }\n\n function workOnParseQueue(): void {\n if (!wasmReady || parseQueue.length === 0) {\n return;\n }\n\n // Initialization for first submitted work unit\n if (!contextAvailable) {\n createContext();\n if (!contextAvailable) {\n return;\n }\n }\n\n while (parseQueue.length !== 0) {\n processParseWorkUnit(parseQueue.shift());\n }\n }\n\n function addScanWorkUnit(scanWorkUnit: ScanWorkUnit): void {\n workSubmitted = true;\n scanQueue.push(scanWorkUnit);\n workOnScanQueue();\n }\n\n function addParseWorkUnit(parseWorkUnit: ParseWorkUnit): void {\n workSubmitted = true;\n parseQueue.push(parseWorkUnit);\n workOnParseQueue();\n }\n\n function clearSession(): void {\n if (scannerSettingsReady) {\n Module._scanner_session_clear();\n }\n }\n\n function createBlurryTable(symbology: Barcode.Symbology): void {\n function reportResult(): void {\n postMessage([\"create-blurry-table-result\", symbology]);\n }\n\n if (!wasmReady || !contextAvailable) {\n return;\n }\n\n const symbologyLength: number = Module.lengthBytesUTF8(symbology) + 1;\n const symbologyPointer: number = Module._malloc(symbologyLength);\n Module.stringToUTF8(symbology, symbologyPointer, symbologyLength);\n Module._create_blurry_table(symbologyPointer);\n Module._free(symbologyPointer);\n\n // FS.syncfs is called by the engine if needed: the current promise is the one to wait for\n fsSyncPromise.then(reportResult).catch(\n // istanbul ignore next\n reportResult\n );\n }\n\n function reset(): void {\n clearSession();\n scanQueue.length = 0;\n parseQueue.length = 0;\n settings = undefined;\n imageSettings = undefined;\n workSubmitted = false;\n scannerSettingsReady = false;\n scannerImageSettingsReady = false;\n }\n\n // Private\n\n function retryWithExponentialBackoff(\n handler: () => Promise,\n backoffMs: number,\n maxBackoffMs: number,\n singleTryRejectionCallback: (error: Error) => void\n ): Promise {\n return new Promise((resolve, reject) => {\n handler()\n .then(resolve)\n .catch((error) => {\n const newBackoffMs: number = backoffMs * 2;\n if (newBackoffMs > maxBackoffMs) {\n return reject(error);\n }\n singleTryRejectionCallback(error);\n setTimeout(() => {\n retryWithExponentialBackoff(handler, newBackoffMs, maxBackoffMs, singleTryRejectionCallback)\n .then(resolve)\n .catch(reject);\n }, backoffMs);\n });\n });\n }\n\n function getLibraryLocationURIs(libraryLocation: string): { jsURI: string; wasmURI: string } {\n let cdnURI: boolean = false;\n\n if (/^https?:\\/\\/([^\\/.]*\\.)*cdn.jsdelivr.net\\//.test(libraryLocation)) {\n libraryLocation = \"https://cdn.jsdelivr.net/npm/scandit-sdk@%VERSION%/build/\";\n cdnURI = true;\n } else if (/^https?:\\/\\/([^\\/.]*\\.)*unpkg.com\\//.test(libraryLocation)) {\n libraryLocation = \"https://unpkg.com/scandit-sdk@%VERSION%/build/\";\n cdnURI = true;\n }\n\n if (cdnURI) {\n return {\n jsURI: `${libraryLocation}scandit-engine-sdk.min.js`,\n wasmURI: `${libraryLocation}scandit-engine-sdk.wasm`,\n };\n }\n\n return {\n jsURI: `${libraryLocation}scandit-engine-sdk.min.js?v=%VERSION%`,\n wasmURI: `${libraryLocation}scandit-engine-sdk.wasm?v=%VERSION%`,\n };\n }\n\n function arrayBufferToHexString(arrayBuffer: ArrayBuffer): string {\n return Array.from(new Uint8Array(arrayBuffer))\n .map((byteNumber) => {\n const byteHex: string = byteNumber.toString(16);\n\n return byteHex.length === 1 ? /* istanbul ignore next */ `0${byteHex}` : byteHex;\n })\n .join(\"\");\n }\n\n function applySettings(highQualitySingleFrameMode: boolean = false): void {\n if (!wasmReady || !contextAvailable || !workSubmitted || settings == null) {\n return;\n }\n\n scannerSettingsReady = false;\n\n const parsedSettings: {\n matrixScanEnabled: boolean;\n gpuAcceleration: boolean;\n blurryRecognition: boolean;\n } = JSON.parse(settings);\n const settingsLength: number = Module.lengthBytesUTF8(settings) + 1;\n const settingsPointer: number = Module._malloc(settingsLength);\n Module.stringToUTF8(settings, settingsPointer, settingsLength);\n const resultPointer: number = Module._scanner_settings_new_from_json(\n settingsPointer,\n parsedSettings.blurryRecognition && blurryRecognitionAvailable,\n parsedSettings.matrixScanEnabled,\n highQualitySingleFrameMode,\n gpuAccelerationAvailable && parsedSettings.gpuAcceleration\n );\n Module._free(settingsPointer);\n\n const result: string = Module.UTF8ToString(resultPointer);\n if (result !== \"\") {\n scannerSettingsReady = true;\n console.debug(JSON.parse(result));\n }\n }\n\n function applyImageSettings(): void {\n if (!wasmReady || !contextAvailable || !workSubmitted || imageSettings == null) {\n return;\n }\n\n scannerImageSettingsReady = false;\n\n let channels: number;\n // TODO: For now it's not possible to use imported variables as the worker doesn't have access at runtime\n if (imageSettings.format.valueOf() === 1) {\n // RGB_8U\n channels = 3;\n } else if (imageSettings.format.valueOf() === 2) {\n // RGBA_8U\n channels = 4;\n } else {\n // GRAY_8U\n channels = 1;\n }\n Module._scanner_image_settings_new(imageSettings.width, imageSettings.height, channels);\n if (imageBufferPointer != null) {\n Module._free(imageBufferPointer);\n }\n imageBufferSize = imageSettings.width * imageSettings.height * channels;\n imageBufferPointer = Module._malloc(imageBufferSize);\n\n scannerImageSettingsReady = true;\n }\n\n function scanImage(imageData: Uint8Array): string {\n if (imageData.byteLength !== imageBufferSize) {\n // This could happen in unexpected situations and should be temporary\n return JSON.stringify({ scanResult: [] });\n }\n\n Module.HEAPU8.set(imageData, imageBufferPointer);\n\n return Module.UTF8ToString(Module._scanner_scan(imageBufferPointer));\n }\n\n function parseString(dataFormat: Parser.DataFormat, dataString: string, options: string): string {\n const dataStringLength: number = Module.lengthBytesUTF8(dataString) + 1;\n const dataStringPointer: number = Module._malloc(dataStringLength);\n Module.stringToUTF8(dataString, dataStringPointer, dataStringLength);\n const optionsLength: number = Module.lengthBytesUTF8(options) + 1;\n const optionsPointer: number = Module._malloc(optionsLength);\n Module.stringToUTF8(options, optionsPointer, optionsLength);\n const resultPointer: number = Module._parser_parse_string(\n dataFormat.valueOf(),\n dataStringPointer,\n dataStringLength - 1,\n optionsPointer\n );\n Module._free(dataStringPointer);\n Module._free(optionsPointer);\n\n return Module.UTF8ToString(resultPointer);\n }\n\n function verifiedWasmFetch(wasmURI: string, awaitFullResponse: boolean): Promise {\n function verifyResponseData(responseData: ArrayBuffer): void {\n // istanbul ignore else\n if (typeof crypto?.subtle?.digest === \"function\") {\n crypto.subtle.digest(\"SHA-256\", responseData).then((hash) => {\n const hashString: string = arrayBufferToHexString(hash);\n // istanbul ignore if\n if (hashString !== \"%ENGINE_WASM_HASH%\") {\n console.error(\n `The Scandit SDK Engine library WASM file found at ${wasmURI} seems invalid: ` +\n `expected file hash doesn't match (received: ${hashString}, ` +\n `expected: ${\"%ENGINE_WASM_HASH%\"}). ` +\n `Please ensure the correct Scandit SDK Engine file (with correct version) is retrieved.`\n );\n }\n });\n } else {\n console.warn(\n \"Insecure origin (see https://goo.gl/Y0ZkNV): \" +\n `The hash of the Scandit SDK Engine library WASM file found at ${wasmURI} could not be verified`\n );\n }\n }\n\n function tryFetch(): Promise {\n return new Promise((resolve, reject) => {\n fetch(wasmURI)\n .then((response) => {\n // istanbul ignore else\n if (response.ok) {\n response\n .clone()\n .arrayBuffer()\n .then((responseData) => {\n if (awaitFullResponse) {\n resolve(response);\n }\n verifyResponseData(responseData);\n })\n .catch(\n // istanbul ignore next\n (error) => {\n if (awaitFullResponse) {\n reject(error);\n }\n }\n );\n\n if (!awaitFullResponse) {\n resolve(response);\n }\n } else {\n reject(new Error(\"HTTP status code is not ok\"));\n }\n })\n .catch((error) => {\n reject(error);\n });\n });\n }\n\n return retryWithExponentialBackoff(tryFetch, 250, 4000, (error) => {\n console.warn(error);\n console.warn(`Couldn't retrieve Scandit SDK Engine library at ${wasmURI}, retrying...`);\n }).catch((error) => {\n console.error(error);\n console.error(\n `Couldn't retrieve/instantiate Scandit SDK Engine library at ${wasmURI}, ` +\n \"did you configure the path for it correctly?\"\n );\n\n return Promise.reject(error);\n });\n }\n\n function instantiateWebAssembly(\n importObject: object,\n wasmURI: string,\n successCallback: (instance: WebAssembly.Instance) => void\n ): void {\n verifiedWasmFetch(wasmURI, true)\n .then((response) => {\n return response.arrayBuffer();\n })\n .then((bytes) => {\n return self.WebAssembly.instantiate(bytes, importObject)\n .then((results: WebAssembly.WebAssemblyInstantiatedSource) => {\n successCallback(results.instance);\n })\n .catch((error: Error) => {\n console.error(error);\n console.error(\n `Couldn't instantiate Scandit SDK Engine library at ${wasmURI}, ` +\n \"did you configure the path for it correctly?\"\n );\n });\n })\n .catch(\n /* istanbul ignore next */ () => {\n // Ignored\n }\n );\n }\n\n function instantiateWebAssemblyStreaming(\n importObject: object,\n wasmURI: string,\n successCallback: (instance: WebAssembly.Instance) => void\n ): void {\n verifiedWasmFetch(wasmURI, false)\n .then((response) => {\n self.WebAssembly.instantiateStreaming(response, importObject)\n .then((results: WebAssembly.WebAssemblyInstantiatedSource) => {\n successCallback(results.instance);\n })\n .catch((error: Error) => {\n console.warn(error);\n console.warn(\n \"WebAssembly streaming compile failed. \" +\n \"Falling back to ArrayBuffer instantiation (this will make things slower)\"\n );\n instantiateWebAssembly(importObject, wasmURI, successCallback);\n });\n })\n .catch(\n /* istanbul ignore next */ () => {\n // Ignored\n }\n );\n }\n\n function syncFSMergePreloadedData(): Promise {\n const fsObjectStoreName: string = \"FILE_DATA\";\n let resolveCallback: (value: number | PromiseLike) => void;\n let openDbSourceRequest: IDBOpenDBRequest;\n let openDbTargetRequest: IDBOpenDBRequest;\n\n function handleError(this: IDBOpenDBRequest | IDBTransaction | IDBRequest | { error: Error }): void {\n openDbSourceRequest?.result?.close();\n openDbTargetRequest?.result?.close();\n // this.error\n resolveCallback(0);\n }\n\n function performMerge(): void {\n try {\n const objects: { value: object; primaryKey: IDBValidKey }[] = [];\n const sourceTransaction: IDBTransaction = openDbSourceRequest.result.transaction(fsObjectStoreName, \"readonly\");\n sourceTransaction.onerror = handleError;\n const cursorRequest: IDBRequest = sourceTransaction\n .objectStore(fsObjectStoreName)\n .openCursor();\n cursorRequest.onsuccess = () => {\n const cursor: IDBCursorWithValue | null = cursorRequest.result;\n if (cursor == null) {\n try {\n let mergedObjectsCount: number = 0;\n const targetTransaction: IDBTransaction = openDbTargetRequest.result.transaction(\n fsObjectStoreName,\n \"readwrite\"\n );\n const targetObjectStore: IDBObjectStore = targetTransaction.objectStore(fsObjectStoreName);\n targetTransaction.onerror = handleError;\n targetTransaction.oncomplete = () => {\n openDbSourceRequest.result.close();\n openDbTargetRequest.result.close();\n\n return resolveCallback(mergedObjectsCount);\n };\n for (const object of objects) {\n const countRequest: IDBRequest = targetObjectStore.count(object.primaryKey);\n countRequest.onsuccess = () => {\n if (countRequest.result === 0) {\n ++mergedObjectsCount;\n targetObjectStore.add(object.value, object.primaryKey);\n }\n };\n }\n } catch (error) {\n // istanbul ignore next\n handleError.call({ error });\n }\n } else {\n objects.push({\n value: cursor.value,\n primaryKey: cursor.primaryKey\n .toString()\n .replace(`${writableDataPathPreload}/`, `${writableDataPathStandard}/`),\n });\n cursor.continue();\n }\n };\n cursorRequest.onerror = handleError;\n } catch (error) {\n // istanbul ignore next\n handleError.call({ error });\n }\n }\n\n return new Promise((resolve) => {\n resolveCallback = resolve;\n openDbSourceRequest = indexedDB.open(writableDataPathPreload);\n openDbSourceRequest.onupgradeneeded = () => {\n try {\n openDbSourceRequest.result.createObjectStore(fsObjectStoreName);\n } catch (error) {\n // Ignored\n }\n };\n openDbSourceRequest.onsuccess = () => {\n if (!Array.from(openDbSourceRequest.result.objectStoreNames).includes(fsObjectStoreName)) {\n return resolve(0);\n }\n\n openDbTargetRequest = indexedDB.open(writableDataPathStandard);\n openDbTargetRequest.onupgradeneeded = () => {\n try {\n openDbTargetRequest.result.createObjectStore(fsObjectStoreName);\n } catch (error) {\n // Ignored\n }\n };\n openDbTargetRequest.onsuccess = () => {\n performMerge();\n };\n openDbTargetRequest.onblocked = openDbTargetRequest.onerror = handleError;\n };\n openDbSourceRequest.onblocked = openDbSourceRequest.onerror = handleError;\n });\n }\n\n function syncFSPromisified(populate: boolean, initialPopulation: boolean): Promise {\n // istanbul ignore if\n if (originalFSSyncfs == null) {\n return Promise.resolve();\n }\n fsSyncInProgress = true;\n\n return new Promise((resolve, reject) => {\n // Merge with data coming from preloading workers if needed\n (!preloading && populate ? syncFSMergePreloadedData() : Promise.resolve(0))\n .then((mergedObjects) => {\n if (!preloading && populate && !initialPopulation && mergedObjects === 0) {\n fsSyncInProgress = false;\n\n return resolve();\n }\n // tslint:disable-next-line: no-non-null-assertion\n originalFSSyncfs!(populate, (error) => {\n fsSyncInProgress = false;\n // istanbul ignore if\n if (error != null) {\n return reject(error);\n }\n resolve();\n });\n })\n .catch(reject);\n });\n }\n\n function syncFS(\n populate: boolean,\n initialPopulation: boolean = false,\n forceScheduling: boolean = false\n ): Promise {\n if (!fsSyncScheduled || forceScheduling) {\n if (fsSyncInProgress) {\n fsSyncScheduled = true;\n fsSyncPromise = fsSyncPromise.then(() => {\n fsSyncScheduled = false;\n\n return syncFSPromisified(populate, initialPopulation);\n });\n } else {\n fsSyncPromise = syncFSPromisified(populate, initialPopulation);\n }\n }\n\n return fsSyncPromise;\n }\n\n function setupFS(): Promise {\n // FS.syncfs is also called by the engine on file storage, ensure everything is coordinated nicely\n originalFSSyncfs = FS.syncfs;\n FS.syncfs = (populate, callback) => {\n const originalCallback: typeof callback = callback;\n callback = (error) => {\n originalCallback(error);\n };\n syncFS(populate).then(callback).catch(callback);\n };\n\n try {\n FS.mkdir(writableDataPath);\n } catch (error) {\n // istanbul ignore next\n if (error.code !== \"EEXIST\") {\n originalFSSyncfs = undefined;\n\n return Promise.reject(error);\n }\n }\n FS.mount(IDBFS, {}, writableDataPath);\n\n return syncFS(true, true);\n }\n\n return {\n loadLibrary,\n setSettings,\n setImageSettings,\n workOnScanQueue,\n workOnParseQueue,\n addScanWorkUnit,\n addParseWorkUnit,\n clearSession,\n createBlurryTable,\n reset,\n };\n}\n\n// istanbul ignore next\nexport function engineWorkerFunction(): void {\n const engineInstance: Engine = engine();\n\n onmessage = (e) => {\n // Creating context triggers license key verification and activation: delay until first frame processed\n const data: EngineReceivedMessageData = e.data;\n switch (data.type) {\n case \"load-library\":\n // tslint:disable-next-line: no-floating-promises\n engineInstance.loadLibrary(\n data.deviceId,\n data.libraryLocation,\n data.path,\n data.preload,\n data.delayedRegistration,\n data.licenseKey,\n data.deviceModelName\n );\n break;\n case \"settings\":\n engineInstance.setSettings(\n data.settings,\n data.blurryRecognitionAvailable,\n data.blurryRecognitionRequiresUpdate\n );\n break;\n case \"image-settings\":\n engineInstance.setImageSettings(data.imageSettings);\n break;\n case \"scan-image\":\n engineInstance.addScanWorkUnit({\n requestId: data.requestId,\n data: data.data,\n highQualitySingleFrameMode: data.highQualitySingleFrameMode,\n });\n break;\n case \"parse-string\":\n engineInstance.addParseWorkUnit({\n requestId: data.requestId,\n dataFormat: data.dataFormat,\n dataString: data.dataString,\n options: data.options,\n });\n break;\n case \"clear-session\":\n engineInstance.clearSession();\n break;\n case \"create-blurry-table\":\n engineInstance.createBlurryTable(data.symbology);\n break;\n case \"reset\":\n engineInstance.reset();\n break;\n default:\n break;\n }\n };\n}\n\nexport const engineWorkerBlob: Blob = new Blob(\n [`var Module;${engine.toString()}(${engineWorkerFunction.toString()})()`],\n {\n type: \"text/javascript\",\n }\n);\n","import { deviceId, scanditEngineLocation, userLicenseKey } from \"../index\";\nimport { BrowserHelper } from \"./browserHelper\";\nimport { EngineWorker, engineWorkerBlob } from \"./workers/engineWorker\";\n\nexport class EngineLoader {\n private preloadedEngineWorker?: EngineWorker;\n private preloadedEngineWorkerAvailable: boolean;\n\n constructor(preload: boolean) {\n if (preload) {\n this.preloadedEngineWorker = new Worker(URL.createObjectURL(engineWorkerBlob));\n EngineLoader.load(this.preloadedEngineWorker);\n }\n this.preloadedEngineWorkerAvailable = preload;\n }\n\n public static load(engineWorker: EngineWorker, preload: boolean = false, delayedRegistration: boolean = false): void {\n engineWorker.postMessage({\n type: \"load-library\",\n deviceId,\n libraryLocation: scanditEngineLocation,\n path: window.location.pathname,\n preload,\n delayedRegistration,\n licenseKey: userLicenseKey,\n deviceModelName: BrowserHelper.userAgentInfo.getDevice().model,\n });\n }\n\n public getEngineWorker(): EngineWorker {\n if (this.preloadedEngineWorkerAvailable && this.preloadedEngineWorker != null) {\n this.preloadedEngineWorkerAvailable = false;\n\n return this.preloadedEngineWorker;\n } else {\n return new Worker(URL.createObjectURL(engineWorkerBlob));\n }\n }\n\n public returnEngineWorker(engineWorker: EngineWorker): void {\n if (this.preloadedEngineWorker == null) {\n this.preloadedEngineWorker = engineWorker;\n }\n if (this.preloadedEngineWorker === engineWorker) {\n this.preloadedEngineWorker.onmessage = null;\n this.preloadedEngineWorker.postMessage({\n type: \"reset\",\n });\n this.preloadedEngineWorkerAvailable = true;\n } else {\n engineWorker.terminate();\n }\n }\n}\n","import { EventEmitter, ListenerFn } from \"eventemitter3\";\n\nimport { Barcode } from \"./barcode\";\nimport { BrowserHelper } from \"./browserHelper\";\nimport { EngineLoader } from \"./engineLoader\";\nimport { ScanSettings } from \"./scanSettings\";\nimport { EngineSentMessageData, EngineWorker, engineWorkerBlob } from \"./workers/engineWorker\";\n\ntype EventName = \"blurryTablesUpdate\";\n\nclass BlurryRecognitionPreloaderEventEmitter extends EventEmitter {}\n\nexport class BlurryRecognitionPreloader {\n private static readonly writableDataPath: string = \"/scandit_sync_folder_preload\";\n private static readonly fsObjectStoreName: string = \"FILE_DATA\";\n // From AndroidLowEnd\n private static readonly blurryTableFiles: string[] = [\n \"/0ae170296d3653ad308e7fa192d42fb6.scandit\", // ean13, ean8, upca, upce\n \"/1a3f08f42d1332344e3cebb5c53d9837.scandit\", // code39\n \"/32e564a3408a1555c8e1c437fee00d36.scandit\", // code39\n \"/3d90c055e483d26cc356c4a9e1b1fb37.scandit\", // code39\n \"/4243724f7555e82c259850107c30914f.scandit\", // itf\n \"/58c55d55c191d83754ff25398170a396.scandit\", // code128\n \"/59a53ea1435408779834719fa6c2cabd.scandit\", // msi-plessey\n \"/59c85c98c5674dd1072254ea6bd6ef92.scandit\", // itf\n \"/5f91576bc7215e09de2c145cccca50de.scandit\", // code93\n \"/6fa564c6d98a4cf360aead27987f9546.scandit\", // msi-plessey\n \"/76ca9155b19b81b4ea4a209c9c2154a4.scandit\", // itf\n \"/89dfec6b19b94e2bd9459388c7d2fefb.scandit\", // ean13, ean8, upca, upce\n \"/98908cb667cf64cf863486b6a7aafe8b.scandit\", // code128\n \"/cd5894907b6dd4d3ab237f353db43625.scandit\", // msi-plessey\n \"/e078b48a2b083e551246567e8cdf1b9c.scandit\", // code93\n \"/e171da0d56d58dc63b105a2f4dc5dce0.scandit\", // code128\n \"/e4d5141cd8ed672df64dca4f0bd1709e.scandit\", // ean13, ean8, upca, upce\n \"/eadf9b9d40ca243665e4ee7cbd7ba109.scandit\", // code93\n ].map((path) => {\n return `${BlurryRecognitionPreloader.writableDataPath}${path}`;\n });\n private static readonly availableBlurryRecognitionSymbologies: Set = new Set([\n Barcode.Symbology.EAN13, // Shared with UPCA\n Barcode.Symbology.EAN8,\n Barcode.Symbology.CODE39,\n Barcode.Symbology.CODE128,\n Barcode.Symbology.CODE93,\n Barcode.Symbology.INTERLEAVED_2_OF_5,\n Barcode.Symbology.MSI_PLESSEY,\n Barcode.Symbology.UPCA, // Shared with EAN13\n Barcode.Symbology.UPCE,\n ]);\n\n private readonly eventEmitter: BlurryRecognitionPreloaderEventEmitter = new EventEmitter();\n private readonly preload: boolean;\n\n private queuedBlurryRecognitionSymbologies: Barcode.Symbology[] = Array.from(\n BlurryRecognitionPreloader.availableBlurryRecognitionSymbologies.values()\n );\n private readyBlurryRecognitionSymbologies: Set = new Set();\n private engineWorker: EngineWorker;\n\n private constructor(preload: boolean) {\n this.preload = preload;\n }\n\n public static create(preload: boolean): Promise {\n if (preload) {\n // Edge <= 18 doesn't support IndexedDB in blob Web Workers so data wouldn't be persisted,\n // hence it would be useless to preload blurry recognition as data couldn't be saved.\n // Verify support for IndexedDB in blob Web Workers.\n const browserName: string | undefined = BrowserHelper.userAgentInfo.getBrowser().name;\n if (browserName != null && browserName.includes(\"Edge\")) {\n const worker: Worker = new Worker(\n URL.createObjectURL(\n new Blob([`(${BlurryRecognitionPreloader.workerIndexedDBSupportTestFunction.toString()})()`], {\n type: \"text/javascript\",\n })\n )\n );\n\n return new Promise((resolve) => {\n worker.onmessage = (message) => {\n worker.terminate();\n resolve(new BlurryRecognitionPreloader(message.data));\n };\n });\n }\n }\n\n return Promise.resolve(new BlurryRecognitionPreloader(preload));\n }\n\n // istanbul ignore next\n private static workerIndexedDBSupportTestFunction(): void {\n try {\n indexedDB.deleteDatabase(\"scandit_indexeddb_support_test\");\n // @ts-ignore\n postMessage(true);\n } catch (error) {\n // @ts-ignore\n postMessage(false);\n }\n }\n\n public prepareBlurryTables(): void {\n (this.preload ? this.checkBlurryTablesAlreadyAvailable() : Promise.resolve(true))\n .then((alreadyAvailable) => {\n if (alreadyAvailable) {\n this.queuedBlurryRecognitionSymbologies = [];\n this.readyBlurryRecognitionSymbologies = new Set(\n BlurryRecognitionPreloader.availableBlurryRecognitionSymbologies\n );\n this.eventEmitter.emit(\"blurryTablesUpdate\", new Set(this.readyBlurryRecognitionSymbologies));\n } else {\n this.engineWorker = new Worker(URL.createObjectURL(engineWorkerBlob));\n this.engineWorker.onmessage = this.engineWorkerOnMessage.bind(this);\n EngineLoader.load(this.engineWorker, true, true);\n }\n })\n .catch(console.error);\n }\n\n public on(eventName: EventName, listener: ListenerFn): void {\n // istanbul ignore else\n if (eventName === \"blurryTablesUpdate\") {\n if (\n this.readyBlurryRecognitionSymbologies.size ===\n BlurryRecognitionPreloader.availableBlurryRecognitionSymbologies.size\n ) {\n listener(this.readyBlurryRecognitionSymbologies);\n } else {\n this.eventEmitter.on(eventName, listener);\n }\n }\n }\n\n public updateBlurryRecognitionPriority(scanSettings: ScanSettings): void {\n const newQueuedBlurryRecognitionSymbologies: Barcode.Symbology[] = this.queuedBlurryRecognitionSymbologies.slice();\n this.getEnabledSymbologies(scanSettings).forEach((symbology) => {\n const symbologyQueuePosition: number = newQueuedBlurryRecognitionSymbologies.indexOf(symbology);\n if (symbologyQueuePosition !== -1) {\n newQueuedBlurryRecognitionSymbologies.unshift(\n newQueuedBlurryRecognitionSymbologies.splice(symbologyQueuePosition, 1)[0]\n );\n }\n });\n this.queuedBlurryRecognitionSymbologies = newQueuedBlurryRecognitionSymbologies;\n }\n\n public isBlurryRecognitionAvailable(scanSettings: ScanSettings): boolean {\n const enabledBlurryRecognitionSymbologies: Barcode.Symbology[] = this.getEnabledSymbologies(scanSettings);\n\n return enabledBlurryRecognitionSymbologies.every((symbology) => {\n return this.readyBlurryRecognitionSymbologies.has(symbology);\n });\n }\n\n public getEnabledSymbologies(scanSettings: ScanSettings): Barcode.Symbology[] {\n return Array.from(BlurryRecognitionPreloader.availableBlurryRecognitionSymbologies.values()).filter((symbology) => {\n return scanSettings.isSymbologyEnabled(symbology);\n });\n }\n\n private createNextBlurryTableSymbology(): void {\n let symbology: Barcode.Symbology | undefined;\n do {\n symbology = this.queuedBlurryRecognitionSymbologies.shift();\n } while (symbology != null && this.readyBlurryRecognitionSymbologies.has(symbology));\n // istanbul ignore else\n if (symbology != null) {\n this.engineWorker.postMessage({\n type: \"create-blurry-table\",\n symbology,\n });\n }\n }\n\n private checkBlurryTablesAlreadyAvailable(): Promise {\n return new Promise((resolve) => {\n const openDbRequest: IDBOpenDBRequest = indexedDB.open(BlurryRecognitionPreloader.writableDataPath);\n function handleErrorOrNew(this: IDBOpenDBRequest | IDBTransaction | IDBRequest | { error: Error }): void {\n openDbRequest?.result?.close();\n // this.error\n resolve(false);\n }\n\n openDbRequest.onupgradeneeded = () => {\n try {\n openDbRequest.result.createObjectStore(BlurryRecognitionPreloader.fsObjectStoreName);\n } catch (error) {\n // Ignored\n }\n };\n openDbRequest.onsuccess = () => {\n try {\n const transaction: IDBTransaction = openDbRequest.result.transaction(\n BlurryRecognitionPreloader.fsObjectStoreName,\n \"readonly\"\n );\n transaction.onerror = handleErrorOrNew;\n const storeKeysRequest: IDBRequest = transaction\n .objectStore(BlurryRecognitionPreloader.fsObjectStoreName)\n .getAllKeys();\n storeKeysRequest.onsuccess = () => {\n openDbRequest.result.close();\n if (\n BlurryRecognitionPreloader.blurryTableFiles.every((file) => {\n return storeKeysRequest.result.indexOf(file) !== -1;\n })\n ) {\n return resolve(true);\n } else {\n return resolve(false);\n }\n };\n storeKeysRequest.onerror = handleErrorOrNew;\n } catch (error) {\n handleErrorOrNew.call({ error });\n }\n };\n openDbRequest.onblocked = openDbRequest.onerror = handleErrorOrNew;\n });\n }\n\n private engineWorkerOnMessage(ev: MessageEvent): void {\n const data: EngineSentMessageData = ev.data;\n\n // istanbul ignore else\n if (data[1] != null) {\n switch (data[0]) {\n case \"context-created\":\n this.createNextBlurryTableSymbology();\n break;\n case \"create-blurry-table-result\":\n this.readyBlurryRecognitionSymbologies.add(data[1]);\n if (data[1] === Barcode.Symbology.EAN13) {\n this.readyBlurryRecognitionSymbologies.add(Barcode.Symbology.UPCA);\n } else if (data[1] === Barcode.Symbology.UPCA) {\n this.readyBlurryRecognitionSymbologies.add(Barcode.Symbology.EAN13);\n }\n this.eventEmitter.emit(\"blurryTablesUpdate\", new Set(this.readyBlurryRecognitionSymbologies));\n if (\n this.readyBlurryRecognitionSymbologies.size ===\n BlurryRecognitionPreloader.availableBlurryRecognitionSymbologies.size\n ) {\n this.engineWorker.terminate();\n } else {\n this.createNextBlurryTableSymbology();\n }\n break;\n // istanbul ignore next\n default:\n break;\n }\n }\n }\n}\n","function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nmodule.exports = _isNativeFunction;","var _Reflect$construct = require(\"../core-js/reflect/construct\");\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !_Reflect$construct) return false;\n if (_Reflect$construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(_Reflect$construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports = _isNativeReflectConstruct;","var _Reflect$construct = require(\"../core-js/reflect/construct\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct\");\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = _Reflect$construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;","export class CustomError extends Error {\n // istanbul ignore next\n constructor({\n name = \"\",\n message = \"\",\n }: {\n name?: string;\n message?: string;\n } = {}) {\n super(message);\n Object.setPrototypeOf(this, CustomError.prototype);\n this.name = name;\n }\n}\n","var _Object$create = require(\"../core-js/object/create\");\n\nvar _Map = require(\"../core-js/map\");\n\nvar getPrototypeOf = require(\"./getPrototypeOf\");\n\nvar setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeFunction = require(\"./isNativeFunction\");\n\nvar construct = require(\"./construct\");\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof _Map === \"function\" ? new _Map() : undefined;\n\n module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = _Object$create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nmodule.exports = _wrapNativeSuper;","import { BrowserCompatibility } from \"./browserCompatibility\";\nimport { CustomError } from \"./customError\";\n\nexport class UnsupportedBrowserError extends CustomError {\n public readonly data?: BrowserCompatibility;\n\n // istanbul ignore next\n constructor(browserCompatibility: BrowserCompatibility) {\n super({\n name: \"UnsupportedBrowserError\",\n message: \"This OS / Browser has one or more missing features preventing it from working correctly\",\n });\n this.data = browserCompatibility;\n }\n}\n","/**\n * A camera for video input available to be used on the device.\n */\nexport interface Camera {\n /**\n * The unique identifier for the device, can change between page loads.\n */\n readonly deviceId: string;\n /**\n * The label describing the device.\n */\n readonly label: string;\n /**\n * The type (facing mode/direction) of camera: back (environment) or front (user).\n *\n * Not guaranteed to be correct: depending on device, browser and camera it could not correspond to the camera's real\n * type.\n */\n readonly cameraType: Camera.Type;\n /**\n * The current video resolution if and when the camera is in use, given as width and height in pixels.\n */\n currentResolution?: { width: number; height: number };\n}\n\nexport namespace Camera {\n /**\n * Camera type (facing mode/direction).\n *\n * Not guaranteed to be correct: depending on device, browser and camera it could not correspond to the camera's real\n * type.\n */\n export enum Type {\n /**\n * Front (user) facing camera.\n */\n FRONT = \"front\",\n /**\n * Back (environment) facing camera.\n */\n BACK = \"back\",\n }\n}\n","/*! howler.js v2.2.0 | (c) 2013-2020, James Simpson of GoldFire Studios | MIT License | howlerjs.com */\n!function(){\"use strict\";var e=function(){this.init()};e.prototype={init:function(){var e=this||n;return e._counter=1e3,e._html5AudioPool=[],e.html5PoolSize=10,e._codecs={},e._howls=[],e._muted=!1,e._volume=1,e._canPlayEvent=\"canplaythrough\",e._navigator=\"undefined\"!=typeof window&&window.navigator?window.navigator:null,e.masterGain=null,e.noAudio=!1,e.usingWebAudio=!0,e.autoSuspend=!0,e.ctx=null,e.autoUnlock=!0,e._setup(),e},volume:function(e){var o=this||n;if(e=parseFloat(e),o.ctx||_(),void 0!==e&&e>=0&&e<=1){if(o._volume=e,o._muted)return o;o.usingWebAudio&&o.masterGain.gain.setValueAtTime(e,n.ctx.currentTime);for(var t=0;t=0;o--)e._howls[o].unload();return e.usingWebAudio&&e.ctx&&void 0!==e.ctx.close&&(e.ctx.close(),e.ctx=null,_()),e},codecs:function(e){return(this||n)._codecs[e.replace(/^x-/,\"\")]},_setup:function(){var e=this||n;if(e.state=e.ctx?e.ctx.state||\"suspended\":\"suspended\",e._autoSuspend(),!e.usingWebAudio)if(\"undefined\"!=typeof Audio)try{var o=new Audio;void 0===o.oncanplaythrough&&(e._canPlayEvent=\"canplay\")}catch(n){e.noAudio=!0}else e.noAudio=!0;try{var o=new Audio;o.muted&&(e.noAudio=!0)}catch(e){}return e.noAudio||e._setupCodecs(),e},_setupCodecs:function(){var e=this||n,o=null;try{o=\"undefined\"!=typeof Audio?new Audio:null}catch(n){return e}if(!o||\"function\"!=typeof o.canPlayType)return e;var t=o.canPlayType(\"audio/mpeg;\").replace(/^no$/,\"\"),r=e._navigator&&e._navigator.userAgent.match(/OPR\\/([0-6].)/g),a=r&&parseInt(r[0].split(\"/\")[1],10)<33;return e._codecs={mp3:!(a||!t&&!o.canPlayType(\"audio/mp3;\").replace(/^no$/,\"\")),mpeg:!!t,opus:!!o.canPlayType('audio/ogg; codecs=\"opus\"').replace(/^no$/,\"\"),ogg:!!o.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,\"\"),oga:!!o.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/,\"\"),wav:!!o.canPlayType('audio/wav; codecs=\"1\"').replace(/^no$/,\"\"),aac:!!o.canPlayType(\"audio/aac;\").replace(/^no$/,\"\"),caf:!!o.canPlayType(\"audio/x-caf;\").replace(/^no$/,\"\"),m4a:!!(o.canPlayType(\"audio/x-m4a;\")||o.canPlayType(\"audio/m4a;\")||o.canPlayType(\"audio/aac;\")).replace(/^no$/,\"\"),m4b:!!(o.canPlayType(\"audio/x-m4b;\")||o.canPlayType(\"audio/m4b;\")||o.canPlayType(\"audio/aac;\")).replace(/^no$/,\"\"),mp4:!!(o.canPlayType(\"audio/x-mp4;\")||o.canPlayType(\"audio/mp4;\")||o.canPlayType(\"audio/aac;\")).replace(/^no$/,\"\"),weba:!!o.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/,\"\"),webm:!!o.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/,\"\"),dolby:!!o.canPlayType('audio/mp4; codecs=\"ec-3\"').replace(/^no$/,\"\"),flac:!!(o.canPlayType(\"audio/x-flac;\")||o.canPlayType(\"audio/flac;\")).replace(/^no$/,\"\")},e},_unlockAudio:function(){var e=this||n;if(!e._audioUnlocked&&e.ctx){e._audioUnlocked=!1,e.autoUnlock=!1,e._mobileUnloaded||44100===e.ctx.sampleRate||(e._mobileUnloaded=!0,e.unload()),e._scratchBuffer=e.ctx.createBuffer(1,1,22050);var o=function(n){for(;e._html5AudioPool.length0?i._seek:t._sprite[e][0]/1e3),s=Math.max(0,(t._sprite[e][0]+t._sprite[e][1])/1e3-_),l=1e3*s/Math.abs(i._rate),c=t._sprite[e][0]/1e3,f=(t._sprite[e][0]+t._sprite[e][1])/1e3;i._sprite=e,i._ended=!1;var p=function(){i._paused=!1,i._seek=_,i._start=c,i._stop=f,i._loop=!(!i._loop&&!t._sprite[e][2])};if(_>=f)return void t._ended(i);var m=i._node;if(t._webAudio){var v=function(){t._playLock=!1,p(),t._refreshBuffer(i);var e=i._muted||t._muted?0:i._volume;m.gain.setValueAtTime(e,n.ctx.currentTime),i._playStart=n.ctx.currentTime,void 0===m.bufferSource.start?i._loop?m.bufferSource.noteGrainOn(0,_,86400):m.bufferSource.noteGrainOn(0,_,s):i._loop?m.bufferSource.start(0,_,86400):m.bufferSource.start(0,_,s),l!==1/0&&(t._endTimers[i._id]=setTimeout(t._ended.bind(t,i),l)),o||setTimeout(function(){t._emit(\"play\",i._id),t._loadQueue()},0)};\"running\"===n.state&&\"interrupted\"!==n.ctx.state?v():(t._playLock=!0,t.once(\"resume\",v),t._clearTimer(i._id))}else{var h=function(){m.currentTime=_,m.muted=i._muted||t._muted||n._muted||m.muted,m.volume=i._volume*n.volume(),m.playbackRate=i._rate;try{var r=m.play();if(r&&\"undefined\"!=typeof Promise&&(r instanceof Promise||\"function\"==typeof r.then)?(t._playLock=!0,p(),r.then(function(){t._playLock=!1,m._unlocked=!0,o||(t._emit(\"play\",i._id),t._loadQueue())}).catch(function(){t._playLock=!1,t._emit(\"playerror\",i._id,\"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.\"),i._ended=!0,i._paused=!0})):o||(t._playLock=!1,p(),t._emit(\"play\",i._id),t._loadQueue()),m.playbackRate=i._rate,m.paused)return void t._emit(\"playerror\",i._id,\"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.\");\"__default\"!==e||i._loop?t._endTimers[i._id]=setTimeout(t._ended.bind(t,i),l):(t._endTimers[i._id]=function(){t._ended(i),m.removeEventListener(\"ended\",t._endTimers[i._id],!1)},m.addEventListener(\"ended\",t._endTimers[i._id],!1))}catch(e){t._emit(\"playerror\",i._id,e)}};\"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA\"===m.src&&(m.src=t._src,m.load());var y=window&&window.ejecta||!m.readyState&&n._navigator.isCocoonJS;if(m.readyState>=3||y)h();else{t._playLock=!0;var g=function(){h(),m.removeEventListener(n._canPlayEvent,g,!1)};m.addEventListener(n._canPlayEvent,g,!1),t._clearTimer(i._id)}}return i._id},pause:function(e){var n=this;if(\"loaded\"!==n._state||n._playLock)return n._queue.push({event:\"pause\",action:function(){n.pause(e)}}),n;for(var o=n._getSoundIds(e),t=0;t=0?o=parseInt(r[0],10):e=parseFloat(r[0])}else r.length>=2&&(e=parseFloat(r[0]),o=parseInt(r[1],10));var a;if(!(void 0!==e&&e>=0&&e<=1))return a=o?t._soundById(o):t._sounds[0],a?a._volume:0;if(\"loaded\"!==t._state||t._playLock)return t._queue.push({event:\"volume\",action:function(){t.volume.apply(t,r)}}),t;void 0===o&&(t._volume=e),o=t._getSoundIds(o);for(var u=0;u0?t/_:t),l=Date.now();e._fadeTo=o,e._interval=setInterval(function(){var r=(Date.now()-l)/t;l=Date.now(),i+=d*r,i=d<0?Math.max(o,i):Math.min(o,i),i=Math.round(100*i)/100,u._webAudio?e._volume=i:u.volume(i,e._id,!0),a&&(u._volume=i),(on&&i>=o)&&(clearInterval(e._interval),e._interval=null,e._fadeTo=null,u.volume(o,e._id),u._emit(\"fade\",e._id))},s)},_stopFade:function(e){var o=this,t=o._soundById(e);return t&&t._interval&&(o._webAudio&&t._node.gain.cancelScheduledValues(n.ctx.currentTime),clearInterval(t._interval),t._interval=null,o.volume(t._fadeTo,e),t._fadeTo=null,o._emit(\"fade\",e)),o},loop:function(){var e,n,o,t=this,r=arguments;if(0===r.length)return t._loop;if(1===r.length){if(\"boolean\"!=typeof r[0])return!!(o=t._soundById(parseInt(r[0],10)))&&o._loop;e=r[0],t._loop=e}else 2===r.length&&(e=r[0],n=parseInt(r[1],10));for(var a=t._getSoundIds(n),u=0;u=0?o=parseInt(r[0],10):e=parseFloat(r[0])}else 2===r.length&&(e=parseFloat(r[0]),o=parseInt(r[1],10));var i;if(\"number\"!=typeof e)return i=t._soundById(o),i?i._rate:t._rate;if(\"loaded\"!==t._state||t._playLock)return t._queue.push({event:\"rate\",action:function(){t.rate.apply(t,r)}}),t;void 0===o&&(t._rate=e),o=t._getSoundIds(o);for(var d=0;d=0?o=parseInt(r[0],10):t._sounds.length&&(o=t._sounds[0]._id,e=parseFloat(r[0]))}else 2===r.length&&(e=parseFloat(r[0]),o=parseInt(r[1],10));if(void 0===o)return t;if(\"loaded\"!==t._state||t._playLock)return t._queue.push({event:\"seek\",action:function(){t.seek.apply(t,r)}}),t;var i=t._soundById(o);if(i){if(!(\"number\"==typeof e&&e>=0)){if(t._webAudio){var d=t.playing(o)?n.ctx.currentTime-i._playStart:0,_=i._rateSeek?i._rateSeek-i._seek:0;return i._seek+(_+d*Math.abs(i._rate))}return i._node.currentTime}var s=t.playing(o);s&&t.pause(o,!0),i._seek=e,i._ended=!1,t._clearTimer(o),t._webAudio||!i._node||isNaN(i._node.duration)||(i._node.currentTime=e);var l=function(){t._emit(\"seek\",o),s&&t.play(o,!0)};if(s&&!t._webAudio){var c=function(){t._playLock?setTimeout(c,0):l()};setTimeout(c,0)}else l()}return t},playing:function(e){var n=this;if(\"number\"==typeof e){var o=n._soundById(e);return!!o&&!o._paused}for(var t=0;t=0&&n._howls.splice(a,1);var u=!0;for(t=0;t=0){u=!1;break}return r&&u&&delete r[e._src],n.noAudio=!1,e._state=\"unloaded\",e._sounds=[],e=null,null},on:function(e,n,o,t){var r=this,a=r[\"_on\"+e];return\"function\"==typeof n&&a.push(t?{id:o,fn:n,once:t}:{id:o,fn:n}),r},off:function(e,n,o){var t=this,r=t[\"_on\"+e],a=0;if(\"number\"==typeof n&&(o=n,n=null),n||o)for(a=0;a=0;a--)r[a].id&&r[a].id!==n&&\"load\"!==e||(setTimeout(function(e){e.call(this,n,o)}.bind(t,r[a].fn),0),r[a].once&&t.off(e,r[a].fn,r[a].id));return t._loadQueue(e),t},_loadQueue:function(e){var n=this;if(n._queue.length>0){var o=n._queue[0];o.event===e&&(n._queue.shift(),n._loadQueue()),e||o.action()}return n},_ended:function(e){var o=this,t=e._sprite;if(!o._webAudio&&e._node&&!e._node.paused&&!e._node.ended&&e._node.currentTime=0;t--){if(o<=n)return;e._sounds[t]._ended&&(e._webAudio&&e._sounds[t]._node&&e._sounds[t]._node.disconnect(0),e._sounds.splice(t,1),o--)}}},_getSoundIds:function(e){var n=this;if(void 0===e){for(var o=[],t=0;t=0;if(n._scratchBuffer&&e.bufferSource&&(e.bufferSource.onended=null,e.bufferSource.disconnect(0),t))try{e.bufferSource.buffer=n._scratchBuffer}catch(e){}return e.bufferSource=null,o},_clearSound:function(e){/MSIE |Trident\\//.test(n._navigator&&n._navigator.userAgent)||(e.src=\"data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA\")}};var t=function(e){this._parent=e,this.init()};t.prototype={init:function(){var e=this,o=e._parent;return e._muted=o._muted,e._loop=o._loop,e._volume=o._volume,e._rate=o._rate,e._seek=0,e._paused=!0,e._ended=!0,e._sprite=\"__default\",e._id=++n._counter,o._sounds.push(e),e.create(),e},create:function(){var e=this,o=e._parent,t=n._muted||e._muted||e._parent._muted?0:e._volume;return o._webAudio?(e._node=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),e._node.gain.setValueAtTime(t,n.ctx.currentTime),e._node.paused=!0,e._node.connect(n.masterGain)):n.noAudio||(e._node=n._obtainHtml5Audio(),e._errorFn=e._errorListener.bind(e),e._node.addEventListener(\"error\",e._errorFn,!1),e._loadFn=e._loadListener.bind(e),e._node.addEventListener(n._canPlayEvent,e._loadFn,!1),e._node.src=o._src,e._node.preload=!0===o._preload?\"auto\":o._preload,e._node.volume=t*n.volume(),e._node.load()),e},reset:function(){var e=this,o=e._parent;return e._muted=o._muted,e._loop=o._loop,e._volume=o._volume,e._rate=o._rate,e._seek=0,e._rateSeek=0,e._paused=!0,e._ended=!0,e._sprite=\"__default\",e._id=++n._counter,e},_errorListener:function(){var e=this;e._parent._emit(\"loaderror\",e._id,e._node.error?e._node.error.code:0),e._node.removeEventListener(\"error\",e._errorFn,!1)},_loadListener:function(){var e=this,o=e._parent;o._duration=Math.ceil(10*e._node.duration)/10,0===Object.keys(o._sprite).length&&(o._sprite={__default:[0,1e3*o._duration]}),\"loaded\"!==o._state&&(o._state=\"loaded\",o._emit(\"load\"),o._loadQueue()),e._node.removeEventListener(n._canPlayEvent,e._loadFn,!1)}};var r={},a=function(e){var n=e._src;if(r[n])return e._duration=r[n].duration,void d(e);if(/^data:[^;]+;base64,/.test(n)){for(var o=atob(n.split(\",\")[1]),t=new Uint8Array(o.length),a=0;a0?(r[o._src]=e,d(o,e)):t()};\"undefined\"!=typeof Promise&&1===n.ctx.decodeAudioData.length?n.ctx.decodeAudioData(e).then(a).catch(t):n.ctx.decodeAudioData(e,a,t)},d=function(e,n){n&&!e._duration&&(e._duration=n.duration),0===Object.keys(e._sprite).length&&(e._sprite={__default:[0,1e3*e._duration]}),\"loaded\"!==e._state&&(e._state=\"loaded\",e._emit(\"load\"),e._loadQueue())},_=function(){if(n.usingWebAudio){try{\"undefined\"!=typeof AudioContext?n.ctx=new AudioContext:\"undefined\"!=typeof webkitAudioContext?n.ctx=new webkitAudioContext:n.usingWebAudio=!1}catch(e){n.usingWebAudio=!1}n.ctx||(n.usingWebAudio=!1);var e=/iP(hone|od|ad)/.test(n._navigator&&n._navigator.platform),o=n._navigator&&n._navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/),t=o?parseInt(o[1],10):null;if(e&&t&&t<9){var r=/safari/.test(n._navigator&&n._navigator.userAgent.toLowerCase());n._navigator&&!r&&(n.usingWebAudio=!1)}n.usingWebAudio&&(n.masterGain=void 0===n.ctx.createGain?n.ctx.createGainNode():n.ctx.createGain(),n.masterGain.gain.setValueAtTime(n._muted?0:n._volume,n.ctx.currentTime),n.masterGain.connect(n.ctx.destination)),n._setup()}};\"function\"==typeof define&&define.amd&&define([],function(){return{Howler:n,Howl:o}}),\"undefined\"!=typeof exports&&(exports.Howler=n,exports.Howl=o),\"undefined\"!=typeof global?(global.HowlerGlobal=e,global.Howler=n,global.Howl=o,global.Sound=t):\"undefined\"!=typeof window&&(window.HowlerGlobal=e,window.Howler=n,window.Howl=o,window.Sound=t)}();","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","require('../../modules/es6.array.is-array');\nmodule.exports = require('../../modules/_core').Array.isArray;\n","/**\n * A configuration object to define the properties of an image to be scanned.\n */\nexport interface ImageSettings {\n /**\n * The width of the image (columns of pixels).\n */\n readonly width: number;\n /**\n * The height of the image (rows of pixels).\n */\n readonly height: number;\n /**\n * The format of the pixel data, meaning the mapping of array bytes to image pixels.\n */\n readonly format: ImageSettings.Format;\n}\n\nexport namespace ImageSettings {\n // Warning: the values of Format are important as the engine web worker relies on them without type checking.\n /**\n * Image bytes format/layout.\n */\n export enum Format {\n /**\n * Single-channel 8-bit gray scale image.\n */\n GRAY_8U = 0,\n /**\n * RGB image with 8 bits per color channel.\n */\n RGB_8U = 1,\n /**\n * RGBA image with 8 bits per color channel.\n */\n RGBA_8U = 2,\n }\n}\n","import { ParserResult } from \"./parserResult\";\nimport { Scanner } from \"./scanner\";\n\n// Deprecated but useful function for easy UTF-8 handling\n/**\n * @hidden\n */\ndeclare function escape(s: string): string;\n\n/**\n * A data string parser.\n *\n * Parsers are capable of parsing one particular data format, which is passed to them during construction.\n *\n * The parser is created through [[BarcodePicker.createParserForFormat]] or [[Scanner.createParserForFormat]].\n *\n * Note that you need to have a valid license key with the parsing feature enabled to use the parser functionalities.\n *\n * For documentation on the available formats, check the official parser library documentation here:\n * https://docs.scandit.com/parser/formats.html.\n */\nexport class Parser {\n private options?: object;\n\n /**\n * @hidden\n *\n * @param scanner The [[Scanner]] object used to interact with the external Scandit library.\n * @param dataFormat The data format for this parser.\n */\n constructor(private readonly scanner: Scanner, private readonly dataFormat: Parser.DataFormat) {}\n\n /**\n * Apply the option map to the parser, allowing the user to fine-tune the behaviour of the parser.\n * Available options depend on the data format and are specified in the respective documentation.\n *\n * @param options The new options to be applied (replacing previous ones, if any).\n */\n public setOptions(options?: object): void {\n this.options = options;\n }\n\n /**\n * Process the given raw data with the parser, retrieving the result as a [[ParserResult]] object.\n *\n * Multiple requests done without waiting for previous results will be queued and handled in order.\n *\n * If parsing of the data fails the returned promise is rejected with a `ScanditEngineError` error.\n *\n * @param dataRaw The raw data to be parsed.\n * @returns A promise resolving to the [[ParserResult]] object.\n */\n public parseRawData(dataRaw: Uint8Array): Promise {\n let dataString: string = \"\";\n try {\n dataRaw.forEach((byte: number) => {\n dataString += String.fromCharCode(byte);\n });\n dataString = decodeURIComponent(escape(dataString));\n } catch {\n dataString = \"\";\n }\n\n return this.scanner.parseString(this.dataFormat, dataString, this.options);\n }\n\n /**\n * Process the given string data with the parser, retrieving the result as a [[ParserResult]] object.\n *\n * Multiple requests done without waiting for previous results will be queued and handled in order.\n *\n * If parsing of the data fails the returned promise is rejected with a `ScanditEngineError` error.\n *\n * Note that you should use [[parseRawData]] whenever possible: some codes, such as those found on driving licenses,\n * might have non-printable characters and will need to use [[Barcode.rawData]] information to be parsed correctly.\n *\n * @param dataString The string to be parsed.\n * @returns A promise resolving to the [[ParserResult]] object.\n */\n public parseString(dataString: string): Promise {\n return this.scanner.parseString(this.dataFormat, dataString, this.options);\n }\n}\n\n// istanbul ignore next\nexport namespace Parser {\n /**\n * Data format of a string to be parsed into a set of key-value mappings by the Scandit Parser Library.\n *\n * See https://docs.scandit.com/parser/formats.html for more details.\n */\n export enum DataFormat {\n /**\n * GS1 Application Identifier (AI).\n *\n * See: http://www.gs1.org/docs/barcodes/GS1_General_Specifications.pdf.\n */\n GS1_AI = 1,\n /**\n * Health Industry Bar Code (HIBC).\n *\n * See: http://www.hibcc.org.\n */\n HIBC = 2,\n /**\n * AAMVA Driver License/Identification (DL/ID).\n *\n * See: http://www.aamva.org.\n */\n DLID = 3,\n /**\n * ICAO Machine Readable Travel Document (MRTD).\n *\n * See: https://www.icao.int.\n */\n MRTD = 4,\n /**\n * Swiss QR ISO 20022.\n *\n * See: https://www.paymentstandards.ch.\n */\n SWISSQR = 5,\n /**\n * Vehicle Identification Number (VIN).\n *\n * See: https://www.iso.org/standard/52200.html.\n */\n VIN = 6,\n /**\n * US Uniformed Services ID.\n *\n * See: https://www.cac.mil.\n */\n US_USID = 7,\n }\n}\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function (it) {\n var O = Object(it);\n return O[ITERATOR] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins\n || Iterators.hasOwnProperty(classof(O));\n};\n","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","var _Array$isArray = require(\"../core-js/array/is-array\");\n\nvar arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (_Array$isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","var _Array$from = require(\"../core-js/array/from\");\n\nvar _isIterable = require(\"../core-js/is-iterable\");\n\nvar _Symbol = require(\"../core-js/symbol\");\n\nfunction _iterableToArray(iter) {\n if (typeof _Symbol !== \"undefined\" && _isIterable(Object(iter))) return _Array$from(iter);\n}\n\nmodule.exports = _iterableToArray;","var _Array$from = require(\"../core-js/array/from\");\n\nvar arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return _Array$from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;","import { Barcode } from \"./barcode\";\nimport { ImageSettings } from \"./imageSettings\";\n\n/**\n * A result of a scanning operation on an image.\n */\nexport class ScanResult {\n /**\n * The list of barcodes found in the image (can be empty).\n */\n public readonly barcodes: Barcode[];\n /**\n * The image data given as a byte array, formatted accordingly to the set settings ([[imageSettings]]).\n */\n public readonly imageData: Uint8Array;\n\n /**\n * The configuration object defining the properties of the processed image ([[imageData]]).\n */\n public readonly imageSettings: ImageSettings;\n\n /**\n * @hidden\n *\n * The list of manually rejected barcodes.\n */\n public readonly rejectedCodes: Set;\n\n /**\n * @hidden\n *\n * Create a ScanResult instance.\n *\n * @param barcodes The list of barcodes found in the image.\n * @param imageData The image data given as a byte array, formatted accordingly to the set settings.\n * @param imageSettings The configuration object defining the properties of the processed image.\n */\n constructor(barcodes: Barcode[], imageData: Uint8Array, imageSettings: ImageSettings) {\n this.barcodes = barcodes;\n this.imageData = imageData;\n this.imageSettings = imageSettings;\n this.rejectedCodes = new Set();\n }\n\n /**\n * Prevent playing a sound, vibrating or flashing the GUI for a particular code.\n * If all codes in the result are rejected (or no barcode is present), sound, vibration and GUI flashing will be\n * suppressed.\n *\n * Rejected codes will still be part of the [[ScanResult.barcodes]] property like all other codes.\n *\n * @param barcode The barcode to be rejected.\n */\n public rejectCode(barcode: Barcode): void {\n this.rejectedCodes.add(barcode);\n }\n}\n","var anObject = require('./_an-object');\nvar get = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function (it) {\n var iterFn = get(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return anObject(iterFn.call(it));\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","import { Barcode } from \"./barcode\";\n\n/**\n * A symbology-specific configuration object.\n *\n * See https://docs.scandit.com/stable/c_api/symbologies.html for more details.\n */\nexport class SymbologySettings {\n private readonly symbology: Barcode.Symbology;\n private enabled: boolean;\n private colorInvertedEnabled: boolean;\n private activeSymbolCounts: number[];\n private extensions: Set;\n private checksums: Set;\n\n /**\n * @hidden\n *\n * Create a SymbologySettings instance.\n *\n * @param symbology The symbology for which to create the settings.\n * @param enabled
Default = false
\n * Whether the symbology is enabled for recognition.\n */\n constructor(symbology: Barcode.Symbology, enabled: boolean = false) {\n this.symbology = symbology;\n this.enabled = enabled;\n this.colorInvertedEnabled = false;\n this.activeSymbolCounts = SymbologySettings.defaultActiveSymbolCounts[symbology] ?? [];\n this.extensions = new Set(SymbologySettings.defaultExtensions[symbology] ?? []);\n this.checksums = new Set(SymbologySettings.defaultChecksums[symbology] ?? []);\n }\n\n /**\n * @returns Whether the symbology enabled for recognition.\n */\n public isEnabled(): boolean {\n return this.enabled;\n }\n\n /**\n * Enable or disable recognition of the symbology.\n *\n * @param enabled Whether the symbology is enabled for recognition.\n * @returns The updated [[SymbologySettings]] object.\n */\n public setEnabled(enabled: boolean): SymbologySettings {\n this.enabled = enabled;\n\n return this;\n }\n\n /**\n * @returns Whether color inverted recognition is enabled.\n */\n public isColorInvertedEnabled(): boolean {\n return this.colorInvertedEnabled;\n }\n\n /**\n * Enable or disable recognition of inverted-color symbology (in addition to normal colors).\n *\n * @param enabled Whether color inverted recognition is enabled.\n * @returns The updated [[SymbologySettings]] object.\n */\n public setColorInvertedEnabled(enabled: boolean): SymbologySettings {\n this.colorInvertedEnabled = enabled;\n\n return this;\n }\n\n /**\n * Get the current list of active symbol counts.\n *\n * @returns The list of active symbol counts.\n */\n public getActiveSymbolCounts(): number[] {\n return this.activeSymbolCounts;\n }\n\n /**\n * Set the list of active symbol counts.\n *\n * If an empty or invalid symbol count range is given, the range will be set to its default value.\n *\n * @param activeSymbolCounts The list of active symbol counts.\n * @returns The updated [[SymbologySettings]] object.\n */\n public setActiveSymbolCounts(activeSymbolCounts: number[]): SymbologySettings {\n this.activeSymbolCounts = activeSymbolCounts;\n if (this.activeSymbolCounts.length === 0) {\n this.activeSymbolCounts = SymbologySettings.defaultActiveSymbolCounts[this.symbology] ?? [];\n }\n\n return this;\n }\n\n /**\n * Set the (inclusive) range of active symbol counts.\n *\n * If an empty or invalid symbol count range is given, the range will be set to its default value.\n *\n * @param minCount The minimum accepted number of symbols.\n * @param maxCount The maximum accepted number of symbols.\n * @returns The updated [[SymbologySettings]] object.\n */\n public setActiveSymbolCountsRange(minCount: number, maxCount: number): SymbologySettings {\n this.activeSymbolCounts = SymbologySettings.getNumberRange(minCount, maxCount);\n if (this.activeSymbolCounts.length === 0) {\n this.activeSymbolCounts = SymbologySettings.defaultActiveSymbolCounts[this.symbology] ?? [];\n }\n\n return this;\n }\n\n /**\n * Get the current set of enabled optional extensions.\n *\n * Note that the external Scandit Engine library will also use any applicable mandatory extension for the symbology.\n *\n * @returns The set of enabled extensions.\n */\n public getEnabledExtensions(): Set {\n return this.extensions;\n }\n\n /**\n * Enable an optional extension or list/set of optional extensions\n *\n * @param extension The single extension or list/set of extensions to enable.\n * @returns The updated [[SymbologySettings]] object.\n */\n public enableExtensions(\n extension: SymbologySettings.Extension | SymbologySettings.Extension[] | Set\n ): SymbologySettings {\n if (typeof extension === \"object\") {\n this.extensions = new Set([\n ...this.extensions,\n ...Array.from(extension).filter((e) => {\n return this.isValidExtension(e);\n }),\n ]);\n } else if (this.isValidExtension(extension)) {\n this.extensions.add(extension);\n }\n\n return this;\n }\n\n /**\n * Disable an optional extension or list/set of optional extensions.\n *\n * @param extension The single extension or list/set of extensions to disable.\n * @returns The updated [[SymbologySettings]] object.\n */\n public disableExtensions(\n extension: SymbologySettings.Extension | SymbologySettings.Extension[] | Set\n ): SymbologySettings {\n if (typeof extension === \"object\") {\n this.extensions = new Set(\n [...this.extensions].filter((x) => {\n return extension instanceof Array ? !extension.includes(x) : !extension.has(x);\n })\n );\n } else if (this.isValidExtension(extension)) {\n this.extensions.delete(extension);\n }\n\n return this;\n }\n\n /**\n * Get the current set of enabled optional checksums.\n *\n * Note that the external Scandit Engine library will also use any applicable mandatory checksum for the symbology.\n *\n * @returns The set of enabled checksums.\n */\n public getEnabledChecksums(): Set {\n return this.checksums;\n }\n\n /**\n * Enable an optional checksum or list/set of optional checksums.\n *\n * @param checksum The single checksum or list/set of checksums to enable.\n * @returns The updated [[SymbologySettings]] object.\n */\n public enableChecksums(\n checksum: SymbologySettings.Checksum | SymbologySettings.Checksum[] | Set\n ): SymbologySettings {\n if (typeof checksum === \"object\") {\n this.checksums = new Set([\n ...this.checksums,\n ...Array.from(checksum).filter((c) => {\n return this.isValidChecksum(c);\n }),\n ]);\n } else if (this.isValidChecksum(checksum)) {\n this.checksums.add(checksum);\n }\n\n return this;\n }\n\n /**\n * Disable an optional checksum or list/set of optional checksums.\n *\n * @param checksum The single checksum or list/set of checksums to disable.\n * @returns The updated [[SymbologySettings]] object.\n */\n public disableChecksums(\n checksum: SymbologySettings.Checksum | SymbologySettings.Checksum[] | Set\n ): SymbologySettings {\n if (typeof checksum === \"object\") {\n this.checksums = new Set(\n [...this.checksums].filter((x) => {\n return checksum instanceof Array ? !checksum.includes(x) : !checksum.has(x);\n })\n );\n } else if (this.isValidChecksum(checksum)) {\n this.checksums.delete(checksum);\n }\n\n return this;\n }\n\n protected toJSON(): object {\n return {\n enabled: this.enabled,\n colorInvertedEnabled: this.colorInvertedEnabled,\n activeSymbolCounts: this.activeSymbolCounts.length === 0 ? undefined : this.activeSymbolCounts,\n extensions: Array.from(this.extensions),\n checksums: Array.from(this.checksums),\n };\n }\n\n private isValidExtension(extension: string | SymbologySettings.Extension): boolean {\n return (\n extension in SymbologySettings.Extension ||\n (Object.values(SymbologySettings.Extension)).includes(extension.toLowerCase())\n );\n }\n\n private isValidChecksum(checksum: string | SymbologySettings.Checksum): boolean {\n return (\n checksum in SymbologySettings.Checksum ||\n (Object.values(SymbologySettings.Checksum)).includes(checksum.toLowerCase())\n );\n }\n}\n\n// istanbul ignore next\nexport namespace SymbologySettings {\n /**\n * @hidden\n *\n * Get a range of numbers.\n *\n * @param from The range start (inclusive).\n * @param to The range end (inclusive).\n * @returns The range of numbers.\n */\n export function getNumberRange(from: number, to: number): number[] {\n return Array.from({ length: to - from + 1 }, (_, k) => {\n return k + from;\n });\n }\n\n /**\n * Symbology extensions for particular functionalities, only applicable to specific barcodes.\n * See: https://docs.scandit.com/stable/c_api/symbologies.html.\n */\n export enum Extension {\n /**\n * Improve scan performance when reading direct part marked (DPM) Data Matrix codes.\n * Enabling this extension comes at the cost of increased frame processing times.\n */\n DIRECT_PART_MARKING_MODE = \"direct_part_marking_mode\",\n /**\n * Interpret the Code 39 / Code 93 code data using two symbols per output character to encode all ASCII characters.\n */\n FULL_ASCII = \"full_ascii\",\n /**\n * Enable scanning codes that have quiet zones (white area before and after the code) significantly smaller\n * than what's allowed by the symbology specification.\n */\n RELAXED_SHARP_QUIET_ZONE_CHECK = \"relaxed_sharp_quiet_zone_check\",\n /**\n * Remove the leading zero digit from the result.\n */\n REMOVE_LEADING_ZERO = \"remove_leading_zero\",\n /**\n * Remove the leading zero digit from the result if the UPC-A representation extension \"RETURN_AS_UPCA\" is enabled.\n */\n REMOVE_LEADING_UPCA_ZERO = \"remove_leading_upca_zero\",\n /**\n * Transform the UPC-E result into its UPC-A representation.\n */\n RETURN_AS_UPCA = \"return_as_upca\",\n /**\n * Remove the leading FNC1 character that indicates a GS1 code.\n */\n STRIP_LEADING_FNC1 = \"strip_leading_fnc1\",\n }\n\n /**\n * Checksum algorithms, only applicable to specific barcodes.\n * See: https://docs.scandit.com/stable/c_api/symbologies.html.\n */\n export enum Checksum {\n /**\n * Modulo 10 checksum.\n */\n MOD_10 = \"mod10\",\n /**\n * Modulo 11 checksum.\n */\n MOD_11 = \"mod11\",\n /**\n * Modulo 16 checksum.\n */\n MOD_16 = \"mod16\",\n /**\n * Modulo 43 checksum.\n */\n MOD_43 = \"mod43\",\n /**\n * Modulo 47 checksum.\n */\n MOD_47 = \"mod47\",\n /**\n * Modulo 103 checksum.\n */\n MOD_103 = \"mod103\",\n /**\n * Two modulo 10 checksums.\n */\n MOD_1010 = \"mod1010\",\n /**\n * Modulo 11 and modulo 10 checksum.\n */\n MOD_1110 = \"mod1110\",\n }\n\n /**\n * @hidden\n */\n export const defaultActiveSymbolCounts: Partial> = {\n [Barcode.Symbology.CODABAR]: getNumberRange(7, 20),\n [Barcode.Symbology.CODE11]: getNumberRange(7, 20),\n [Barcode.Symbology.CODE128]: getNumberRange(6, 40),\n [Barcode.Symbology.CODE25]: getNumberRange(7, 20),\n [Barcode.Symbology.CODE32]: [8],\n [Barcode.Symbology.CODE39]: getNumberRange(6, 40),\n [Barcode.Symbology.CODE93]: getNumberRange(6, 40),\n [Barcode.Symbology.EAN13]: [12],\n [Barcode.Symbology.EAN8]: [8],\n [Barcode.Symbology.FIVE_DIGIT_ADD_ON]: [5],\n [Barcode.Symbology.GS1_DATABAR_EXPANDED]: getNumberRange(1, 11),\n [Barcode.Symbology.GS1_DATABAR_LIMITED]: [1],\n [Barcode.Symbology.GS1_DATABAR]: [2],\n [Barcode.Symbology.IATA_2_OF_5]: getNumberRange(7, 20),\n [Barcode.Symbology.INTERLEAVED_2_OF_5]: getNumberRange(6, 40),\n [Barcode.Symbology.KIX]: getNumberRange(7, 24),\n [Barcode.Symbology.LAPA4SC]: [16],\n [Barcode.Symbology.MSI_PLESSEY]: getNumberRange(6, 32),\n [Barcode.Symbology.RM4SCC]: getNumberRange(7, 24),\n [Barcode.Symbology.TWO_DIGIT_ADD_ON]: [2],\n [Barcode.Symbology.UPCA]: [12],\n [Barcode.Symbology.UPCE]: [6],\n };\n\n /**\n * @hidden\n */\n export const defaultExtensions: Partial> = {\n [Barcode.Symbology.CODE128]: [Extension.STRIP_LEADING_FNC1],\n [Barcode.Symbology.DATA_MATRIX]: [Extension.STRIP_LEADING_FNC1],\n };\n\n /**\n * @hidden\n */\n export const defaultChecksums: Partial> = {\n [Barcode.Symbology.MSI_PLESSEY]: [Checksum.MOD_10],\n [Barcode.Symbology.CODE11]: [Checksum.MOD_11],\n };\n}\n","import { Barcode } from \"./barcode\";\nimport { SearchArea } from \"./searchArea\";\nimport { SymbologySettings } from \"./symbologySettings\";\n\n/**\n * @hidden\n */\ntype SymbologyParameter = Barcode.Symbology | Barcode.Symbology[] | Set;\n\n/**\n * A configuration object for scanning options.\n *\n * Modified ScanSettings need to be applied to a scanner via\n * [[BarcodePicker.applyScanSettings]] or [[Scanner.applyScanSettings]] to take effect.\n */\nexport class ScanSettings {\n private readonly symbologySettings: Map;\n private readonly properties: Map;\n\n private codeDuplicateFilter: number;\n private maxNumberOfCodesPerFrame: number;\n private baseSearchArea: SearchArea;\n private searchArea: SearchArea;\n private gpuAcceleration: boolean;\n private blurryRecognition: boolean;\n\n /**\n * Create a ScanSettings instance.\n *\n * @param enabledSymbologies
Default = []
\n * The single symbology or list/set of symbologies that should be initialized as enabled for recognition.\n * @param codeDuplicateFilter
Default = 0
\n * The duplicate filter specifying how often a code can be scanned.\n * When the filter is set to -1, each unique code is only scanned once. When set to 0,\n * duplicate filtering is disabled. Otherwise the duplicate filter specifies an interval in milliseconds.\n * When the same code (data/symbology) is scanned within the specified interval it is filtered out as a duplicate.\n * @param maxNumberOfCodesPerFrame
Default = 1
\n * The maximum number of barcodes to be recognized every frame.\n * @param searchArea
Default = { x: 0, y: 0, width: 1.0, height: 1.0 }
\n * The area of the image in which barcodes are searched.\n * @param gpuAcceleration
Default = true
\n * Whether to enable/disable GPU support via WebGL, to provide faster and more accurate barcode localization.\n * The GPU can and will be used only if the browser also supports the needed technologies\n * ([WebGL](https://caniuse.com/#feat=webgl) and [OffscreenCanvas](https://caniuse.com/#feat=offscreencanvas)).\n * @param blurryRecognition
Default = true
\n * Whether to enable/disable blurry recognition, to allow accurate scanning capabilities for out-of-focus (1D) codes.\n * If enabled, more advanced algorithms are executed (and more resources/time is spent) every frame in order\n * to successfully decode/scan difficult codes.\n */\n constructor({\n enabledSymbologies = [],\n codeDuplicateFilter = 0,\n maxNumberOfCodesPerFrame = 1,\n searchArea = { x: 0, y: 0, width: 1.0, height: 1.0 },\n gpuAcceleration = true,\n blurryRecognition = true,\n }: {\n enabledSymbologies?: SymbologyParameter;\n codeDuplicateFilter?: number;\n maxNumberOfCodesPerFrame?: number;\n searchArea?: SearchArea;\n gpuAcceleration?: boolean;\n blurryRecognition?: boolean;\n } = {}) {\n this.symbologySettings = new Map();\n this.enableSymbologies(enabledSymbologies);\n this.codeDuplicateFilter = codeDuplicateFilter;\n this.maxNumberOfCodesPerFrame = maxNumberOfCodesPerFrame;\n this.baseSearchArea = { x: 0, y: 0, width: 1.0, height: 1.0 };\n this.searchArea = searchArea;\n this.gpuAcceleration = gpuAcceleration;\n this.blurryRecognition = blurryRecognition;\n this.properties = new Map();\n }\n\n /**\n * @returns The configuration object as a JSON string.\n */\n public toJSONString(): string {\n const symbologies: { [jsonSymbologyName: string]: SymbologySettings } = {};\n this.symbologySettings.forEach((symbologySettings, symbology) => {\n symbologies[Barcode.Symbology.toJSONName(symbology)] = symbologySettings;\n });\n const properties: { [key: string]: number } = {};\n this.properties.forEach((value, key) => {\n properties[key] = value;\n });\n\n const combinedSearchArea: SearchArea = {\n x: Math.min(1, this.baseSearchArea.x + this.searchArea.x * this.baseSearchArea.width),\n y: Math.min(1, this.baseSearchArea.y + this.searchArea.y * this.baseSearchArea.height),\n width: Math.min(1, this.baseSearchArea.width * this.searchArea.width),\n height: Math.min(1, this.baseSearchArea.height * this.searchArea.height),\n };\n\n const isFullSearchArea: boolean =\n Math.round(combinedSearchArea.x * 100) === 0 &&\n Math.round(combinedSearchArea.y * 100) === 0 &&\n Math.round(combinedSearchArea.width * 100) === 100 &&\n Math.round(combinedSearchArea.height * 100) === 100;\n\n return JSON.stringify({\n symbologies,\n codeDuplicateFilter: this.codeDuplicateFilter,\n maxNumberOfCodesPerFrame: this.maxNumberOfCodesPerFrame,\n searchArea: combinedSearchArea,\n codeLocation1d: isFullSearchArea\n ? undefined\n : {\n area: {\n x: combinedSearchArea.x,\n y: combinedSearchArea.y + (combinedSearchArea.height * 0.75) / 2,\n width: combinedSearchArea.width,\n height: combinedSearchArea.height * 0.25,\n },\n },\n codeLocation2d: isFullSearchArea\n ? undefined\n : {\n area: combinedSearchArea,\n },\n gpuAcceleration: this.gpuAcceleration,\n blurryRecognition: this.blurryRecognition,\n properties,\n });\n }\n\n /**\n * Get the configuration object for a symbology (which can then be modified).\n *\n * @param symbology The symbology for which to retrieve the configuration.\n * @returns The symbology configuration object for the specified symbology.\n */\n public getSymbologySettings(symbology: Barcode.Symbology): SymbologySettings {\n if (this.symbologySettings.has(symbology)) {\n return this.symbologySettings.get(symbology);\n } else {\n if (symbology in Barcode.Symbology || Object.values(Barcode.Symbology).includes(symbology)) {\n this.symbologySettings.set(symbology, new SymbologySettings(symbology));\n\n return this.symbologySettings.get(symbology);\n } else {\n throw new TypeError(`Invalid symbology \"${symbology}\"`);\n }\n }\n }\n\n /**\n * Get the recognition enabled status for a symbology.\n *\n * @param symbology The symbology for which to retrieve the recognition enabled status.\n * @returns Whether the symbology enabled for recognition.\n */\n public isSymbologyEnabled(symbology: Barcode.Symbology): boolean {\n return (\n this.symbologySettings.has(symbology) && (this.symbologySettings.get(symbology)).isEnabled()\n );\n }\n\n /**\n * Enable recognition of a symbology or list/set of symbologies.\n *\n * @param symbology The single symbology or list/set of symbologies to enable.\n * @returns The updated [[ScanSettings]] object.\n */\n public enableSymbologies(symbology: SymbologyParameter): ScanSettings {\n return this.setSymbologiesEnabled(symbology, true);\n }\n\n /**\n * Disable recognition of a symbology or list/set of symbologies.\n *\n * @param symbology The single symbology or list/set of symbologies to disable.\n * @returns The updated [[ScanSettings]] object.\n */\n public disableSymbologies(symbology: SymbologyParameter): ScanSettings {\n return this.setSymbologiesEnabled(symbology, false);\n }\n\n /**\n * When the filter is set to -1, each unique code is only scanned once. When set to 0,\n * duplicate filtering is disabled. Otherwise the duplicate filter specifies an interval in milliseconds.\n *\n * @returns The code duplicate filter value.\n */\n public getCodeDuplicateFilter(): number {\n return this.codeDuplicateFilter;\n }\n\n /**\n * Set the code duplicate filter value.\n *\n * When the filter is set to -1, each unique code is only scanned once. When set to 0,\n * duplicate filtering is disabled. Otherwise the duplicate filter specifies an interval in milliseconds.\n *\n * @param durationMilliseconds The new value (-1, 0, or positive integer).\n * @returns The updated [[ScanSettings]] object.\n */\n public setCodeDuplicateFilter(durationMilliseconds: number): ScanSettings {\n this.codeDuplicateFilter = durationMilliseconds;\n\n return this;\n }\n\n /**\n * @returns The maximum number of barcodes to be recognized every frame.\n */\n public getMaxNumberOfCodesPerFrame(): number {\n return this.maxNumberOfCodesPerFrame;\n }\n\n /**\n * Set the maximum number of barcodes to be recognized every frame.\n *\n * @param limit The new value (non-zero positive integer).\n * @returns The updated [[ScanSettings]] object.\n */\n public setMaxNumberOfCodesPerFrame(limit: number): ScanSettings {\n this.maxNumberOfCodesPerFrame = limit;\n\n return this;\n }\n\n /**\n * @returns The area of the image in which barcodes are searched.\n */\n public getSearchArea(): SearchArea {\n return this.searchArea;\n }\n\n /**\n * Set the area of the image in which barcodes are searched.\n *\n * @param searchArea The new search area.\n * @returns The updated [[ScanSettings]] object.\n */\n public setSearchArea(searchArea: SearchArea): ScanSettings {\n this.searchArea = searchArea;\n\n return this;\n }\n\n /**\n * @hidden\n *\n * @returns The base area of the image in which barcodes are searched.\n */\n public getBaseSearchArea(): SearchArea {\n return this.baseSearchArea;\n }\n\n /**\n * @hidden\n *\n * Set the base area of the image in which barcodes are searched, this is set automatically by a [[BarcodePicker]]\n * and is combined with the searchArea to obtain the final combined search area.\n *\n * @param baseSearchArea The new base search area.\n * @returns The updated [[ScanSettings]] object.\n */\n public setBaseSearchArea(baseSearchArea: SearchArea): ScanSettings {\n this.baseSearchArea = baseSearchArea;\n\n return this;\n }\n\n /**\n * @returns Whether GPU acceleration is configured to be enabled ot not.\n *\n * Note that this refers to the settings: depending on browser capabilities the actual GPU usage might be prevented.\n */\n public isGpuAccelerationEnabled(): boolean {\n return this.gpuAcceleration;\n }\n\n /**\n * Enable or disable GPU acceleration.\n *\n * Provide faster and more accurate barcode localization.\n * The GPU can and will be used only if the browser also supports the needed technologies\n * ([WebGL](https://caniuse.com/#feat=webgl) and [OffscreenCanvas](https://caniuse.com/#feat=offscreencanvas)).\n *\n * @param enabled Whether to enable or disable GPU acceleration.\n * @returns The updated [[ScanSettings]] object.\n */\n public setGpuAccelerationEnabled(enabled: boolean): ScanSettings {\n this.gpuAcceleration = enabled;\n\n return this;\n }\n\n /**\n * @returns Whether blurry recognition is configured to be enabled ot not.\n */\n public isBlurryRecognitionEnabled(): boolean {\n return this.blurryRecognition;\n }\n\n /**\n * Enable or disable blurry recognition.\n *\n * Allow accurate scanning capabilities for out-of-focus (1D) codes.\n * If enabled, more advanced algorithms are executed (and more resources/time is spent) every frame in order\n * to successfully decode/scan difficult codes.\n *\n * @param enabled Whether to enable or disable blurry recognition.\n * @returns The updated [[ScanSettings]] object.\n */\n public setBlurryRecognitionEnabled(enabled: boolean): ScanSettings {\n this.blurryRecognition = enabled;\n\n return this;\n }\n\n /**\n * Get a Scandit Engine library property.\n *\n * This function is for internal use only and any functionality that can be accessed through it can and will vanish\n * without public notice from one version to the next. Do not call this function unless you specifically have to.\n *\n * @param key The property name.\n * @returns The property value. For properties not previously set, -1 is returned.\n */\n public getProperty(key: string): number {\n if (this.properties.has(key)) {\n return this.properties.get(key);\n }\n\n return -1;\n }\n\n /**\n * Set a Scandit Engine library property.\n *\n * This function is for internal use only and any functionality that can be accessed through it can and will vanish\n * without public notice from one version to the next. Do not call this function unless you specifically have to.\n *\n * @param key The property name.\n * @param value The property value.\n * @returns The updated [[ScanSettings]] object.\n */\n public setProperty(key: string, value: number): ScanSettings {\n this.properties.set(key, value);\n\n return this;\n }\n\n private setSingleSymbologyEnabled(symbology: Barcode.Symbology, enabled: boolean): void {\n if (symbology in Barcode.Symbology || Object.values(Barcode.Symbology).includes(symbology)) {\n if (this.symbologySettings.has(symbology)) {\n (this.symbologySettings.get(symbology)).setEnabled(enabled);\n } else {\n this.symbologySettings.set(symbology, new SymbologySettings(symbology, enabled));\n }\n } else {\n throw new TypeError(`Invalid symbology \"${symbology}\"`);\n }\n }\n\n private setMultipleSymbologiesEnabled(\n symbology: Barcode.Symbology[] | Set,\n enabled: boolean\n ): void {\n for (const s of symbology) {\n if (!(s in Barcode.Symbology || Object.values(Barcode.Symbology).includes(s))) {\n throw new TypeError(`Invalid symbology \"${s}\"`);\n }\n }\n for (const s of symbology) {\n if (this.symbologySettings.has(s)) {\n (this.symbologySettings.get(s)).setEnabled(enabled);\n } else {\n this.symbologySettings.set(s, new SymbologySettings(s, enabled));\n }\n }\n }\n\n private setSymbologiesEnabled(symbology: SymbologyParameter, enabled: boolean): ScanSettings {\n if (typeof symbology === \"object\") {\n this.setMultipleSymbologiesEnabled(symbology, enabled);\n } else {\n this.setSingleSymbologyEnabled(symbology, enabled);\n }\n\n return this;\n }\n}\n","import { EventEmitter, ListenerFn } from \"eventemitter3\";\n\nimport { EngineSentMessageData, EngineWorker } from \"./workers/engineWorker\";\n\nimport { blurryRecognitionPreloader, configurePhase, engineLoader } from \"../index\";\nimport { Barcode, BarcodeWASMResult } from \"./barcode\";\nimport { BrowserCompatibility } from \"./browserCompatibility\";\nimport { BrowserHelper } from \"./browserHelper\";\nimport { CustomError } from \"./customError\";\nimport { EngineLoader } from \"./engineLoader\";\nimport { ImageSettings } from \"./imageSettings\";\nimport { Parser } from \"./parser\";\nimport { ParserField } from \"./parserField\";\nimport { ParserResult } from \"./parserResult\";\nimport { ScanResult } from \"./scanResult\";\nimport { ScanSettings } from \"./scanSettings\";\nimport { UnsupportedBrowserError } from \"./unsupportedBrowserError\";\n\n/**\n * @hidden\n */\ntype EventName = \"ready\" | \"contextCreated\" | \"newScanSettings\";\n\n/**\n * @hidden\n */\nclass ScannerEventEmitter extends EventEmitter {}\n\n/**\n * A low-level scanner interacting with the external Scandit Engine library.\n * Used to set up scan / image settings and to process single image frames.\n *\n * The loading of the external Scandit Engine library can take some time, the [[on]] method targeting the [[ready]]\n * event can be used to set up a listener function to be called when the library is loaded and the [[isReady]] method\n * can return the current status. The scanner will be ready to start scanning when the library is fully loaded.\n *\n * By default the external Scandit Engine library is preloaded in order to reduce the initialization time as much as\n * possible.\n *\n * In the special case where a single [[Scanner]] instance is shared between multiple active [[BarcodePicker]]\n * instances, the fairness in resource allocation for processing images between the different pickers is not guaranteed.\n */\nexport class Scanner {\n private readonly engineWorker: EngineWorker;\n private readonly eventEmitter: ScannerEventEmitter;\n\n private scanSettings: ScanSettings;\n private imageSettings?: ImageSettings;\n private workerParseRequestId: number;\n private workerScanRequestId: number;\n private workerScanQueueLength: number;\n private isReadyToWork: boolean;\n private licenseKeyFeatures?: object;\n private imageDataConversionContext?: CanvasRenderingContext2D;\n private activeBlurryRecognitionSymbologies: Set;\n private blurryRecognitionAvailable: boolean;\n\n /**\n * Create a Scanner instance.\n *\n * It is required to having configured the library via [[configure]] before this object can be created.\n *\n * Before processing an image the relative settings must also have been set.\n *\n * Depending on library configuration, browser features and user permissions for camera access, any of the following\n * errors could be thrown:\n * - `LibraryNotConfiguredError`\n * - `UnsupportedBrowserError`\n *\n * @param scanSettings
Default = new ScanSettings()
\n * The configuration object for scanning options.\n * @param imageSettings
Default = undefined
\n * The configuration object to define the properties of an image to be scanned.\n */\n constructor({\n scanSettings = new ScanSettings(),\n imageSettings,\n }: {\n scanSettings?: ScanSettings;\n imageSettings?: ImageSettings;\n } = {}) {\n const browserCompatibility: BrowserCompatibility = BrowserHelper.checkBrowserCompatibility();\n if (!browserCompatibility.scannerSupport) {\n throw new UnsupportedBrowserError(browserCompatibility);\n }\n if (configurePhase !== \"done\") {\n throw new CustomError({\n name: \"LibraryNotConfiguredError\",\n message:\n configurePhase === \"started\"\n ? `The library has not completed its configuration yet, please call 'configure' and wait for the returned\n promise's resolution`\n : `The library was not configured yet, 'configure' must be called with valid parameters before instantiating\n the Scanner`,\n });\n }\n\n this.eventEmitter = new EventEmitter();\n this.isReadyToWork = false;\n this.workerScanQueueLength = 0;\n this.workerParseRequestId = 0;\n this.workerScanRequestId = 0;\n\n this.engineWorker = engineLoader.getEngineWorker();\n this.engineWorker.onmessage = this.engineWorkerOnMessage.bind(this);\n EngineLoader.load(this.engineWorker);\n\n this.activeBlurryRecognitionSymbologies = new Set();\n this.blurryRecognitionAvailable = false;\n\n this.applyScanSettings(scanSettings);\n if (imageSettings != null) {\n this.applyImageSettings(imageSettings);\n }\n\n blurryRecognitionPreloader.on(\"blurryTablesUpdate\", this.handleBlurryTablesUpdate.bind(this));\n }\n\n /**\n * Stop/reset the internal WebWorker and destroy the scanner itself; ensuring complete cleanup.\n *\n * This method should be called after you don't plan to use the scanner anymore,\n * before the object is automatically cleaned up by JavaScript.\n * The scanner must not be used in any way after this call.\n */\n public destroy(): void {\n if (this.engineWorker != null) {\n engineLoader.returnEngineWorker(this.engineWorker);\n }\n this.eventEmitter.removeAllListeners();\n }\n\n /**\n * Apply a new set of scan settings to the scanner (replacing old settings).\n *\n * @param scanSettings The scan configuration object to be applied to the scanner.\n * @returns The updated [[Scanner]] object.\n */\n public applyScanSettings(scanSettings: ScanSettings): Scanner {\n this.scanSettings = scanSettings;\n blurryRecognitionPreloader.updateBlurryRecognitionPriority(this.scanSettings);\n const activeBlurryRecognitionSymbologies: Barcode.Symbology[] = blurryRecognitionPreloader.getEnabledSymbologies(\n this.scanSettings\n );\n this.blurryRecognitionAvailable = blurryRecognitionPreloader.isBlurryRecognitionAvailable(this.scanSettings);\n this.engineWorker.postMessage({\n type: \"settings\",\n settings: this.scanSettings.toJSONString(),\n blurryRecognitionAvailable: this.blurryRecognitionAvailable,\n blurryRecognitionRequiresUpdate: activeBlurryRecognitionSymbologies.some((symbology) => {\n return !this.activeBlurryRecognitionSymbologies.has(symbology);\n }),\n });\n if (this.blurryRecognitionAvailable) {\n this.activeBlurryRecognitionSymbologies = new Set([\n ...this.activeBlurryRecognitionSymbologies,\n ...activeBlurryRecognitionSymbologies,\n ]);\n }\n this.eventEmitter.emit(\"newScanSettings\", this.scanSettings);\n\n return this;\n }\n\n /**\n * Apply a new set of image settings to the scanner (replacing old settings).\n *\n * @param imageSettings The image configuration object to be applied to the scanner.\n * @returns The updated [[Scanner]] object.\n */\n public applyImageSettings(imageSettings: ImageSettings): Scanner {\n this.imageSettings = imageSettings;\n this.engineWorker.postMessage({\n type: \"image-settings\",\n imageSettings,\n });\n\n return this;\n }\n\n /**\n * Clear the scanner session.\n *\n * This removes all recognized barcodes from the scanner session and allows them to be scanned again in case a custom\n * *codeDuplicateFilter* was set in the [[ScanSettings]].\n *\n * @returns The updated [[Scanner]] object.\n */\n public clearSession(): Scanner {\n this.engineWorker.postMessage({\n type: \"clear-session\",\n });\n\n return this;\n }\n\n /**\n * Process a given image using the previously set scanner and image settings,\n * recognizing codes and retrieving the result as a list of barcodes (if any).\n *\n * Multiple requests done without waiting for previous results will be queued and handled in order.\n *\n * If *highQualitySingleFrameMode* is enabled the image will be processed with really accurate internal settings,\n * resulting in much slower but more precise scanning results. This should be used only for single images not part\n * of a continuous video stream.\n *\n * Passing image data as a *Uint8Array* is the fastest option, passing a *HTMLImageElement*\n * will incur in additional operations.\n *\n * Data passed to this function is \"detached\"/\"neutered\" becoming unusable as it's being passed to the external\n * Scandit Engine library. You can access the same data once it's returned in the [[ScanResult.imageData]] property.\n *\n * Depending on the current image settings, given *imageData* and scanning execution, any of the following errors\n * could be the rejected result of the returned promise:\n * - `NoImageSettings`\n * - `ImageSettingsDataMismatch`\n * - `ScanditEngineError`\n *\n * @param imageData The image data given as byte array or image element, complying with the previously set\n * image settings.\n * @param highQualitySingleFrameMode Whether to process the image as a high quality single frame.\n * @returns A promise resolving to the [[ScanResult]] object.\n */\n public processImage(\n imageData: Uint8Array | HTMLImageElement,\n highQualitySingleFrameMode: boolean = false\n ): Promise {\n if (this.imageSettings == null) {\n return Promise.reject(\n new CustomError({ name: \"NoImageSettings\", message: \"No image settings set up in the scanner\" })\n );\n }\n\n if (imageData instanceof HTMLImageElement) {\n if (this.imageDataConversionContext == null) {\n this.imageDataConversionContext = document.createElement(\"canvas\").getContext(\"2d\");\n }\n this.imageDataConversionContext.canvas.width = imageData.naturalWidth;\n this.imageDataConversionContext.canvas.height = imageData.naturalHeight;\n this.imageDataConversionContext.drawImage(imageData, 0, 0, imageData.naturalWidth, imageData.naturalHeight);\n imageData = new Uint8Array(\n this.imageDataConversionContext.getImageData(0, 0, imageData.naturalWidth, imageData.naturalHeight).data.buffer\n );\n }\n\n let channels: number;\n switch (this.imageSettings.format.valueOf()) {\n case ImageSettings.Format.GRAY_8U:\n channels = 1;\n break;\n case ImageSettings.Format.RGB_8U:\n channels = 3;\n break;\n case ImageSettings.Format.RGBA_8U:\n channels = 4;\n break;\n default:\n channels = 1;\n break;\n }\n\n if (this.imageSettings.width * this.imageSettings.height * channels !== imageData.length) {\n return Promise.reject(\n new CustomError({\n name: \"ImageSettingsDataMismatch\",\n message: \"The provided image data doesn't match the previously set image settings\",\n })\n );\n }\n\n this.workerScanRequestId++;\n this.workerScanQueueLength++;\n\n return new Promise((resolve, reject) => {\n const workResultEvent: string = `workResult-${this.workerScanRequestId}`;\n const workErrorEvent: string = `workError-${this.workerScanRequestId}`;\n this.eventEmitter.once(\n workResultEvent,\n (workResult: { scanResult: BarcodeWASMResult[] }, returnedImageData: Uint8Array) => {\n this.eventEmitter.removeAllListeners(workErrorEvent);\n resolve(\n new ScanResult(\n workResult.scanResult.map(Barcode.createFromWASMResult),\n returnedImageData,\n this.imageSettings\n )\n );\n }\n );\n this.eventEmitter.once(workErrorEvent, (error: { errorCode: number; errorMessage: string }, _: Uint8Array) => {\n console.error(`Scandit Engine error (${error.errorCode}):`, error.errorMessage);\n this.eventEmitter.removeAllListeners(workResultEvent);\n const errorObject: Error = new CustomError({\n name: \"ScanditEngineError\",\n message: `${error.errorMessage} (${error.errorCode})`,\n });\n reject(errorObject);\n });\n this.engineWorker.postMessage(\n {\n type: \"scan-image\",\n requestId: this.workerScanRequestId,\n data: imageData,\n highQualitySingleFrameMode,\n },\n [(imageData).buffer]\n );\n });\n }\n\n /**\n * @returns Whether the scanner is currently busy processing an image.\n */\n public isBusyProcessing(): boolean {\n return this.workerScanQueueLength !== 0;\n }\n\n /**\n * @returns Whether the scanner has loaded the external Scandit Engine library and is ready to scan.\n */\n public isReady(): boolean {\n return this.isReadyToWork;\n }\n\n /**\n * Add the listener function to the listeners array for an event.\n *\n * No checks are made to see if the listener has already been added.\n * Multiple calls passing the same listener will result in the listener being added, and called, multiple times.\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function.\n * @returns The updated [[Scanner]] object.\n */\n // tslint:disable-next-line:bool-param-default\n public on(eventName: EventName, listener: ListenerFn): Scanner;\n /**\n * Add the listener function to the listeners array for the [[ready]] event, fired only once when the external\n * Scandit Engine library has been loaded and the scanner can thus start to scan barcodes.\n * If the external Scandit Engine library has already been loaded the listener is called immediately.\n *\n * No checks are made to see if the listener has already been added.\n * Multiple calls passing the same listener will result in the listener being added, and called, multiple times.\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function.\n * @returns The updated [[Scanner]] object.\n */\n public on(eventName: \"ready\", listener: () => void): Scanner;\n public on(eventName: EventName, listener: ListenerFn): Scanner {\n if (eventName === \"ready\") {\n if (this.isReadyToWork) {\n listener();\n } else {\n this.eventEmitter.once(eventName, listener, this);\n }\n } else if (eventName === \"contextCreated\") {\n if (this.licenseKeyFeatures != null) {\n listener(this.licenseKeyFeatures);\n } else {\n this.eventEmitter.once(eventName, listener, this);\n }\n } else {\n this.eventEmitter.on(eventName, listener, this);\n }\n\n return this;\n }\n\n /**\n * *See the [[on]] method.*\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function.\n * @returns The updated [[Scanner]] object.\n */\n public addListener(eventName: EventName, listener: ListenerFn): Scanner {\n return this.on(eventName, listener);\n }\n\n /**\n * Create a new parser object.\n *\n * @param dataFormat The format of the input data for the parser.\n * @returns The newly created parser.\n */\n public createParserForFormat(dataFormat: Parser.DataFormat): Parser {\n return new Parser(this, dataFormat);\n }\n\n /**\n * Return the current image settings.\n *\n * Note that modifying this object won't directly apply these settings: the [[applyImageSettings]] method must be\n * called with the updated object.\n *\n * @returns The current image settings.\n */\n public getImageSettings(): ImageSettings | undefined {\n return this.imageSettings;\n }\n\n /**\n * Return the current scan settings.\n *\n * Note that modifying this object won't directly apply these settings: the [[applyScanSettings]] method must be\n * called with the updated object.\n *\n * @returns The current scan settings.\n */\n public getScanSettings(): ScanSettings {\n return this.scanSettings;\n }\n\n /**\n * @hidden\n *\n * Process a given string using the Scandit Parser library,\n * parsing the data in the given format and retrieving the result as a [[ParserResult]] object.\n *\n * Multiple requests done without waiting for previous results will be queued and handled in order.\n *\n * If parsing of the data fails the returned promise is rejected with a `ScanditEngineError` error.\n *\n * @param dataFormat The format of the given data.\n * @param dataString The string containing the data to be parsed.\n * @param options Options for the specific data format parser.\n * @returns A promise resolving to the [[ParserResult]] object.\n */\n public parseString(dataFormat: Parser.DataFormat, dataString: string, options?: object): Promise {\n this.workerParseRequestId++;\n\n return new Promise((resolve, reject) => {\n const parseStringResultEvent: string = `parseStringResult-${this.workerParseRequestId}`;\n const parseStringErrorEvent: string = `parseStringError-${this.workerParseRequestId}`;\n this.eventEmitter.once(parseStringResultEvent, (result: string) => {\n this.eventEmitter.removeAllListeners(parseStringErrorEvent);\n const parserResult: ParserResult = {\n jsonString: result,\n fields: [],\n fieldsByName: {},\n };\n (JSON.parse(result)).forEach((parserField) => {\n parserResult.fields.push(parserField);\n parserResult.fieldsByName[parserField.name] = parserField;\n });\n resolve(parserResult);\n });\n this.eventEmitter.once(parseStringErrorEvent, (error: { errorCode: number; errorMessage: string }) => {\n console.error(`Scandit Engine error (${error.errorCode}):`, error.errorMessage);\n this.eventEmitter.removeAllListeners(parseStringResultEvent);\n const errorObject: Error = new CustomError({\n name: \"ScanditEngineError\",\n message: `${error.errorMessage} (${error.errorCode})`,\n });\n reject(errorObject);\n });\n this.engineWorker.postMessage({\n type: \"parse-string\",\n requestId: this.workerParseRequestId,\n dataFormat,\n dataString,\n options: options == null ? \"{}\" : JSON.stringify(options),\n });\n });\n }\n\n /**\n * Remove the specified listener from the given event's listener array.\n *\n * @param eventName The name of the event from which to remove the listener.\n * @param listener The listener function to be removed.\n * @returns The updated [[Scanner]] object.\n */\n public removeListener(eventName: string, listener: ListenerFn): Scanner {\n this.eventEmitter.removeListener(eventName, listener);\n\n return this;\n }\n\n /**\n * Remove all listeners from the given event's listener array.\n *\n * @param eventName The name of the event from which to remove all listeners.\n * @returns The updated [[Scanner]] object.\n */\n public removeAllListeners(eventName: EventName): Scanner {\n this.eventEmitter.removeAllListeners(eventName);\n\n return this;\n }\n\n private handleBlurryTablesUpdate(): void {\n if (this.blurryRecognitionAvailable) {\n return;\n }\n this.blurryRecognitionAvailable = blurryRecognitionPreloader.isBlurryRecognitionAvailable(this.scanSettings);\n if (this.blurryRecognitionAvailable) {\n this.activeBlurryRecognitionSymbologies = new Set([\n ...this.activeBlurryRecognitionSymbologies,\n ...blurryRecognitionPreloader.getEnabledSymbologies(this.scanSettings),\n ]);\n this.engineWorker.postMessage({\n type: \"settings\",\n settings: this.scanSettings.toJSONString(),\n blurryRecognitionAvailable: true,\n blurryRecognitionRequiresUpdate: true,\n });\n }\n }\n\n private engineWorkerOnMessage(ev: MessageEvent): void {\n const data: EngineSentMessageData = ev.data;\n\n if (data[0] === \"library-loaded\") {\n this.isReadyToWork = true;\n this.eventEmitter.emit(\"ready\");\n\n return;\n }\n\n if (data[1] != null) {\n switch (data[0]) {\n case \"context-created\":\n this.licenseKeyFeatures = data[1];\n this.eventEmitter.emit(\"contextCreated\", this.licenseKeyFeatures);\n break;\n case \"work-result\":\n this.eventEmitter.emit(`workResult-${data[1].requestId}`, data[1].result, data[2]);\n this.workerScanQueueLength--;\n break;\n case \"work-error\":\n this.eventEmitter.emit(`workError-${data[1].requestId}`, data[1].error, data[2]);\n this.workerScanQueueLength--;\n break;\n case \"parse-string-result\":\n this.eventEmitter.emit(`parseStringResult-${data[1].requestId}`, data[1].result);\n break;\n case \"parse-string-error\":\n this.eventEmitter.emit(`parseStringError-${data[1].requestId}`, data[1].error);\n break;\n // istanbul ignore next\n default:\n break;\n }\n }\n }\n}\n\n// istanbul ignore next\nexport namespace Scanner {\n /**\n * Fired when the external Scandit Engine library has been loaded and the scanner can thus start to scan barcodes.\n *\n * @asMemberOf Scanner\n * @event\n */\n // @ts-ignore\n declare function ready(): void;\n}\n","import * as CSS from \"csstype\";\n\nimport { cameraImage, folderImage } from \"./assets/base64assets\";\n\n/**\n * A configuration object for Single Image Mode options for multiple platforms.\n */\n\nexport interface SingleImageModeSettings {\n /**\n * Settings to be applied when the device is a desktop/laptop.\n * On these devices the user will be requested to pick an image from the filesystem (see\n * [https://w3c.github.io/html-media-capture/](https://w3c.github.io/html-media-capture/).\n */\n readonly desktop?: SingleImageModePlatformSettings;\n /**\n * Settings to be applied when the device is a smartphone/tablet.\n * On these devices the user will be requested to take a picture directly via the camera (see\n * [https://w3c.github.io/html-media-capture/](https://w3c.github.io/html-media-capture/).\n */\n readonly mobile?: SingleImageModePlatformSettings;\n}\n\n/**\n * A configuration object for Single Image Mode options for a specific platform.\n *\n * The Single Image Mode screen is composed of information at the top and a button at the bottom.\n */\nexport interface SingleImageModePlatformSettings {\n /**\n *
Default = [[UsageStrategy.FALLBACK]]
\n *\n * Execution strategy (when to run).\n *\n * By default use only if the OS/browser doesn't support continuous camera video stream scanning.\n */\n usageStrategy?: SingleImageModeSettings.UsageStrategy;\n /**\n *
Default = <HTMLElement>
\n *\n * HTML element to override information contents.\n */\n informationElement?: HTMLElement;\n /**\n *
Default = <SVGElement>
\n *\n * HTML/SVG element to override button contents (SVG recommended).\n */\n buttonElement?: HTMLElement | SVGElement;\n /**\n *
Default = { backgroundColor: \"#333333\" }
\n *\n * [CSS properties](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference) to override\n * the surrounding container's [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style).\n */\n containerStyle?: CSS.Properties;\n /**\n *
Default = { color: \"#FFFFFF\" }
\n *\n * [CSS properties](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference) to override\n * the information text's [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style).\n */\n informationStyle?: CSS.Properties;\n /**\n *
Default = { borderColor: \"#FFFFFF\", color: \"#FFFFFF\", fill: \"#FFFFFF\" }\n *
\n *\n * [CSS properties](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Properties_Reference) to override\n * the button's [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style).\n *\n * Note: *borderColor* is used for the border, *color* for the flash animation, *fill* for the SVG icon.\n */\n buttonStyle?: CSS.Properties;\n}\n\nexport namespace SingleImageModeSettings {\n /**\n * @hidden\n *\n * Create a default [[SingleImageModePlatformSettings]] object.\n *\n * @param text The text to display at the top.\n * @param base64image The image to display at the bottom as a button.\n * @returns The generated [[SingleImageModePlatformSettings]] object.\n */\n function getDefaultSingleImageModeSettings(text: string, base64image: string): SingleImageModePlatformSettings {\n return {\n informationElement: document.createRange().createContextualFragment(text).firstElementChild,\n buttonElement: document.createRange().createContextualFragment(atob(base64image)).firstElementChild,\n containerStyle: { backgroundColor: \"#333333\" },\n informationStyle: { color: \"#FFFFFF\" },\n buttonStyle: { borderColor: \"#FFFFFF\", color: \"#FFFFFF\", fill: \"#FFFFFF\" },\n };\n }\n /**\n * Single Image Mode usage strategy.\n */\n export enum UsageStrategy {\n /**\n * Never use Single Image Mode (an error is thrown on [[BarcodePicker]] creation if the OS/browser doesn't support\n * continuous camera video stream scanning).\n */\n NEVER = \"never\",\n /**\n * Use Single Image Mode as fallback: only if the OS/browser doesn't support continuous camera video stream\n * scanning.\n */\n FALLBACK = \"fallback\",\n /**\n * Force Single Image Mode over continuous camera video stream scanning in all situations.\n */\n ALWAYS = \"always\",\n }\n\n /**\n * @hidden\n */\n export const defaultDesktop: SingleImageModePlatformSettings = getDefaultSingleImageModeSettings(\n \"

To scan:
1. Click on the folder icon
2. Select the picture to scan

\",\n folderImage\n );\n /**\n * @hidden\n */\n export const defaultMobile: SingleImageModePlatformSettings = getDefaultSingleImageModeSettings(\n \"

To scan:
1. Tap the camera icon
2. Take a picture of the code(s)

\",\n cameraImage\n );\n}\n","// TODO: gracefully load assets from files inside build process\nexport const beepSound: string =\n // tslint:disable-next-line:max-line-length\n \"data:audio/mp3;base64,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4LAkByw1k3LVZpl+pNlGNZem5stM2Wr6j1Z9AMMBYjily+nv/WqtU3SzFdqLW+g9ay+GvQb2oJMhV52tK+eZCvrd0BNqdIzFngHBYCQQIIaJ1PtUjVq//qP+ohdCZhgRJDlF/////zoi5C6lVAABQCoDYQD4ZCwVB9kTFKkiv9NQcExMLk3ipgtxrzPf8LZgdNYHsgYIPgbIgAEXEAwCgpAie4XVi5BaBlBUxSQfMO7yfQPFcsGReNjIgX0QvmASaIgQc3SJkgpqr+myNNNNJSSX/n1Hw/4CgwqkXN3qSMTVX//U2skkQuTq9JJEy/+ybvT6p1IjCCpfiL/+SuQupVQAAUAqA2EA+GQsFQfZExSpIr/TUHBMTC5N4qYLca8z3/C2YHTWB7IGCD4GyIABFxAMAoKQInuF1YuQWgZQVMUkHzDu8n0DxXLBkXjYyIF9EL5gEmiIEHN0iZIKaq/psjTTTSUkl/59R8P+AoMKpFzd6kjE1V//1NrJJELk6vSSRMv/sm70+qdSIwgqX4i//klMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+7IAAA/wAABpBwAACAAADSDgAAEAAAGkAAAAIAAANIAAAARMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=\";\nexport const scanditLogoImage: string =\n // tslint:disable-next-line:max-line-length\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUcAAAAhCAMAAAB9TZmqAAABgFBMVEVHcEyCgoL+/v6Kior///+FhYXW1tbn5+eAgIDp6en+/v6BgYH///////////+BgYH///////////+wsLCCgoL4+PiBgYH///+srKyAgID////s7OyCgoKBgYGDg4P///+BgYH6+vqBgYH////MzMz39/f///+BgYGbm5uDg4OMjIyBgYG+vr6QkJD///////+BgYGDg4P+/v7Hx8eOjo6BgYH09PT7+/v///////+MjIz9/f3////////Y2Nj6+vrPz8+BgYH9/f3///+3t7f///+Ghob///+AgICDg4P///+IiIj///////+CgoL6+vqmpqb////////t7e3////////////b29vj4+PNzc3y8vLl5eXv7+/U1NTDw8O8vLyRkZH////x8fGJiYmZmZnDw8Pf39/S0tLT09PCwsKfn5/4+PjV1dWlpaWwsLCjo6OsrKzj4+OZmZnCwsLq6uqurq7///+AgICfn5+Tk5OFhYXCwsLJycmYmJjU1NS/v79wPZvPAAAAdnRSTlMAcvoPxiTEAsby9L8p/eusNEoJBlEZ2Pb67nz25fVGOv1Eh+RW7oyC/ToXzkALzmqTe8BJHmf9Uu+n/B2Dnt7/+6MvEP2ZKrmzXHIx2dScYv6wkf3o3SL+/uDhqLbnuNrVV4u4ie7LNGlhweeUnrTsZOjkis/PjpWtfQAACfhJREFUaN7tmXlbGksWxtlMEwRUVjUgrSQqEAQccXdQQRUVVYxqoolqjGa9WW7uW25Xv/pUdxe9q2TM88zMM55/aE5V1/Lr03XeqrZYHuzBHuzB/vPmX+hzgdmcyh/sXrIx95LKPQ64/JoG5oaHHVztzya8Ssl0rV1PfO6A03YbR4xdzUBnblbgXphZm2hv+W0z9bW0+H7tjmL9d2w6VDPon7XX/CsuxR2fTcr1hervk+oWBM9KDa0bLqVys5pOn1vTrxfvG6SrCT3HpwNiS3O1Gzt/E8dN5RHVadNAsL6aXB9ch3/9zWyUdDF/Bqh8/ngm2Shpkp+QB49xEdJy3MbgW4UjaVQ42nola73ywDWt5XhKpIcWbP4h9F3CIOuOEOodiwNz4wvdDsDW/N/PMYPhb1GiGOMY82CiSeWWObYgXsI2SWo4tq7jusOco9xC7yAG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\";\nexport const laserActiveImage: string =\n // tslint:disable-next-line:max-line-length\n \"data:image/png;base64,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\";\nexport const laserPausedImage: string =\n // tslint:disable-next-line:max-line-length\n \"data:image/png;base64,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\";\nexport const cameraImage: string =\n // tslint:disable-next-line:max-line-length\n \"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MCA1MCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Ik0xNyA1Yy0uOCAwLTEuNC41LTEuOCAxLS40LjUtLjcgMS0xLjEgMS41cy0uNiAxLS44IDEuM2wtLjMuM0gzYy0xLjYgMC0zIDEuNC0zIDN2MjdjMCAxLjYgMS40IDMgMyAzaDQ0YzEuNiAwIDMtMS40IDMtM3YtMjdjMC0xLjYtMS40LTMtMy0zSDM3bC0uMy0uM2MtLjItLjMtLjUtLjctLjgtMS4ycy0uNi0xLTEuMS0xLjVjLS40LS41LTEtMS0xLjgtMXptMCAyaDE2Yy0uMSAwIC4xIDAgLjMuM3MuNS44LjggMS4zLjcgMSAxLjEgMS41IDEgMSAxLjggMWgxMGMuNiAwIDEgLjQgMSAxdjI3YzAgLjYtLjQgMS0xIDFIM2MtLjYgMC0xLS40LTEtMXYtMjdjMC0uNi40LTEgMS0xaDEwYy44IDAgMS40LS41IDEuOC0xcy44LTEgMS4xLTEuNS42LTEgLjgtMS4yLjQtLjMuMy0uM3ptOCA0Yy03LjIgMC0xMyA1LjgtMTMgMTNzNS44IDEzIDEzIDEzIDEzLTUuOCAxMy0xMy01LjgtMTMtMTMtMTN6bTAgMmM2LjEgMCAxMSA0LjkgMTEgMTFzLTQuOSAxMS0xMSAxMS0xMS00LjktMTEtMTEgNC45LTExIDExLTExek04IDE0Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMmgxYzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMnptMTcgMWMtNSAwLTkgNC05IDlzNCA5IDkgOSA5LTQgOS05LTQtOS05LTl6bTAgMmMzLjkgMCA3IDMuMSA3IDdzLTMuMSA3LTcgNy03LTMuMS03LTcgMy4xLTcgNy03eiIvPjwvc3ZnPgo=\";\nexport const folderImage: string =\n // tslint:disable-next-line:max-line-length\n \"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNzIgMTcyIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iI2ZmZiI+PHBhdGggZD0iTTEwLjMgMTMuOEM0LjcgMTMuOCAwIDE4LjQgMCAyNHYxMjdjLS4yLjctLjEgMS42LjIgMi4zIDEgNC43IDUuMiA4LjMgMTAuMSA4LjNoMTM0LjJjNS4xIDAgOS4zLTMuOSAxMC04LjhsLjItLjd2LS4ybC4xLS41di0uMWwxNy05Mi4zLjItLjN2LS4zYzAtNS43LTQuNy0xMC4zLTEwLjMtMTAuM1YzNy44YzAtNS42LTQuNy0xMC4zLTEwLjMtMTAuM0g2MmE3IDcgMCAwIDEtMS0xYy0uOS0xLTEuOS0yLjUtMy00LjItMS0xLjgtMi4yLTMuNi0zLjYtNS4ycy0zLjQtMy4zLTYuMi0zLjN6bTAgNi44aDM3LjljLS4zIDAgLjIgMCAxIDEgLjkgMSAxLjkgMi42IDMgNC4zYTQxIDQxIDAgMCAwIDMuNiA1LjJjMS40IDEuNiAzLjMgMy4zIDYuMSAzLjNoODkuNWMxLjkgMCAzLjQgMS41IDMuNCAzLjR2MTAuNEgyNy41Yy01LjQgMC05LjcgNC4zLTEwIDkuNmgtLjJsLS4xLjctMTAuMyA1NS43VjI0YzAtMiAxLjUtMy41IDMuNC0zLjV6TTI3LjUgNTVoMTM0LjJjMiAwIDMuNCAxLjUgMy40IDMuNWwtMTYuOSA5MS4ydi4zbC0uMi40VjE1MWwtLjIuNnYuN2EzLjQgMy40IDAgMCAxLTMuMyAyLjRIMTAuM2MtMiAwLTMuNC0xLjUtMy40LTMuNGwxNy05Mi4zLjItLjN2LS4zYzAtMiAxLjUtMy41IDMuNC0zLjV6Ii8+PC9zdmc+Cg==\";\nexport const switchCameraImage: string =\n // tslint:disable-next-line:max-line-length\n \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCA2NCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Ik0yNi4xNCA4YTQuOTkgNC45OSAwIDAgMC00LjE2IDIuMjI3bC0yLjIxOCAzLjMyOGExLjAwMyAxLjAwMyAwIDAgMS0uODMyLjQ0NUgxOHYtMmMwLTEuMTAyLS44OTgtMi0yLTJoLTZjLTEuMTAyIDAtMiAuODk4LTIgMnYySDVjLTEuNjUyIDAtMyAxLjM0OC0zIDN2MzZjMCAxLjY1MiAxLjM0OCAzIDMgM2g1NGMxLjY1MiAwIDMtMS4zNDggMy0zVjE3YzAtMS42NTItMS4zNDgtMy0zLTNoLTN2LTFjMC0xLjEwMi0uODk4LTItMi0yaC0yYy0xLjEwMiAwLTIgLjg5OC0yIDJ2MWgtNC45MzhhLjk5Ny45OTcgMCAwIDEtLjgyOC0uNDQxbC0yLjI1NC0zLjM1MkE1LjAwMSA1LjAwMSAwIDAgMCAzNy44MjggOHptMCAyaDExLjY4OGMxIDAgMS45MzQuNDk2IDIuNDkyIDEuMzI0bDIuMjU0IDMuMzUyQTIuOTk4IDIuOTk4IDAgMCAwIDQ1LjA2MyAxNkg1OWMuNTUgMCAxIC40NSAxIDF2MzZjMCAuNTUtLjQ1IDEtMSAxSDVjLS41NSAwLTEtLjQ1LTEtMVYxN2MwLS41NS40NS0xIDEtMWgxMy45M2MxLjAwNCAwIDEuOTM3LS41IDIuNDk2LTEuMzM2bDIuMjE5LTMuMzI4QTIuOTk4IDIuOTk4IDAgMCAxIDI2LjE0IDEwek0xMCAxMmg2djJoLTZ6bTQyIDFoMnYxaC0yem0tMjAgNWMtNS4yOSAwLTEwLjI0NiAyLjgzNi0xMi45MzQgNy4zOThhLjk5Ni45OTYgMCAwIDAgLjM1NiAxLjM2OC45OTcuOTk3IDAgMCAwIDEuMzY3LS4zNTZBMTMuMDY1IDEzLjA2NSAwIDAgMSAzMiAyMGM3LjE2OCAwIDEzIDUuODMyIDEzIDEzIDAgLjE4OC0uMDE2LjM3NS0uMDIzLjU2M2wtMi4yNy0yLjI3YTEgMSAwIDEgMC0xLjQxNCAxLjQxNGw0IDRjLjE5NS4xOTUuNDUuMjkzLjcwNy4yOTNhLjk5My45OTMgMCAwIDAgLjcwNy0uMjkzbDQtNGExIDEgMCAxIDAtMS40MTQtMS40MTRsLTIuMzIgMi4zMTZjLjAxMS0uMjAzLjAyNy0uNDA2LjAyNy0uNjA5IDAtOC4yNy02LjczLTE1LTE1LTE1ek0xOCAyOWExIDEgMCAwIDAtLjcwNy4yOTNsLTQgNGExIDEgMCAxIDAgMS40MTQgMS40MTRsMi4zMTMtMi4zMTZjLS4wMDguMjAzLS4wMi40MDYtLjAyLjYwOSAwIDguMjcgNi43MyAxNSAxNSAxNSA1LjM2NyAwIDEwLjM2LTIuODk4IDEzLjAyNy03LjU2M2EuOTk5Ljk5OSAwIDEgMC0xLjczNC0uOTkyQTEzLjA0MiAxMy4wNDIgMCAwIDEgMzIgNDZjLTcuMTY4IDAtMTMtNS44MzItMTMtMTMgMC0uMTg4LjAxMi0uMzc5LjAyLS41NjZsMi4yNzMgMi4yNzNjLjE5NS4xOTUuNDUuMjkzLjcwNy4yOTNhMSAxIDAgMCAwIC43MDctMS43MDdsLTQtNEExIDEgMCAwIDAgMTggMjl6bTkgMmMtLjU1NSAwLTEgLjQ0NS0xIDF2MmMwIC41NTUuNDQ1IDEgMSAxIC41NTUgMCAxLS40NDUgMS0xdi0yYzAtLjU1NS0uNDQ1LTEtMS0xem01IDBjLS41NTUgMC0xIC40NDUtMSAxdjJjMCAuNTU1LjQ0NSAxIDEgMSAuNTU1IDAgMS0uNDQ1IDEtMXYtMmMwLS41NTUtLjQ0NS0xLTEtMXptNSAwYy0uNTU1IDAtMSAuNDQ1LTEgMXYyYzAgLjU1NS40NDUgMSAxIDEgLjU1NSAwIDEtLjQ0NSAxLTF2LTJjMC0uNTU1LS40NDUtMS0xLTF6Ii8+PC9zdmc+Cg==\";\nexport const toggleTorchImage: string =\n // tslint:disable-next-line:max-line-length\n \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCA2NCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Ik0zMC45MzggMWMtLjQ0Ni4wMi0xIC4yMy0xLjMxMy42NTZhMS4zMDIgMS4zMDIgMCAwIDAtLjA2My4wOTRsLTYuNzggMTIuMDYzLS4wNjMuMDkzYy0uNTU1Ljc4NS0uNzI3IDEuNzMtLjU5NCAyLjY1NmwtMjAuNSAyMi41NjMtLjAzMS4wMzFjLTEuMDcgMS4yMTktLjY2NCAzLjAxMi40NjggNC4xNTdoLjAzMmw0LjU5NCA0LjU5M2MuNTcuNTcgMS4yNjUuOTUgMiAxLjA2My43MzQuMTEzIDEuNTQ2LS4wNTUgMi4xNTYtLjU5NGguMDMxbDIyLjU2My0yMC41Yy45My4xMjkgMS44Ny0uMDQzIDIuNjU2LS41OTQuMDItLjAxNS4wNDMtLjAxNS4wNjItLjAzMWwuMDYzLS4wMzEgMTIuMDMxLTYuNzgyYy4wMzEtLjAxOS4wNjMtLjAzOS4wOTQtLjA2Mi40MjItLjMxMy42MzYtLjg2Ny42NTYtMS4zMTMuMDItLjQ0NS0uMDk4LS44NC0uMjUtMS4yNS0uMzA1LS44Mi0uODI4LTEuNjktMS41MzEtMi42ODctMS40MDctMS45OTItMy41MTYtNC4zOS01Ljc1LTYuNjI1LTIuMjM1LTIuMjM0LTQuNjAyLTQuMzEzLTYuNTk0LTUuNzE5LS45OTYtLjcwMy0xLjg2Ny0xLjIyNi0yLjY4OC0xLjUzMS0uNDEtLjE1Mi0uODA0LS4yNy0xLjI1LS4yNXptLjIxOCAyLjAzMWMuMDc4LjAxMi4xNTMuMDI0LjM0NC4wOTQuNTIuMTkxIDEuMy42MzMgMi4yMTkgMS4yODEgMS44MzYgMS4yOTcgNC4xNjggMy4zNTYgNi4zNDMgNS41MzIgMi4xNzYgMi4xNzUgNC4yMzUgNC40NzYgNS41MzIgNi4zMTIuNjQ4LjkxOCAxLjA5IDEuNzMgMS4yODEgMi4yNS4wNy4xOTEuMDgyLjI2Ni4wOTQuMzQ0TDM1LjEyNSAyNS41M2EuOTQ5Ljk0OSAwIDAgMC0uMTI1LjA5NGMtLjMxNi4yNDItLjg2LjMyOC0xLjQzOC4yMTlhMS4wNTYgMS4wNTYgMCAwIDAtLjE4Ny0uMDYzIDMuMTEzIDMuMTEzIDAgMCAxLTEuNDM4LS44MTJsLTYuOTA2LTYuOTA3Yy0uOTc2LS45ODQtMS4xMjktMi40MzctLjY1Ni0zLjA2MmEuNTMyLjUzMiAwIDAgMCAuMDk0LS4wOTR6bS04LjIxOCAxNS41OTRjLjE5OS4yOTcuNDMuNTg2LjY4Ny44NDRsNi45MDYgNi45MDZjLjI2Mi4yNjIuNTQzLjQ4OC44NDQuNjg4TDkuNTMxIDQ2LjkwNmMtLjA4Ni4wNzgtLjI1NC4xMzctLjUzMS4wOTQtLjI3Ny0uMDQzLS42MjktLjIyMy0uOTA2LS41TDMuNSA0MS45MDZjLS41NTktLjU2Ni0uNTYzLTEuMjYxLS40MDYtMS40Mzd6bS0yLjg3NSA4LjMxM2MtLjc3IDAtMS41NDMuMjkyLTIuMTI1Ljg3NWwtMi4xMjUgMi4xMjVhMy4wMjMgMy4wMjMgMCAwIDAgMCA0LjI1IDMuMDIzIDMuMDIzIDAgMCAwIDQuMjUgMGwyLjEyNS0yLjEyNmEzLjAyMyAzLjAyMyAwIDAgMCAwLTQuMjUgMy4wMDIgMy4wMDIgMCAwIDAtMi4xMjUtLjg3NXptMCAyYy4yNTMgMCAuNTE5LjA4Mi43MTguMjguMzk5LjQuMzk5IDEuMDQgMCAxLjQzOGwtMi4xMjUgMi4xMjVhMS4wMTQgMS4wMTQgMCAwIDEtMS40MzcgMCAxLjAxNCAxLjAxNCAwIDAgMSAwLTEuNDM3Yy40MjItLjQyMiAxLjY5OS0xLjY5NiAyLjEyNS0yLjEyNS4xOTktLjIuNDY1LS4yODIuNzE4LS4yODJ6Ii8+PC9zdmc+Cg==\";\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","require('../../modules/es6.object.define-properties');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperties(T, D) {\n return $Object.defineProperties(T, D);\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","require('../../modules/es6.object.get-own-property-descriptor');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function getOwnPropertyDescriptor(it, key) {\n return $Object.getOwnPropertyDescriptor(it, key);\n};\n","require('../../modules/es6.symbol');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertySymbols;\n","var _Object$defineProperty = require(\"../core-js/object/define-property\");\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n _Object$defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","require('../modules/es6.parse-int');\nmodule.exports = require('../modules/_core').parseInt;\n","/**\n * A configuration object to request custom capabilities when accessing a camera.\n */\nexport interface CameraSettings {\n /**\n * The preferred video frame resolution.\n *\n * Not guaranteed to be precise: depending on device, browser and camera it could be different/lower than requested.\n *\n * Note that higher resolutions lead to slower processing times and higher memory requirements.\n */\n readonly resolutionPreference: CameraSettings.ResolutionPreference;\n}\n\nexport namespace CameraSettings {\n /**\n * Video frame resolution request.\n *\n * Not guaranteed to be precise: depending on device, browser and camera it could be different/lower than requested.\n *\n * Note that higher resolutions lead to slower processing times and higher memory requirements.\n */\n export enum ResolutionPreference {\n /**\n * Resolution of around 3840 x 2160.\n */\n ULTRA_HD = \"ultra-hd\",\n /**\n * Resolution of around 1920 x 1080.\n */\n FULL_HD = \"full-hd\",\n /**\n * Resolution of around 1280 x 720.\n */\n HD = \"hd\",\n }\n}\n","import { Camera } from \"../camera\";\nimport { CameraAccess } from \"../cameraAccess\";\nimport { CameraSettings } from \"../cameraSettings\";\nimport { CustomError } from \"../customError\";\nimport { GUI } from \"./gui\";\n\nexport enum MeteringMode {\n CONTINUOUS = \"continuous\",\n MANUAL = \"manual\",\n NONE = \"none\",\n SINGLE_SHOT = \"single-shot\",\n}\n\nexport interface ExtendedMediaTrackCapabilities extends MediaTrackCapabilities {\n focusMode?: MeteringMode[];\n torch?: boolean;\n zoom?: {\n max: number;\n min: number;\n step: number;\n };\n}\n\nexport interface ExtendedMediaTrackConstraintSet extends MediaTrackConstraintSet {\n torch?: boolean;\n zoom?: number;\n}\n\n/**\n * A barcode picker utility class used to handle camera interaction.\n */\nexport class CameraManager {\n private static readonly cameraAccessTimeoutMs: number = 4000;\n private static readonly cameraMetadataCheckTimeoutMs: number = 4000;\n private static readonly cameraMetadataCheckIntervalMs: number = 50;\n private static readonly getCapabilitiesTimeoutMs: number = 500;\n private static readonly autofocusIntervalMs: number = 1500;\n private static readonly manualToAutofocusResumeTimeoutMs: number = 5000;\n private static readonly manualFocusWaitTimeoutMs: number = 400;\n private static readonly noCameraErrorParameters: { name: string; message: string } = {\n name: \"NoCameraAvailableError\",\n message: \"No camera available\",\n };\n\n public selectedCamera?: Camera;\n public activeCamera?: Camera;\n public activeCameraSettings?: CameraSettings;\n\n private readonly triggerFatalError: (error: Error) => void;\n private readonly gui: GUI;\n private readonly postStreamInitializationListener: () => void = this.postStreamInitialization.bind(this);\n private readonly videoTrackUnmuteListener: () => void = this.videoTrackUnmuteRecovery.bind(this);\n private readonly triggerManualFocusListener: () => void = this.triggerManualFocus.bind(this);\n private readonly triggerZoomStartListener: () => void = this.triggerZoomStart.bind(this);\n private readonly triggerZoomMoveListener: () => void = this.triggerZoomMove.bind(this);\n\n private initialCameraType: Camera.Type;\n private selectedCameraSettings?: CameraSettings;\n private mediaStream?: MediaStream;\n private mediaTrackCapabilities?: ExtendedMediaTrackCapabilities;\n private cameraAccessTimeout: number;\n private cameraMetadataCheckInterval: number;\n private getCapabilitiesTimeout: number;\n private autofocusInterval: number;\n private manualToAutofocusResumeTimeout: number;\n private manualFocusWaitTimeout: number;\n private cameraSwitcherEnabled: boolean;\n private torchToggleEnabled: boolean;\n private tapToFocusEnabled: boolean;\n private pinchToZoomEnabled: boolean;\n private pinchToZoomDistance?: number;\n private pinchToZoomInitialZoom: number;\n private torchEnabled: boolean;\n private cameraInitializationPromise?: Promise;\n\n constructor(triggerFatalError: (error: Error) => void, gui: GUI) {\n this.triggerFatalError = triggerFatalError;\n this.gui = gui;\n this.initialCameraType = Camera.Type.BACK;\n }\n\n public setInteractionOptions(\n cameraSwitcherEnabled: boolean,\n torchToggleEnabled: boolean,\n tapToFocusEnabled: boolean,\n pinchToZoomEnabled: boolean\n ): void {\n this.cameraSwitcherEnabled = cameraSwitcherEnabled;\n this.torchToggleEnabled = torchToggleEnabled;\n this.tapToFocusEnabled = tapToFocusEnabled;\n this.pinchToZoomEnabled = pinchToZoomEnabled;\n }\n\n public isCameraSwitcherEnabled(): boolean {\n return this.cameraSwitcherEnabled;\n }\n\n public async setCameraSwitcherEnabled(enabled: boolean): Promise {\n this.cameraSwitcherEnabled = enabled;\n\n if (this.cameraSwitcherEnabled) {\n const cameras: Camera[] = await CameraAccess.getCameras();\n if (cameras.length > 1) {\n this.gui.setCameraSwitcherVisible(true);\n }\n } else {\n this.gui.setCameraSwitcherVisible(false);\n }\n }\n\n public isTorchToggleEnabled(): boolean {\n return this.torchToggleEnabled;\n }\n\n public setTorchToggleEnabled(enabled: boolean): void {\n this.torchToggleEnabled = enabled;\n\n if (this.torchToggleEnabled) {\n if (this.mediaStream != null && this.mediaTrackCapabilities?.torch === true) {\n this.gui.setTorchTogglerVisible(true);\n }\n } else {\n this.gui.setTorchTogglerVisible(false);\n }\n }\n\n public isTapToFocusEnabled(): boolean {\n return this.tapToFocusEnabled;\n }\n\n public setTapToFocusEnabled(enabled: boolean): void {\n this.tapToFocusEnabled = enabled;\n\n if (this.mediaStream != null) {\n if (this.tapToFocusEnabled) {\n this.enableTapToFocusListeners();\n } else {\n this.disableTapToFocusListeners();\n }\n }\n }\n\n public isPinchToZoomEnabled(): boolean {\n return this.pinchToZoomEnabled;\n }\n\n public setPinchToZoomEnabled(enabled: boolean): void {\n this.pinchToZoomEnabled = enabled;\n\n if (this.mediaStream != null) {\n if (this.pinchToZoomEnabled) {\n this.enablePinchToZoomListeners();\n } else {\n this.disablePinchToZoomListeners();\n }\n }\n }\n\n public setInitialCameraType(cameraType: Camera.Type): void {\n this.initialCameraType = cameraType;\n }\n\n public setSelectedCamera(camera?: Camera): void {\n this.selectedCamera = camera;\n }\n\n public setSelectedCameraSettings(cameraSettings?: CameraSettings): void {\n this.selectedCameraSettings = cameraSettings;\n }\n\n public async setupCameras(): Promise {\n if (this.cameraInitializationPromise != null) {\n return this.cameraInitializationPromise;\n }\n\n const mediaStreamTrack: void | MediaStreamTrack = await this.accessInitialCamera();\n const cameras: Camera[] = await CameraAccess.getCameras();\n\n if (this.cameraSwitcherEnabled && cameras.length > 1) {\n this.gui.setCameraSwitcherVisible(true);\n }\n\n if (mediaStreamTrack != null) {\n // We successfully accessed a camera, check if it's really the correct (main with wanted type or only) camera\n const wantedCamera: Camera | undefined = CameraAccess.adjustCamerasFromCameraStream(\n mediaStreamTrack,\n cameras,\n this.initialCameraType\n );\n if (wantedCamera != null) {\n this.setSelectedCamera(wantedCamera);\n this.updateActiveCameraCurrentResolution(wantedCamera);\n\n return Promise.resolve();\n }\n }\n\n if (this.selectedCamera == null) {\n return this.accessAutoselectedCamera(cameras);\n } else {\n return this.initializeCameraWithSettings(this.selectedCamera, this.selectedCameraSettings);\n }\n }\n\n public stopStream(): void {\n if (this.activeCamera != null) {\n this.activeCamera.currentResolution = undefined;\n }\n\n this.activeCamera = undefined;\n\n if (this.mediaStream != null) {\n window.clearTimeout(this.cameraAccessTimeout);\n window.clearInterval(this.cameraMetadataCheckInterval);\n window.clearTimeout(this.getCapabilitiesTimeout);\n window.clearTimeout(this.manualFocusWaitTimeout);\n window.clearTimeout(this.manualToAutofocusResumeTimeout);\n window.clearInterval(this.autofocusInterval);\n this.mediaStream.getVideoTracks().forEach((track) => {\n track.stop();\n });\n this.mediaStream = undefined;\n this.mediaTrackCapabilities = undefined;\n }\n }\n\n public applyCameraSettings(cameraSettings?: CameraSettings): Promise {\n this.selectedCameraSettings = cameraSettings;\n\n if (this.activeCamera == null) {\n return Promise.reject(new CustomError(CameraManager.noCameraErrorParameters));\n }\n\n return this.initializeCameraWithSettings(this.activeCamera, cameraSettings);\n }\n\n public reinitializeCamera(): Promise {\n if (this.activeCamera != null) {\n return this.initializeCameraWithSettings(this.activeCamera, this.activeCameraSettings).catch(\n this.triggerFatalError\n );\n }\n\n return Promise.resolve();\n }\n\n public async initializeCameraWithSettings(camera: Camera, cameraSettings?: CameraSettings): Promise {\n await (this.cameraInitializationPromise ?? Promise.resolve());\n this.setSelectedCamera(camera);\n this.selectedCameraSettings = this.activeCameraSettings = cameraSettings;\n let resolutionFallbackLevel: number;\n switch (cameraSettings?.resolutionPreference) {\n case CameraSettings.ResolutionPreference.ULTRA_HD:\n resolutionFallbackLevel = 0;\n break;\n case CameraSettings.ResolutionPreference.FULL_HD:\n resolutionFallbackLevel = 1;\n break;\n case CameraSettings.ResolutionPreference.HD:\n default:\n resolutionFallbackLevel = 2;\n break;\n }\n this.cameraInitializationPromise = this.initializeCameraAndCheckUpdatedSettings(camera, resolutionFallbackLevel);\n\n return this.cameraInitializationPromise;\n }\n\n public async setTorchEnabled(enabled: boolean): Promise {\n if (this.mediaStream != null && this.mediaTrackCapabilities?.torch === true) {\n this.torchEnabled = enabled;\n const videoTracks: MediaStreamTrack[] = this.mediaStream.getVideoTracks();\n // istanbul ignore else\n if (videoTracks.length !== 0 && typeof videoTracks[0].applyConstraints === \"function\") {\n await videoTracks[0].applyConstraints({ advanced: [{ torch: enabled }] });\n }\n }\n }\n\n public async toggleTorch(): Promise {\n this.torchEnabled = !this.torchEnabled;\n await this.setTorchEnabled(this.torchEnabled);\n }\n\n public async setZoom(zoomPercentage: number, currentZoom?: number): Promise {\n if (this.mediaStream != null && this.mediaTrackCapabilities?.zoom != null) {\n const videoTracks: MediaStreamTrack[] = this.mediaStream.getVideoTracks();\n // istanbul ignore else\n if (videoTracks.length !== 0 && typeof videoTracks[0].applyConstraints === \"function\") {\n const zoomRange: number = this.mediaTrackCapabilities.zoom.max - this.mediaTrackCapabilities.zoom.min;\n const targetZoom: number = Math.max(\n this.mediaTrackCapabilities.zoom.min,\n Math.min(\n (currentZoom ?? this.mediaTrackCapabilities.zoom.min) + zoomRange * zoomPercentage,\n this.mediaTrackCapabilities.zoom.max\n )\n );\n await videoTracks[0].applyConstraints({\n advanced: [{ zoom: targetZoom }],\n });\n }\n }\n }\n\n private sortAutoselectCameras(cameras: Camera[]): Camera[] {\n if (\n cameras.every((camera) => {\n return camera.label === \"\";\n })\n ) {\n // When no camera label is available cameras are already in front to back order, assume back cameras are in\n // reversed priority order (try to access last first)\n const frontCameras: Camera[] = cameras.filter((camera) => {\n return camera.cameraType === Camera.Type.FRONT;\n });\n const backCameras: Camera[] = cameras\n .filter((camera) => {\n return camera.cameraType === Camera.Type.BACK;\n })\n .reverse();\n cameras =\n this.initialCameraType === Camera.Type.FRONT\n ? [...frontCameras, ...backCameras]\n : [...backCameras, ...frontCameras];\n } else {\n cameras.sort((camera1, camera2) => {\n if (camera1.cameraType !== camera2.cameraType) {\n // istanbul ignore else\n if (camera1.cameraType === this.initialCameraType) {\n return -1;\n } else if (camera2.cameraType === this.initialCameraType) {\n return 1;\n }\n }\n\n return camera1.label.localeCompare(camera2.label);\n });\n }\n\n return cameras;\n }\n\n private async accessAutoselectedCamera(cameras: Camera[]): Promise {\n cameras = this.sortAutoselectCameras(cameras);\n\n let autoselectedCamera: Camera | undefined = cameras.shift();\n while (autoselectedCamera != null) {\n try {\n return await this.initializeCameraWithSettings(autoselectedCamera, this.selectedCameraSettings);\n } catch (error) {\n this.setSelectedCamera();\n if (cameras.length === 1) {\n this.gui.setCameraSwitcherVisible(false);\n }\n if (cameras.length >= 1) {\n console.warn(\"Couldn't access camera\", autoselectedCamera, error);\n autoselectedCamera = cameras.shift();\n continue;\n }\n throw error;\n }\n }\n throw new CustomError(CameraManager.noCameraErrorParameters);\n }\n\n private accessInitialCamera(): Promise {\n let initialCameraAccessPromise: Promise = Promise.resolve();\n\n if (this.selectedCamera == null) {\n const primaryCamera: Camera = {\n deviceId: \"\",\n label: \"\",\n cameraType: this.initialCameraType,\n };\n\n initialCameraAccessPromise = new Promise(async (resolve) => {\n try {\n await this.initializeCameraWithSettings(primaryCamera, this.selectedCameraSettings);\n if (this.mediaStream != null) {\n const videoTracks: MediaStreamTrack[] = this.mediaStream.getVideoTracks();\n if (videoTracks.length !== 0) {\n return resolve(videoTracks[0]);\n }\n }\n } catch {\n // Ignored\n } finally {\n this.setSelectedCamera();\n resolve();\n }\n });\n }\n\n return initialCameraAccessPromise;\n }\n\n private updateActiveCameraCurrentResolution(camera: Camera): void {\n this.activeCamera = camera;\n if (this.gui.videoElement.videoWidth > 2 && this.gui.videoElement.videoHeight > 2) {\n this.activeCamera.currentResolution = {\n width: this.gui.videoElement.videoWidth,\n height: this.gui.videoElement.videoHeight,\n };\n }\n this.gui.setMirrorImageEnabled(this.gui.isMirrorImageEnabled(), false);\n }\n\n private postStreamInitialization(): void {\n window.clearTimeout(this.getCapabilitiesTimeout);\n this.getCapabilitiesTimeout = window.setTimeout(() => {\n this.storeStreamCapabilities();\n this.setupAutofocus();\n if (this.torchToggleEnabled && this.mediaStream != null && this.mediaTrackCapabilities?.torch === true) {\n this.gui.setTorchTogglerVisible(true);\n }\n }, CameraManager.getCapabilitiesTimeoutMs);\n }\n\n private videoTrackUnmuteRecovery(): void {\n this.reinitializeCamera().catch(\n /* istanbul ignore next */ () => {\n // Ignored\n }\n );\n }\n\n private async triggerManualFocusForContinuous(): Promise {\n this.manualToAutofocusResumeTimeout = window.setTimeout(async () => {\n await this.triggerFocusMode(MeteringMode.CONTINUOUS);\n }, CameraManager.manualToAutofocusResumeTimeoutMs);\n\n try {\n await this.triggerFocusMode(MeteringMode.CONTINUOUS);\n this.manualFocusWaitTimeout = window.setTimeout(async () => {\n await this.triggerFocusMode(MeteringMode.MANUAL);\n }, CameraManager.manualFocusWaitTimeoutMs);\n } catch {\n // istanbul ignore next\n }\n }\n\n private async triggerManualFocusForSingleShot(): Promise {\n window.clearInterval(this.autofocusInterval);\n\n this.manualToAutofocusResumeTimeout = window.setTimeout(() => {\n this.autofocusInterval = window.setInterval(this.triggerAutoFocus.bind(this), CameraManager.autofocusIntervalMs);\n }, CameraManager.manualToAutofocusResumeTimeoutMs);\n\n try {\n await this.triggerFocusMode(MeteringMode.SINGLE_SHOT);\n } catch {\n // istanbul ignore next\n }\n }\n\n private async triggerManualFocus(event?: MouseEvent | TouchEvent): Promise {\n if (event != null) {\n event.preventDefault();\n if (event.type === \"touchend\" && (event).touches.length !== 0) {\n return;\n }\n // Check if we were using pinch-to-zoom\n if (this.pinchToZoomDistance != null) {\n this.pinchToZoomDistance = undefined;\n\n return;\n }\n }\n window.clearTimeout(this.manualFocusWaitTimeout);\n window.clearTimeout(this.manualToAutofocusResumeTimeout);\n if (this.mediaStream != null && this.mediaTrackCapabilities != null) {\n const focusModeCapability: MeteringMode[] | undefined = this.mediaTrackCapabilities.focusMode;\n if (focusModeCapability instanceof Array && focusModeCapability.includes(MeteringMode.SINGLE_SHOT)) {\n if (\n focusModeCapability.includes(MeteringMode.CONTINUOUS) &&\n focusModeCapability.includes(MeteringMode.MANUAL)\n ) {\n await this.triggerManualFocusForContinuous();\n } else if (!focusModeCapability.includes(MeteringMode.CONTINUOUS)) {\n await this.triggerManualFocusForSingleShot();\n }\n }\n }\n }\n\n private triggerZoomStart(event?: TouchEvent): void {\n if (event?.touches.length !== 2) {\n return;\n }\n event.preventDefault();\n this.pinchToZoomDistance = Math.hypot(\n (event.touches[1].screenX - event.touches[0].screenX) / screen.width,\n (event.touches[1].screenY - event.touches[0].screenY) / screen.height\n );\n if (this.mediaStream != null && this.mediaTrackCapabilities?.zoom != null) {\n const videoTracks: MediaStreamTrack[] = this.mediaStream.getVideoTracks();\n // istanbul ignore else\n if (videoTracks.length !== 0 && typeof videoTracks[0].getConstraints === \"function\") {\n this.pinchToZoomInitialZoom = this.mediaTrackCapabilities.zoom.min;\n const currentConstraints: MediaTrackConstraints = videoTracks[0].getConstraints();\n if (currentConstraints.advanced != null) {\n const currentZoomConstraint: ExtendedMediaTrackConstraintSet | undefined = currentConstraints.advanced.find(\n (constraint) => {\n return \"zoom\" in constraint;\n }\n );\n if (currentZoomConstraint?.zoom != null) {\n this.pinchToZoomInitialZoom = currentZoomConstraint.zoom;\n }\n }\n }\n }\n }\n\n private async triggerZoomMove(event?: TouchEvent): Promise {\n if (this.pinchToZoomDistance == null || event?.touches.length !== 2) {\n return;\n }\n event.preventDefault();\n await this.setZoom(\n (Math.hypot(\n (event.touches[1].screenX - event.touches[0].screenX) / screen.width,\n (event.touches[1].screenY - event.touches[0].screenY) / screen.height\n ) -\n this.pinchToZoomDistance) *\n 2,\n this.pinchToZoomInitialZoom\n );\n }\n\n private storeStreamCapabilities(): void {\n // istanbul ignore else\n if (this.mediaStream != null) {\n const videoTracks: MediaStreamTrack[] = this.mediaStream.getVideoTracks();\n // istanbul ignore else\n if (videoTracks.length !== 0 && typeof videoTracks[0].getCapabilities === \"function\") {\n this.mediaTrackCapabilities = videoTracks[0].getCapabilities();\n }\n }\n }\n\n private setupAutofocus(): void {\n window.clearTimeout(this.manualFocusWaitTimeout);\n window.clearTimeout(this.manualToAutofocusResumeTimeout);\n // istanbul ignore else\n if (this.mediaStream != null && this.mediaTrackCapabilities != null) {\n const focusModeCapability: MeteringMode[] | undefined = this.mediaTrackCapabilities.focusMode;\n if (\n focusModeCapability instanceof Array &&\n !focusModeCapability.includes(MeteringMode.CONTINUOUS) &&\n focusModeCapability.includes(MeteringMode.SINGLE_SHOT)\n ) {\n window.clearInterval(this.autofocusInterval);\n this.autofocusInterval = window.setInterval(\n this.triggerAutoFocus.bind(this),\n CameraManager.autofocusIntervalMs\n );\n }\n }\n }\n\n private triggerAutoFocus(): void {\n this.triggerFocusMode(MeteringMode.SINGLE_SHOT).catch(\n /* istanbul ignore next */ () => {\n // Ignored\n }\n );\n }\n\n private triggerFocusMode(focusMode: MeteringMode): Promise {\n // istanbul ignore else\n if (this.mediaStream != null) {\n const videoTracks: MediaStreamTrack[] = this.mediaStream.getVideoTracks();\n if (videoTracks.length !== 0 && typeof videoTracks[0].applyConstraints === \"function\") {\n return videoTracks[0].applyConstraints({ advanced: ([{ focusMode }]) });\n }\n }\n\n return Promise.reject(undefined);\n }\n\n private enableTapToFocusListeners(): void {\n [\"touchend\", \"mousedown\"].forEach((eventName) => {\n this.gui.videoElement.addEventListener(eventName, this.triggerManualFocusListener);\n });\n }\n\n private enablePinchToZoomListeners(): void {\n this.gui.videoElement.addEventListener(\"touchstart\", this.triggerZoomStartListener);\n this.gui.videoElement.addEventListener(\"touchmove\", this.triggerZoomMoveListener);\n }\n\n private disableTapToFocusListeners(): void {\n [\"touchend\", \"mousedown\"].forEach((eventName) => {\n this.gui.videoElement.removeEventListener(eventName, this.triggerManualFocusListener);\n });\n }\n\n private disablePinchToZoomListeners(): void {\n this.gui.videoElement.removeEventListener(\"touchstart\", this.triggerZoomStartListener);\n this.gui.videoElement.removeEventListener(\"touchmove\", this.triggerZoomMoveListener);\n }\n\n private async initializeCameraAndCheckUpdatedSettings(\n camera: Camera,\n resolutionFallbackLevel: number\n ): Promise {\n try {\n await this.initializeCamera(camera, resolutionFallbackLevel);\n // Check if due to asynchronous behaviour camera settings were changed while camera was initialized\n if (\n this.selectedCameraSettings !== this.activeCameraSettings &&\n (this.selectedCameraSettings == null ||\n this.activeCameraSettings == null ||\n (<(keyof CameraSettings)[]>Object.keys(this.selectedCameraSettings)).some((cameraSettingsProperty) => {\n return (\n (this.selectedCameraSettings)[cameraSettingsProperty] !==\n (this.activeCameraSettings)[cameraSettingsProperty]\n );\n }))\n ) {\n this.activeCameraSettings = this.selectedCameraSettings;\n\n return this.initializeCameraAndCheckUpdatedSettings(camera, resolutionFallbackLevel);\n }\n } finally {\n this.cameraInitializationPromise = undefined;\n }\n }\n\n private retryInitializeCameraIfNeeded(\n camera: Camera,\n resolutionFallbackLevel: number,\n resolve: (value?: void | PromiseLike | undefined) => void,\n reject: (reason?: Error) => void,\n error: Error\n ): Promise | void {\n if (resolutionFallbackLevel < 4) {\n return this.initializeCamera(camera, resolutionFallbackLevel + 1)\n .then(resolve)\n .catch(reject);\n } else {\n return reject(error);\n }\n }\n\n private async handleCameraInitializationError(\n error: Error,\n resolutionFallbackLevel: number,\n camera: Camera,\n resolve: (value?: void | PromiseLike | undefined) => void,\n reject: (reason?: Error) => void\n ): Promise {\n if (\n (error.message === \"Invalid constraint\" ||\n (error.name === \"OverconstrainedError\" && (error).constraint === \"deviceId\")) &&\n camera.label !== \"\"\n ) {\n // Camera might have changed deviceId: check for new cameras with same label and type but different deviceId\n const cameras: Camera[] = await CameraAccess.getCameras();\n const newCamera: Camera | undefined = cameras.find((currentCamera) => {\n return (\n currentCamera.label === camera.label &&\n currentCamera.cameraType === camera.cameraType &&\n currentCamera.deviceId !== camera.deviceId\n );\n });\n if (newCamera == null) {\n return this.retryInitializeCameraIfNeeded(camera, resolutionFallbackLevel, resolve, reject, error);\n } else {\n return this.initializeCamera(newCamera, resolutionFallbackLevel).then(resolve).catch(reject);\n }\n }\n if ([\"AbortError\", \"NotAllowedError\", \"NotFoundError\", \"NotReadableError\", \"SecurityError\"].includes(error.name)) {\n // Camera is not accessible at all\n return reject(error);\n }\n\n return this.retryInitializeCameraIfNeeded(camera, resolutionFallbackLevel, resolve, reject, error);\n }\n\n private initializeCamera(camera: Camera, resolutionFallbackLevel: number): Promise {\n if (camera == null) {\n return Promise.reject(new CustomError(CameraManager.noCameraErrorParameters));\n }\n this.stopStream();\n this.torchEnabled = false;\n this.gui.setTorchTogglerVisible(false);\n\n return new Promise(async (resolve, reject) => {\n try {\n const stream: MediaStream = await CameraAccess.accessCameraStream(resolutionFallbackLevel, camera);\n // Detect weird browser behaviour that on unsupported resolution returns a 2x2 video instead\n if (typeof stream.getTracks()[0].getSettings === \"function\") {\n const mediaTrackSettings: MediaTrackSettings = stream.getTracks()[0].getSettings();\n if (\n mediaTrackSettings.width != null &&\n mediaTrackSettings.height != null &&\n (mediaTrackSettings.width === 2 || mediaTrackSettings.height === 2)\n ) {\n if (resolutionFallbackLevel === 4) {\n return reject(\n new CustomError({ name: \"NotReadableError\", message: \"Could not initialize camera correctly\" })\n );\n } else {\n return this.initializeCamera(camera, resolutionFallbackLevel + 1)\n .then(resolve)\n .catch(reject);\n }\n }\n }\n this.mediaStream = stream;\n this.mediaStream.getVideoTracks().forEach((track) => {\n // Reinitialize camera on weird pause/resumption coming from the OS\n // This will add the listener only once in the case of multiple calls, identical listeners are ignored\n track.addEventListener(\"unmute\", this.videoTrackUnmuteListener);\n });\n // This will add the listener only once in the case of multiple calls, identical listeners are ignored\n this.gui.videoElement.addEventListener(\"loadedmetadata\", this.postStreamInitializationListener);\n if (this.tapToFocusEnabled) {\n this.enableTapToFocusListeners();\n }\n if (this.pinchToZoomEnabled) {\n this.enablePinchToZoomListeners();\n }\n this.resolveInitializeCamera(camera, resolve, reject);\n this.gui.videoElement.srcObject = stream;\n this.gui.videoElement.load();\n this.gui.playVideo();\n } catch (error) {\n await this.handleCameraInitializationError(error, resolutionFallbackLevel, camera, resolve, reject);\n }\n });\n }\n\n private resolveInitializeCamera(camera: Camera, resolve: () => void, reject: (reason: Error) => void): void {\n const cameraNotReadableError: Error = new CustomError({\n name: \"NotReadableError\",\n message: \"Could not initialize camera correctly\",\n });\n\n window.clearTimeout(this.cameraAccessTimeout);\n this.cameraAccessTimeout = window.setTimeout(() => {\n this.stopStream();\n reject(cameraNotReadableError);\n }, CameraManager.cameraAccessTimeoutMs);\n\n this.gui.videoElement.onresize = () => {\n if (this.activeCamera != null) {\n this.updateActiveCameraCurrentResolution(this.activeCamera);\n }\n };\n\n this.gui.videoElement.onloadeddata = () => {\n this.gui.videoElement.onloadeddata = null;\n window.clearTimeout(this.cameraAccessTimeout);\n\n // Detect weird browser behaviour that on unsupported resolution returns a 2x2 video instead\n // Also detect failed camera access with no error but also no video stream provided\n if (\n this.gui.videoElement.videoWidth > 2 &&\n this.gui.videoElement.videoHeight > 2 &&\n this.gui.videoElement.currentTime > 0\n ) {\n if (camera.deviceId !== \"\") {\n this.updateActiveCameraCurrentResolution(camera);\n }\n\n return resolve();\n }\n\n const cameraMetadataCheckStartTime: number = performance.now();\n\n window.clearInterval(this.cameraMetadataCheckInterval);\n this.cameraMetadataCheckInterval = window.setInterval(() => {\n // Detect weird browser behaviour that on unsupported resolution returns a 2x2 video instead\n // Also detect failed camera access with no error but also no video stream provided\n if (\n this.gui.videoElement.videoWidth <= 2 ||\n this.gui.videoElement.videoHeight <= 2 ||\n this.gui.videoElement.currentTime === 0\n ) {\n if (performance.now() - cameraMetadataCheckStartTime > CameraManager.cameraMetadataCheckTimeoutMs) {\n window.clearInterval(this.cameraMetadataCheckInterval);\n this.stopStream();\n\n return reject(cameraNotReadableError);\n }\n\n return;\n }\n\n window.clearInterval(this.cameraMetadataCheckInterval);\n if (camera.deviceId !== \"\") {\n this.updateActiveCameraCurrentResolution(camera);\n this.gui.videoElement.dispatchEvent(new Event(\"canplay\"));\n }\n\n return resolve();\n }, CameraManager.cameraMetadataCheckIntervalMs);\n };\n }\n}\n","import { Mutable } from \"../index\";\nimport { BrowserCompatibility } from \"./browserCompatibility\";\nimport { BrowserHelper } from \"./browserHelper\";\nimport { Camera } from \"./camera\";\nimport { UnsupportedBrowserError } from \"./unsupportedBrowserError\";\n\n/**\n * A helper object to interact with cameras.\n */\nexport namespace CameraAccess {\n /**\n * @hidden\n *\n * Handle localized camera labels. Supported languages:\n * English, German, French, Spanish (spain), Portuguese (brasil), Portuguese (portugal), Italian,\n * Chinese (simplified), Chinese (traditional), Japanese, Russian, Turkish, Dutch, Arabic, Thai, Swedish,\n * Danish, Vietnamese, Norwegian, Polish, Finnish, Indonesian, Hebrew, Greek, Romanian, Hungarian, Czech,\n * Catalan, Slovak, Ukraininan, Croatian, Malay, Hindi.\n */\n const backCameraKeywords: string[] = [\n \"rear\",\n \"back\",\n \"rück\",\n \"arrière\",\n \"trasera\",\n \"trás\",\n \"traseira\",\n \"posteriore\",\n \"后面\",\n \"後面\",\n \"背面\",\n \"后置\", // alternative\n \"後置\", // alternative\n \"背置\", // alternative\n \"задней\",\n \"الخلفية\",\n \"후\",\n \"arka\",\n \"achterzijde\",\n \"หลัง\",\n \"baksidan\",\n \"bagside\",\n \"sau\",\n \"bak\",\n \"tylny\",\n \"takakamera\",\n \"belakang\",\n \"אחורית\",\n \"πίσω\",\n \"spate\",\n \"hátsó\",\n \"zadní\",\n \"darrere\",\n \"zadná\",\n \"задня\",\n \"stražnja\",\n \"belakang\",\n \"बैक\",\n ];\n\n /**\n * @hidden\n */\n const cameraObjects: Map = new Map();\n\n /**\n * @hidden\n */\n const inaccessibleCameras: Set = new Set();\n\n /**\n * @hidden\n */\n let getCamerasPromise: Promise | undefined;\n\n /**\n * @hidden\n *\n * @param label The camera label.\n * @returns Whether the label mentions the camera being a back-facing one.\n */\n function isBackCameraLabel(label: string): boolean {\n const lowercaseLabel: string = label.toLowerCase();\n\n return backCameraKeywords.some((keyword) => {\n return lowercaseLabel.includes(keyword);\n });\n }\n\n /**\n * @hidden\n *\n * Map non-standard error names to standard ones.\n *\n * @param error The error object.\n */\n function mapNonStandardErrorName(error: Error): void {\n let name: string = error.name;\n // istanbul ignore next\n switch (name) {\n case \"DeviceCaptureError\":\n case \"ScreenCaptureError\":\n case \"TabCaptureError\":\n name = \"AbortError\";\n break;\n case \"InvalidStateError\":\n case \"MediaDeviceFailedDueToShutdown\":\n case \"MediaDeviceKillSwitchOn\":\n case \"PermissionDeniedError\":\n case \"PermissionDismissedError\":\n name = \"NotAllowedError\";\n break;\n case \"DevicesNotFoundError\":\n name = \"NotFoundError\";\n break;\n case \"SourceUnavailableError\":\n case \"TrackStartError\":\n name = \"NotReadableError\";\n break;\n case \"ConstraintNotSatisfiedError\":\n name = \"OverconstrainedError\";\n break;\n default:\n return;\n }\n Object.defineProperty(error, \"name\", {\n value: name,\n });\n }\n\n /**\n * @hidden\n *\n * @param cameras The array of available [[Camera]] objects.\n * @param activeCamera The current active [[Camera]] object.\n * @param activeCameraIsBackFacing Whether *activeCamera* is facing back (environment).\n */\n function adjustCameraTypes(cameras: Camera[], activeCamera: Camera, activeCameraIsBackFacing: boolean): void {\n // TODO: improve logic for possible multiple front/back cameras\n if (activeCameraIsBackFacing) {\n // Correct camera types if needed\n cameras.forEach((camera) => {\n if (camera.deviceId === activeCamera.deviceId) {\n (>camera).cameraType = Camera.Type.BACK;\n } else if (!isBackCameraLabel(camera.label)) {\n (>camera).cameraType = Camera.Type.FRONT;\n }\n });\n } else {\n (>activeCamera).cameraType = Camera.Type.FRONT;\n }\n }\n\n /**\n * @hidden\n *\n * Adjusts the cameras' type classification based on the given currently active video stream:\n * If the stream comes from an environment-facing camera, the camera is marked to be a back-facing camera\n * and the other cameras to be of other types accordingly (if they are not correctly set already).\n *\n * The method returns the currently active camera if it's actually the correct (main with wanted type or only) one.\n *\n * @param mediaStreamTrack The currently active `MediaStreamTrack`.\n * @param cameras The array of available [[Camera]] objects.\n * @param wantedCameraType The wanted camera type.\n * @returns The active [[Camera]] object if the stream is actually from the correct camera.\n */\n export function adjustCamerasFromCameraStream(\n mediaStreamTrack: MediaStreamTrack,\n cameras: Camera[],\n wantedCameraType: Camera.Type\n ): Camera | undefined {\n let mediaTrackSettings: MediaTrackSettings | undefined;\n if (typeof mediaStreamTrack.getSettings === \"function\") {\n mediaTrackSettings = mediaStreamTrack.getSettings();\n }\n const activeCamera: Camera | undefined = cameras.find((camera) => {\n return (\n camera.deviceId === mediaTrackSettings?.deviceId ||\n (camera.label !== \"\" && camera.label === mediaStreamTrack.label)\n );\n });\n if (activeCamera != null) {\n let mainCameraForType: Camera | undefined;\n if (\n cameras.every((camera) => {\n return camera.label === \"\";\n })\n ) {\n // When no camera label is available cameras are already in front to back order, assume main front camera is the\n // first one and main back camera is the last one, also don't adjust camera types\n mainCameraForType = cameras[wantedCameraType === Camera.Type.FRONT ? 0 : cameras.length - 1];\n } else {\n adjustCameraTypes(\n cameras,\n activeCamera,\n mediaTrackSettings?.facingMode === \"environment\" || isBackCameraLabel(mediaStreamTrack.label)\n );\n\n mainCameraForType = cameras\n .filter((camera) => {\n return camera.cameraType === wantedCameraType;\n })\n .sort((camera1, camera2) => {\n return camera1.label.localeCompare(camera2.label);\n })[0];\n }\n\n if (cameras.length === 1 || activeCamera.deviceId === mainCameraForType?.deviceId) {\n return activeCamera;\n }\n }\n\n return undefined;\n }\n\n /**\n * @hidden\n *\n * @param devices The list of available devices.\n * @returns The extracted list of accessible camera objects initialized from the given devices.\n */\n function extractAccessibleCamerasFromDevices(devices: MediaDeviceInfo[]): Camera[] {\n function createCamera(videoDevice: MediaDeviceInfo, index: number, videoDevices: MediaDeviceInfo[]): Camera {\n if (cameraObjects.has(videoDevice.deviceId)) {\n return cameraObjects.get(videoDevice.deviceId);\n }\n\n const label: string = videoDevice.label ?? \"\";\n let cameraType: Camera.Type;\n if (\n videoDevices.every((device) => {\n return device.label === \"\";\n })\n ) {\n // When no camera label is available, assume the camera is a front one if it's the only one or comes in the\n // first half of the list of cameras (if odd number of cameras, more likely to have more back than front ones)\n cameraType =\n videoDevices.length === 1 || index + 1 <= videoDevices.length / 2 ? Camera.Type.FRONT : Camera.Type.BACK;\n } else {\n cameraType = isBackCameraLabel(label) ? Camera.Type.BACK : Camera.Type.FRONT;\n }\n const camera: Camera = {\n deviceId: videoDevice.deviceId,\n label,\n cameraType,\n };\n\n cameraObjects.set(videoDevice.deviceId, camera);\n\n return camera;\n }\n\n const cameras: Camera[] = devices\n .filter((device) => {\n return device.kind === \"videoinput\";\n })\n .filter((videoDevice) => {\n // Ignore infrared cameras as they often fail to be accessed and are not useful in any case\n return !/\\b(?:ir|infrared)\\b/i.test(videoDevice.label);\n })\n .filter((videoDevice) => {\n return !inaccessibleCameras.has(videoDevice.deviceId);\n })\n .map(createCamera);\n if (\n cameras.length > 1 &&\n !cameras.some((camera) => {\n return camera.cameraType === Camera.Type.BACK;\n })\n ) {\n // Check if cameras are labeled with resolution information, take the higher-resolution one in that case\n // Otherwise pick the last camera\n let backCameraIndex: number = cameras.length - 1;\n\n const cameraResolutions: number[] = cameras.map((camera) => {\n const match: RegExpMatchArray | null = camera.label.match(/\\b([0-9]+)MP?\\b/i);\n if (match != null) {\n return parseInt(match[1], 10);\n }\n\n return NaN;\n });\n if (\n !cameraResolutions.some((cameraResolution) => {\n return isNaN(cameraResolution);\n })\n ) {\n backCameraIndex = cameraResolutions.lastIndexOf(Math.max(...cameraResolutions));\n }\n\n (>cameras[backCameraIndex]).cameraType = Camera.Type.BACK;\n }\n\n return cameras;\n }\n\n /**\n * Get a list of cameras (if any) available on the device, a camera access permission is requested to the user\n * the first time this method is called if needed.\n *\n * If the browser is incompatible the returned promise is rejected with a `UnsupportedBrowserError` error.\n *\n * @returns A promise resolving to the array of available [[Camera]] objects (could be empty).\n */\n export function getCameras(): Promise {\n if (getCamerasPromise != null) {\n return getCamerasPromise;\n }\n\n const browserCompatibility: BrowserCompatibility = BrowserHelper.checkBrowserCompatibility();\n if (!browserCompatibility.fullSupport) {\n return Promise.reject(new UnsupportedBrowserError(browserCompatibility));\n }\n\n const accessPermissionPromise: Promise = new Promise((resolve, reject) => {\n return enumerateDevices()\n .then((devices) => {\n if (\n devices\n .filter((device) => {\n return device.kind === \"videoinput\";\n })\n .every((device) => {\n return device.label === \"\";\n })\n ) {\n resolve(\n navigator.mediaDevices\n .getUserMedia({\n video: true,\n audio: false,\n })\n .catch(\n /* istanbul ignore next */ () => {\n // Ignored\n return null;\n }\n )\n );\n } else {\n resolve(null);\n }\n })\n .catch(reject);\n });\n\n getCamerasPromise = new Promise(async (resolve, reject) => {\n let stream!: MediaStream | null;\n try {\n stream = await accessPermissionPromise;\n const devices: MediaDeviceInfo[] = await enumerateDevices();\n const cameras: Camera[] = extractAccessibleCamerasFromDevices(devices);\n\n console.debug(\"Camera list: \", ...cameras);\n\n return resolve(cameras);\n } catch (error) {\n mapNonStandardErrorName(error);\n reject(error);\n } finally {\n stream?.getVideoTracks().forEach((track) => {\n track.stop();\n });\n getCamerasPromise = undefined;\n }\n });\n\n return getCamerasPromise;\n }\n\n /**\n * @hidden\n *\n * Call `navigator.mediaDevices.getUserMedia` asynchronously in a `setTimeout` call.\n *\n * @param getUserMediaParams The parameters for the `navigator.mediaDevices.getUserMedia` call.\n * @returns A promise resolving when the camera is accessed.\n */\n function getUserMediaDelayed(getUserMediaParams: MediaStreamConstraints): Promise {\n console.debug(\"Camera access:\", getUserMediaParams.video);\n\n return new Promise((resolve, reject) => {\n window.setTimeout(() => {\n navigator.mediaDevices.getUserMedia(getUserMediaParams).then(resolve).catch(reject);\n }, 0);\n });\n }\n\n /**\n * @hidden\n *\n * Get the *getUserMedia* *video* parameters to be used given a resolution fallback level and the browser used.\n *\n * @param resolutionFallbackLevel The number representing the wanted resolution, from 0 to 4,\n * resulting in higher to lower video resolutions.\n * @returns The resulting *getUserMedia* *video* parameters.\n */\n function getUserMediaVideoParams(resolutionFallbackLevel: number): MediaTrackConstraints {\n const userMediaVideoParams: MediaTrackConstraints = {\n resizeMode: \"none\",\n };\n switch (resolutionFallbackLevel) {\n case 0:\n return {\n ...userMediaVideoParams,\n width: { min: 3200, ideal: 3840, max: 4096 },\n height: { min: 1800, ideal: 2160, max: 2400 },\n };\n case 1:\n return {\n ...userMediaVideoParams,\n width: { min: 1400, ideal: 1920, max: 2160 },\n height: { min: 900, ideal: 1080, max: 1440 },\n };\n case 2:\n return {\n ...userMediaVideoParams,\n width: { min: 960, ideal: 1280, max: 1440 },\n height: { min: 480, ideal: 720, max: 960 },\n };\n case 3:\n return {\n ...userMediaVideoParams,\n width: { min: 640, ideal: 640, max: 800 },\n height: { min: 480, ideal: 480, max: 600 },\n };\n default:\n return {};\n }\n }\n\n /**\n * @hidden\n *\n * Try to access a given camera for video input at the given resolution level.\n *\n * If a camera is inaccessible because of unknown issues, then it's added to the device blacklist.\n *\n * @param resolutionFallbackLevel The number representing the wanted resolution, from 0 to 4,\n * resulting in higher to lower video resolutions.\n * @param camera The camera to try to access for video input.\n * @returns A promise resolving to the `MediaStream` object coming from the accessed camera.\n */\n export function accessCameraStream(resolutionFallbackLevel: number, camera: Camera): Promise {\n const getUserMediaParams: MediaStreamConstraints = {\n audio: false,\n video: getUserMediaVideoParams(resolutionFallbackLevel),\n };\n\n if (camera.deviceId === \"\") {\n (getUserMediaParams.video).facingMode = {\n ideal: camera.cameraType === Camera.Type.BACK ? \"environment\" : \"user\",\n };\n } else {\n (getUserMediaParams.video).deviceId = {\n exact: camera.deviceId,\n };\n }\n\n return getUserMediaDelayed(getUserMediaParams).catch((error) => {\n mapNonStandardErrorName(error);\n if (camera.deviceId !== \"\" && (error.name !== \"OverconstrainedError\" || resolutionFallbackLevel === 4)) {\n inaccessibleCameras.add(camera.deviceId);\n cameraObjects.delete(camera.deviceId);\n }\n throw error;\n });\n }\n\n /**\n * @hidden\n *\n * Get a list of available devices in a cross-browser compatible way.\n *\n * @returns A promise resolving to the `MediaDeviceInfo` array of all available devices.\n */\n function enumerateDevices(): Promise {\n if (typeof navigator.enumerateDevices === \"function\") {\n return navigator.enumerateDevices();\n } else if (\n typeof navigator.mediaDevices === \"object\" &&\n typeof navigator.mediaDevices.enumerateDevices === \"function\"\n ) {\n return navigator.mediaDevices.enumerateDevices();\n } else {\n return new Promise((resolve, reject) => {\n try {\n if (window.MediaStreamTrack?.getSources == null) {\n throw new Error();\n }\n window.MediaStreamTrack.getSources((devices) => {\n resolve(\n devices\n .filter((device) => {\n return device.kind.toLowerCase() === \"video\" || device.kind.toLowerCase() === \"videoinput\";\n })\n .map((device) => {\n return {\n deviceId: device.deviceId ?? \"\",\n groupId: device.groupId,\n kind: \"videoinput\",\n label: device.label,\n toJSON: /* istanbul ignore next */ function (): MediaDeviceInfo {\n return this;\n },\n };\n })\n );\n });\n } catch {\n const browserCompatibility: BrowserCompatibility = {\n fullSupport: false,\n scannerSupport: true,\n missingFeatures: [BrowserCompatibility.Feature.MEDIA_DEVICES],\n };\n\n return reject(new UnsupportedBrowserError(browserCompatibility));\n }\n });\n }\n }\n}\n","import { Camera } from \"../camera\";\nimport { CameraSettings } from \"../cameraSettings\";\nimport { CameraManager } from \"./cameraManager\";\n\n/**\n * A dummy barcode picker utility class used to (not) handle camera interaction.\n */\n// istanbul ignore next\nexport class DummyCameraManager extends CameraManager {\n public setInteractionOptions(_1: boolean, _2: boolean, _3: boolean, _4: boolean): void {\n return;\n }\n\n public isCameraSwitcherEnabled(): boolean {\n return false;\n }\n\n public setCameraSwitcherEnabled(_1: boolean): Promise {\n return Promise.resolve();\n }\n\n public isTorchToggleEnabled(): boolean {\n return false;\n }\n\n public setTorchToggleEnabled(_1: boolean): void {\n return;\n }\n\n public isTapToFocusEnabled(): boolean {\n return false;\n }\n\n public setTapToFocusEnabled(_1: boolean): void {\n return;\n }\n\n public isPinchToZoomEnabled(): boolean {\n return false;\n }\n\n public setPinchToZoomEnabled(_1: boolean): void {\n return;\n }\n\n public setInitialCameraType(_1?: Camera.Type): void {\n return;\n }\n\n public setSelectedCamera(_1?: Camera): void {\n return;\n }\n\n public setSelectedCameraSettings(_1?: CameraSettings): void {\n return;\n }\n\n public setupCameras(): Promise {\n return Promise.resolve();\n }\n\n public stopStream(): void {\n return;\n }\n\n public applyCameraSettings(_1?: CameraSettings): Promise {\n return Promise.resolve();\n }\n\n public reinitializeCamera(): Promise {\n return Promise.resolve();\n }\n\n public initializeCameraWithSettings(_1: Camera, _2?: CameraSettings): Promise {\n return Promise.resolve();\n }\n\n public setTorchEnabled(_1: boolean): Promise {\n return Promise.resolve();\n }\n\n public toggleTorch(): Promise {\n return Promise.resolve();\n }\n\n public setZoom(_1: number, _2?: number): Promise {\n return Promise.resolve();\n }\n}\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","var resizeObservers = [];\nexport { resizeObservers };\n","var msg = 'ResizeObserver loop completed with undelivered notifications.';\nvar deliverResizeLoopError = function () {\n var event;\n if (typeof ErrorEvent === 'function') {\n event = new ErrorEvent('error', {\n message: msg\n });\n }\n else {\n event = document.createEvent('Event');\n event.initEvent('error', false, false);\n event.message = msg;\n }\n window.dispatchEvent(event);\n};\nexport { deliverResizeLoopError };\n","var DOMRectReadOnly = (function () {\n function DOMRectReadOnly(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.top = this.y;\n this.left = this.x;\n this.bottom = this.top + this.height;\n this.right = this.left + this.width;\n return Object.freeze(this);\n }\n DOMRectReadOnly.prototype.toJSON = function () {\n var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n };\n DOMRectReadOnly.fromRect = function (rectangle) {\n return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n };\n return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","var trigger;\nvar callbacks = [];\nvar notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };\nvar queueMicroTask = function (callback) {\n if (!trigger) {\n var toggle_1 = 0;\n var el_1 = document.createTextNode('');\n var config = { characterData: true };\n new MutationObserver(function () { return notify(); }).observe(el_1, config);\n trigger = function () { el_1.textContent = \"\" + (toggle_1 ? toggle_1-- : toggle_1++); };\n }\n callbacks.push(callback);\n trigger();\n};\nexport { queueMicroTask };\n","import { EventEmitter, ListenerFn } from \"eventemitter3\";\nimport { Howl, Howler } from \"howler/dist/howler.core.min.js\";\n\nimport { beepSound } from \"../assets/base64assets\";\n\nimport { configurePhase } from \"../../index\";\nimport { BrowserCompatibility } from \"../browserCompatibility\";\nimport { BrowserHelper } from \"../browserHelper\";\nimport { Camera } from \"../camera\";\nimport { CameraSettings } from \"../cameraSettings\";\nimport { CustomError } from \"../customError\";\nimport { ImageSettings } from \"../imageSettings\";\nimport { Parser } from \"../parser\";\nimport { Scanner } from \"../scanner\";\nimport { ScanResult } from \"../scanResult\";\nimport { ScanSettings } from \"../scanSettings\";\nimport { SearchArea } from \"../searchArea\";\nimport { SingleImageModePlatformSettings, SingleImageModeSettings } from \"../singleImageModeSettings\";\nimport { UnsupportedBrowserError } from \"../unsupportedBrowserError\";\nimport { CameraManager } from \"./cameraManager\";\nimport { DummyCameraManager } from \"./dummyCameraManager\";\nimport { GUI } from \"./gui\";\n\n/**\n * @hidden\n */\ntype EventName = \"ready\" | \"submitFrame\" | \"processFrame\" | \"scan\" | \"scanError\";\n\n/**\n * @hidden\n */\nclass BarcodePickerEventEmitter extends EventEmitter {}\n\n/**\n * A barcode picker element used to get and show camera input and perform scanning operations.\n *\n * The barcode picker will automatically fit and scale inside the given *originElement*.\n *\n * Each barcode picker internally contains a [[Scanner]] object with its own WebWorker thread running a\n * separate copy of the external Scandit Engine library. To optimize loading times and performance it's\n * recommended to reuse the same picker and to already create the picker in advance (hidden) and just\n * display it when needed whenever possible.\n *\n * As the loading of the external Scandit Engine library can take some time, the picker always starts inactive\n * (but showing GUI and video) and then activates, if not paused, as soon as the library is ready to scan.\n * The [[on]] method targeting the [[ready]] event can be used to set up a listener function to be called when the\n * library is loaded. The picker will be ready to start scanning when the library is fully loaded.\n *\n * By default the external Scandit Engine library is preloaded in order to reduce the initialization time as much as\n * possible.\n *\n * The picker can also operate in Single Image Mode: letting the user click/tap to take a single image to be scanned\n * via the camera (mobile) or a file select dialog (desktop). This is provided automatically as fallback by\n * default when the OS/browser only supports part of the needed features and cannot provide direct access to the camera\n * for video streaming and continuous scanning, or can also be forced on/off. This behaviour can be set up on creation\n * via the *singleImageModeSettings* option. Note that in this mode some of the functions provided by the picker will\n * have no effect.\n *\n * By default an alert is shown if an internal error during scanning is encountered which prevents the scanning\n * procedure from continuing when running on a local IP address. As this uses the built-in [[scanError]] event\n * functionality, if unwanted it can be disabled by calling [[removeAllListeners]] on the BarcodePicker\n * instance (right after creation).\n *\n * In accordance with our license terms, the Scandit logo displayed in the bottom right corner of the barcode picker\n * must be displayed and cannot be hidden by any method. Workarounds are not allowed.\n */\nexport class BarcodePicker {\n private readonly cameraManager: CameraManager;\n private readonly gui: GUI;\n private readonly eventEmitter: BarcodePickerEventEmitter;\n private readonly scanner: Scanner;\n private readonly beepSound: Howl;\n private readonly vibrateFunction?: (pattern: number | number[]) => boolean;\n private readonly scannerReadyEventListener: () => void;\n\n private playSoundOnScan: boolean;\n private vibrateOnScan: boolean;\n private scanningPaused: boolean;\n private fatalError: Error;\n private latestVideoTimeProcessed: number;\n private destroyed: boolean;\n private isReadyToWork: boolean;\n private cameraAccess: boolean;\n private targetScanningFPS: number;\n private averageProcessingTime: number;\n private externalImageData: Uint8Array;\n private internalImageData?: Uint8Array;\n\n private constructor(\n originElement: HTMLElement,\n {\n visible,\n singleImageModeEnabled,\n singleImageModeSettings,\n playSoundOnScan,\n vibrateOnScan,\n scanningPaused,\n guiStyle,\n videoFit,\n laserArea,\n viewfinderArea,\n scanner,\n scanSettings,\n cameraType,\n targetScanningFPS,\n hideLogo,\n }: {\n visible: boolean;\n singleImageModeEnabled: boolean;\n singleImageModeSettings: SingleImageModePlatformSettings;\n playSoundOnScan: boolean;\n vibrateOnScan: boolean;\n scanningPaused: boolean;\n guiStyle: BarcodePicker.GuiStyle;\n videoFit: BarcodePicker.ObjectFit;\n laserArea?: SearchArea;\n viewfinderArea?: SearchArea;\n scanner?: Scanner;\n scanSettings: ScanSettings;\n cameraType: Camera.Type;\n targetScanningFPS: number;\n hideLogo: boolean;\n }\n ) {\n this.isReadyToWork = false;\n this.destroyed = false;\n this.scanningPaused = scanningPaused;\n\n Howler.autoSuspend = false;\n this.beepSound = new Howl({\n src: beepSound,\n });\n\n this.vibrateFunction = navigator.vibrate ?? navigator.webkitVibrate ?? navigator.mozVibrate ?? navigator.msVibrate;\n\n this.eventEmitter = new EventEmitter();\n\n this.setPlaySoundOnScanEnabled(playSoundOnScan);\n this.setVibrateOnScanEnabled(vibrateOnScan);\n this.setTargetScanningFPS(targetScanningFPS);\n\n this.scanner = scanner?.applyScanSettings(scanSettings) ?? new Scanner({ scanSettings });\n this.scannerReadyEventListener = this.handleScannerReady.bind(this);\n this.scanner.on(\"ready\", this.scannerReadyEventListener);\n\n this.gui = new GUI({\n scanner: this.scanner,\n originElement,\n singleImageModeEnabled,\n singleImageModeSettings,\n scanningPaused,\n visible,\n guiStyle,\n videoFit,\n hideLogo,\n cameraType,\n laserArea,\n viewfinderArea,\n cameraUploadCallback: this.processVideoFrame.bind(this, true),\n });\n\n if (singleImageModeEnabled) {\n this.cameraManager = new DummyCameraManager(this.triggerFatalError.bind(this), this.gui);\n } else {\n this.cameraManager = new CameraManager(this.triggerFatalError.bind(this), this.gui);\n this.scheduleVideoProcessing();\n }\n\n this.gui.setCameraManager(this.cameraManager);\n }\n\n /**\n * Create a [[BarcodePicker]] instance, creating the needed HTML in the given origin element.\n * If the *accessCamera* option is enabled (active by default) and the picker is not in Single Image Mode,\n * the available cameras are accessed and camera access permission is requested to the user if needed.\n * This object expects that at least a camera is available. The active camera is accessed and kept active during the\n * lifetime of the picker (also when hidden or scanning is paused), and is only released when [[destroy]] is called.\n *\n * It is required to having configured the library via [[configure]] before this object can be created.\n *\n * Depending on library configuration, parameters, device/browser features and user permissions for camera access, any\n * of the following errors could be the rejected result of the returned promise:\n * - `AbortError`\n * - `LibraryNotConfiguredError`\n * - `NoCameraAvailableError`\n * - `NoOriginElementError`\n * - `NotAllowedError`\n * - `NotFoundError`\n * - `NotReadableError`\n * - `SecurityError`\n * - `UnsupportedBrowserError`\n *\n * @param originElement The HTMLElement inside which all the necessary elements for the picker will be added.\n * @param visible
Default = true
\n * Whether the picker starts in a visible state.\n * @param singleImageModeSettings
Default = 
\n *
{\n   *   desktop: {\n   *     usageStrategy: SingleImageModeSettings.UsageStrategy.FALLBACK,\n   *     informationElement: <HTMLElement>,\n   *     buttonElement: <SVGElement>,\n   *     containerStyle: { backgroundColor: \"#333333\" },\n   *     informationStyle: { color: \"#FFFFFF\" },\n   *     buttonStyle: { borderColor: \"#FFFFFF\", color: \"#FFFFFF\", fill: \"#FFFFFF\" }\n   *   },\n   *   mobile: {\n   *     usageStrategy: SingleImageModeSettings.UsageStrategy.FALLBACK,\n   *     informationElement: <HTMLElement>,\n   *     buttonElement: <SVGElement>,\n   *     containerStyle: { backgroundColor: \"#333333\" },\n   *     informationStyle: { color: \"#FFFFFF\" },\n   *     buttonStyle: { borderColor: \"#FFFFFF\", color: \"#FFFFFF\", fill: \"#FFFFFF\" }\n   *   }\n   * }
\n * Settings for Single Image Mode: an alternative/fallback mode for a barcode picker to provide single camera\n * pictures to be scanned instead of continuous camera video stream access. In Single Image Mode users click/tap to\n * directly take a picture with the camera (mobile) or upload a file (desktop). Its usage depends on the given\n * settings and the camera video stream features provided by the OS/browser.\n * @param playSoundOnScan
Default = false
\n * Whether a sound is played on barcode recognition (iOS requires user input).\n * @param vibrateOnScan
Default = false
\n * Whether the device vibrates on barcode recognition (only Chrome & Firefox, requires user input).\n * @param scanningPaused
Default = false
\n * Whether the picker starts in a paused scanning state.\n * @param guiStyle
Default = GuiStyle.LASER
\n * The GUI style for the picker.\n * @param videoFit
Default = ObjectFit.CONTAIN
\n * The fit type for the video element of the picker.\n * @param laserArea
Default = undefined
\n * The area of the laser displayed when the GUI style is set to *laser* (the laser will match the width and be\n * vertically centered), by default the area will match the current [[ScanSettings]]'s *searchArea* option.\n * @param viewfinderArea
Default = undefined
\n * The area of the viewfinder displayed when the GUI style is set to *viewfinder*, by default the area will match\n * the current [[ScanSettings]]'s *searchArea* option.\n * @param enableCameraSwitcher
Default = true
\n * Whether to show a GUI button to switch between different cameras (when available).\n * @param enableTorchToggle
Default = true
\n * Whether to show a GUI button to toggle device torch on/off (when available, only Chrome).\n * @param enableTapToFocus
Default = true
\n * Whether to trigger a manual focus of the camera when clicking/tapping on the video (when available, only Chrome).\n * @param enablePinchToZoom
Default = true
\n * Whether to control the zoom of the camera when doing a pinching gesture on the video (when available, only Chrome).\n * @param accessCamera
Default = true
\n * Whether to immediately access the camera (and requesting user permissions if needed) on picker creation.\n * @param camera
Default = undefined
\n * The initial camera to be used for video input, if not specified the camera automatically selected depending on\n * the *cameraType* option will be used.\n * @param cameraType
Default = Camera.Type.BACK
\n * The preferred initial camera type (facing mode/direction) to be used for video input and Single Image Mode\n * (when available), by default the back or only camera will be used. If the *camera* option is provided then\n * *cameraType* is ignored.\n * @param cameraSettings
Default = undefined
\n * The camera options used when accessing the camera, by default HD resolution is used.\n * @param scanner
Default = undefined
\n * The scanner object responsible for scanning via the external Scandit Engine library\n * (a new scanner will be created and initialized if not provided).\n * @param scanSettings
Default = new ScanSettings()
\n * The configuration object for scanning options to be applied to the scanner (all symbologies disabled by default).\n * @param targetScanningFPS
Default = 30
\n * The target frames per second to be processed, the final speed is limited by the camera framerate (usually 30 FPS)\n * and the frame processing time of the device. By setting this to lower numbers devices can save power by performing\n * less work during scanning operations, depending on device speed (faster devices can \"sleep\" for longer periods).\n * Must be a number bigger than 0.\n * @returns A promise resolving to the created ready [[BarcodePicker]] object.\n */\n public static create(\n originElement: HTMLElement,\n {\n visible = true,\n singleImageModeSettings = {},\n playSoundOnScan = false,\n vibrateOnScan = false,\n scanningPaused = false,\n guiStyle = BarcodePicker.GuiStyle.LASER,\n videoFit = BarcodePicker.ObjectFit.CONTAIN,\n laserArea,\n viewfinderArea,\n scanner,\n scanSettings = new ScanSettings(),\n enableCameraSwitcher = true,\n enableTorchToggle = true,\n enableTapToFocus = true,\n enablePinchToZoom = true,\n accessCamera = true,\n camera,\n cameraType = Camera.Type.BACK,\n cameraSettings,\n targetScanningFPS = 30,\n }: {\n visible?: boolean;\n singleImageModeSettings?: SingleImageModeSettings;\n playSoundOnScan?: boolean;\n vibrateOnScan?: boolean;\n scanningPaused?: boolean;\n guiStyle?: BarcodePicker.GuiStyle;\n videoFit?: BarcodePicker.ObjectFit;\n laserArea?: SearchArea;\n viewfinderArea?: SearchArea;\n scanner?: Scanner;\n scanSettings?: ScanSettings;\n enableCameraSwitcher?: boolean;\n enableTorchToggle?: boolean;\n enableTapToFocus?: boolean;\n enablePinchToZoom?: boolean;\n accessCamera?: boolean;\n camera?: Camera;\n cameraType?: Camera.Type;\n cameraSettings?: CameraSettings;\n targetScanningFPS?: number;\n } = {}\n ): Promise {\n const deviceType: string | undefined = BrowserHelper.userAgentInfo.getDevice().type;\n const isMobileDevice: boolean = deviceType === \"mobile\" || deviceType === \"tablet\";\n const singleImageModePlatformSettings: SingleImageModePlatformSettings =\n (isMobileDevice ? singleImageModeSettings.mobile : singleImageModeSettings.desktop) ?? {};\n const singleImageModeDisallowed: boolean =\n singleImageModePlatformSettings.usageStrategy === SingleImageModeSettings.UsageStrategy.NEVER;\n const singleImageModeForced: boolean =\n singleImageModePlatformSettings.usageStrategy === SingleImageModeSettings.UsageStrategy.ALWAYS;\n\n const browserCompatibility: BrowserCompatibility = BrowserHelper.checkBrowserCompatibility();\n if (!browserCompatibility.scannerSupport || (singleImageModeDisallowed && !browserCompatibility.fullSupport)) {\n return Promise.reject(new UnsupportedBrowserError(browserCompatibility));\n }\n if (!browserCompatibility.fullSupport && !singleImageModeForced) {\n console.log(\n \"NOTE: BarcodePicker's Single Image Mode is being used as fallback as the OS/browser combination doesn't \" +\n \"support camera video stream scanning (https://caniuse.com/#feat=stream). \" +\n 'You can configure this behaviour via the \"singleImageModeSettings\" option.'\n );\n }\n\n if (configurePhase !== \"done\") {\n return Promise.reject(\n new CustomError({\n name: \"LibraryNotConfiguredError\",\n message:\n configurePhase === \"started\"\n ? `The library has not completed its configuration yet, please call 'configure' and wait for the returned\n promise's resolution`\n : `The library was not configured, 'configure' must be called with valid parameters before instantiating\n the BarcodePicker`,\n })\n );\n }\n if (!BrowserHelper.isValidHTMLElement(originElement)) {\n return Promise.reject(\n new CustomError({\n name: \"NoOriginElementError\",\n message: \"A valid origin HTML element must be given\",\n })\n );\n }\n\n const barcodePicker: BarcodePicker = new BarcodePicker(originElement, {\n visible,\n singleImageModeEnabled: browserCompatibility.fullSupport ? singleImageModeForced : true,\n singleImageModeSettings: singleImageModePlatformSettings,\n playSoundOnScan,\n vibrateOnScan,\n scanningPaused,\n guiStyle,\n videoFit,\n laserArea,\n viewfinderArea,\n scanner,\n scanSettings,\n cameraType,\n targetScanningFPS,\n // tslint:disable-next-line:use-named-parameter\n hideLogo: arguments[1]?.hideLogo === true, // Hidden parameter\n });\n\n barcodePicker.cameraManager.setInteractionOptions(\n enableCameraSwitcher,\n enableTorchToggle,\n enableTapToFocus,\n enablePinchToZoom\n );\n barcodePicker.cameraManager.setInitialCameraType(cameraType);\n barcodePicker.cameraManager.setSelectedCamera(camera);\n barcodePicker.cameraManager.setSelectedCameraSettings(cameraSettings);\n\n barcodePicker.cameraAccess = accessCamera;\n\n // Show error in alert on ScanError by default when running on local IP address for easier customer debugging\n barcodePicker.on(\"scanError\", (error) => {\n // istanbul ignore if\n if ([\"localhost\", \"127.0.0.1\", \"\"].includes(window.location.hostname)) {\n alert(error);\n }\n });\n\n if (accessCamera) {\n return barcodePicker.cameraManager.setupCameras().then(() => {\n return barcodePicker;\n });\n }\n\n return Promise.resolve(barcodePicker);\n }\n\n /**\n * Stop scanning and displaying video output, remove HTML elements added to the page,\n * destroy the internal [[Scanner]] (by default) and destroy the barcode picker itself; ensuring complete cleanup.\n *\n * This method should be called after you don't plan to use the picker anymore,\n * before the object is automatically cleaned up by JavaScript.\n * The barcode picker must not be used in any way after this call.\n *\n * If the [[Scanner]] is or will be in use for other purposes, the relative option can be passed to prevent\n * its destruction.\n *\n * @param destroyScanner Whether to destroy the internally used [[Scanner]] or not.\n */\n public destroy(destroyScanner: boolean = true): void {\n this.pauseScanning(true);\n this.scanner.removeListener(\"ready\", this.scannerReadyEventListener);\n this.destroyed = true;\n if (destroyScanner) {\n this.scanner.destroy();\n }\n this.gui.destroy();\n this.eventEmitter.removeAllListeners();\n }\n\n /**\n * Apply a new set of scan settings to the internal scanner (replacing old settings).\n *\n * @param scanSettings The scan configuration object to be applied to the scanner.\n * @returns The updated [[BarcodePicker]] object.\n */\n public applyScanSettings(scanSettings: ScanSettings): BarcodePicker {\n this.scanner.applyScanSettings(scanSettings);\n\n return this;\n }\n\n /**\n * @returns Whether the scanning is currently paused.\n */\n public isScanningPaused(): boolean {\n return this.scanningPaused;\n }\n\n /**\n * Pause the recognition of codes in the input image.\n *\n * By default video from the camera is still shown, if the *pauseCamera* option is enabled the camera stream\n * is paused (camera access is fully interrupted) and will be resumed when calling [[resumeScanning]] or\n * [[accessCamera]], possibly requesting user permissions if needed.\n *\n * In Single Image Mode the input for submitting a picture is disabled.\n *\n * @param pauseCamera Whether to also pause the camera stream.\n * @returns The updated [[BarcodePicker]] object.\n */\n public pauseScanning(pauseCamera: boolean = false): BarcodePicker {\n this.scanningPaused = true;\n\n if (pauseCamera) {\n this.cameraManager.stopStream();\n }\n\n if (this.scanner.isReady()) {\n this.gui.pauseScanning();\n }\n\n return this;\n }\n\n /**\n * Resume the recognition of codes in the input image.\n *\n * If the camera stream was stopped when calling [[pauseScanning]], the camera stream is also resumed and\n * user permissions are requested if needed to resume video input.\n *\n * In Single Image Mode the input for submitting a picture is enabled.\n *\n * @returns The updated [[BarcodePicker]] object.\n */\n public async resumeScanning(): Promise {\n this.scanningPaused = false;\n\n if (this.scanner.isReady()) {\n this.gui.resumeScanning();\n }\n\n if (this.cameraManager.activeCamera == null && this.cameraAccess) {\n await this.cameraManager.setupCameras();\n }\n\n return this;\n }\n\n /**\n * @returns The currently active camera.\n */\n public getActiveCamera(): Camera | undefined {\n return this.cameraManager.activeCamera;\n }\n\n /**\n * Select a camera to be used for video input, if no camera is passed, the default one is selected.\n *\n * If camera access is enabled, the camera is enabled and accessed.\n *\n * Depending on device features and user permissions for camera access, any of the following errors\n * could be the rejected result of the returned promise:\n * - `AbortError`\n * - `NoCameraAvailableError`\n * - `NotAllowedError`\n * - `NotFoundError`\n * - `NotReadableError`\n * - `SecurityError`\n *\n * In Single Image Mode this method has no effect.\n *\n * @param camera The new camera to be used, by default the automatically detected back camera is used.\n * @param cameraSettings The camera options used when accessing the camera, by default HD resolution is used.\n * @returns A promise resolving to the updated [[BarcodePicker]] object when the camera is set\n * (and accessed, if camera access is currently enabled).\n */\n public async setActiveCamera(camera?: Camera, cameraSettings?: CameraSettings): Promise {\n if (camera == null || !this.cameraAccess) {\n this.cameraManager.setSelectedCamera(camera);\n this.cameraManager.setSelectedCameraSettings(cameraSettings);\n\n if (this.cameraAccess) {\n await this.cameraManager.setupCameras();\n }\n } else {\n await this.cameraManager.initializeCameraWithSettings(camera, cameraSettings);\n }\n\n return this;\n }\n\n /**\n * Try to apply new settings to the currently used camera for video input,\n * if no settings are passed the default ones are set.\n *\n * If camera access is enabled, the camera is updated and accessed with the new settings.\n *\n * Depending on device features and user permissions for camera access, any of the following errors\n * could be the rejected result of the returned promise:\n * - `AbortError`\n * - `NoCameraAvailableError`\n * - `NotAllowedError`\n * - `NotFoundError`\n * - `NotReadableError`\n * - `SecurityError`\n *\n * In Single Image Mode this method has no effect.\n *\n * @param cameraSettings The new camera options used when accessing the camera, by default HD resolution is used.\n * @returns A promise resolving to the updated [[BarcodePicker]] object when the camera is updated\n * (and accessed, if camera access is currently enabled).\n */\n public async applyCameraSettings(cameraSettings?: CameraSettings): Promise {\n if (!this.cameraAccess) {\n this.cameraManager.setSelectedCameraSettings(cameraSettings);\n } else {\n await this.cameraManager.applyCameraSettings(cameraSettings);\n }\n\n return this;\n }\n\n /**\n * @returns Whether the picker is in a visible state or not.\n */\n public isVisible(): boolean {\n return this.gui.isVisible();\n }\n\n /**\n * Enable or disable picker visibility.\n *\n * Note that this does not affect camera access, frame processing or any other picker logic.\n *\n * @param visible Whether the picker is in a visible state or not.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setVisible(visible: boolean): BarcodePicker {\n this.gui.setVisible(visible);\n\n return this;\n }\n\n /**\n * @returns Whether the currently selected camera's video is mirrored along the vertical axis.\n */\n public isMirrorImageEnabled(): boolean {\n return this.gui.isMirrorImageEnabled();\n }\n\n /**\n * Enable or disable camera video mirroring along the vertical axis.\n * By default front cameras are automatically mirrored.\n * This setting is applied per camera and the method has no effect if no camera is currently selected.\n *\n * In Single Image Mode this method has no effect.\n *\n * @param enabled Whether the camera video is mirrored along the vertical axis.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setMirrorImageEnabled(enabled: boolean): BarcodePicker {\n this.gui.setMirrorImageEnabled(enabled, true);\n\n return this;\n }\n\n /**\n * @returns Whether a sound should be played on barcode recognition (iOS requires user input).\n * Note that the sound is played if there's at least a barcode not rejected via [[ScanResult.rejectCode]].\n */\n public isPlaySoundOnScanEnabled(): boolean {\n return this.playSoundOnScan;\n }\n\n /**\n * Enable or disable playing a sound on barcode recognition (iOS requires user input).\n *\n * The sound is played if there's at least a barcode not rejected via [[ScanResult.rejectCode]].\n *\n * @param enabled Whether a sound should be played on barcode recognition.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setPlaySoundOnScanEnabled(enabled: boolean): BarcodePicker {\n this.playSoundOnScan = enabled;\n\n return this;\n }\n\n /**\n * @returns Whether the device should vibrate on barcode recognition (only Chrome & Firefox, requires user input).\n * Note that the vibration is triggered if there's at least a barcode not rejected via [[ScanResult.rejectCode]].\n */\n public isVibrateOnScanEnabled(): boolean {\n return this.vibrateOnScan;\n }\n\n /**\n * Enable or disable vibrating the device on barcode recognition (only Chrome & Firefox, requires user input).\n *\n * The vibration is triggered if there's at least a barcode not rejected via [[ScanResult.rejectCode]].\n *\n * @param enabled Whether the device should vibrate on barcode recognition.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setVibrateOnScanEnabled(enabled: boolean): BarcodePicker {\n this.vibrateOnScan = enabled;\n\n return this;\n }\n\n /**\n * @returns Whether a GUI button to switch between different cameras is shown (when available).\n */\n public isCameraSwitcherEnabled(): boolean {\n return this.cameraManager.isCameraSwitcherEnabled();\n }\n\n /**\n * Show or hide a GUI button to switch between different cameras (when available).\n *\n * In Single Image Mode this method has no effect.\n *\n * @param enabled Whether to show a GUI button to switch between different cameras.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setCameraSwitcherEnabled(enabled: boolean): BarcodePicker {\n this.cameraManager.setCameraSwitcherEnabled(enabled).catch(\n /* istanbul ignore next */ () => {\n // Ignored\n }\n );\n\n return this;\n }\n\n /**\n * @returns Whether a GUI button to toggle device torch on/off is shown (when available, only Chrome).\n */\n public isTorchToggleEnabled(): boolean {\n return this.cameraManager.isTorchToggleEnabled();\n }\n\n /**\n * Show or hide a GUI button to toggle device torch on/off (when available, only Chrome).\n *\n * In Single Image Mode this method has no effect.\n *\n * @param enabled Whether to show a GUI button to toggle device torch on/off.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setTorchToggleEnabled(enabled: boolean): BarcodePicker {\n this.cameraManager.setTorchToggleEnabled(enabled);\n\n return this;\n }\n\n /**\n * @returns Whether manual camera focus when clicking/tapping on the video is enabled (when available, only Chrome).\n */\n public isTapToFocusEnabled(): boolean {\n return this.cameraManager.isTapToFocusEnabled();\n }\n\n /**\n * Enable or disable manual camera focus when clicking/tapping on the video (when available, only Chrome).\n *\n * In Single Image Mode this method has no effect.\n *\n * @param enabled Whether to enable manual camera focus when clicking/tapping on the video.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setTapToFocusEnabled(enabled: boolean): BarcodePicker {\n this.cameraManager.setTapToFocusEnabled(enabled);\n\n return this;\n }\n\n /**\n * @returns Whether camera zoom control via pinching gesture on the video is enabled (when available, only Chrome).\n */\n public isPinchToZoomEnabled(): boolean {\n return this.cameraManager.isPinchToZoomEnabled();\n }\n\n /**\n * Enable or disable camera zoom control via pinching gesture on the video (when available, only Chrome).\n *\n * In Single Image Mode this method has no effect.\n *\n * @param enabled Whether to enable camera zoom control via pinching gesture on the video.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setPinchToZoomEnabled(enabled: boolean): BarcodePicker {\n this.cameraManager.setPinchToZoomEnabled(enabled);\n\n return this;\n }\n\n /**\n * Enable or disable the torch/flashlight of the device (when available, only Chrome).\n * Changing active camera or camera settings will cause the torch to become disabled.\n *\n * A button on the [[BarcodePicker]] GUI to let the user toggle this functionality can also be set\n * on creation via the *enableTorchToggle* option (enabled by default, when available).\n *\n * In Single Image Mode this method has no effect.\n *\n * @param enabled Whether the torch should be enabled or disabled.\n * @returns A promise resolving to the updated [[BarcodePicker]] object when the torch is enabled/disabled.\n */\n public async setTorchEnabled(enabled: boolean): Promise {\n await this.cameraManager.setTorchEnabled(enabled);\n\n return this;\n }\n\n /**\n * Set the zoom level of the device (when available, only Chrome).\n * Changing active camera or camera settings will cause the zoom to be reset.\n *\n * In Single Image Mode this method has no effect.\n *\n * @param zoomPercentage The percentage of the max zoom (between 0 and 1).\n * @returns The updated [[BarcodePicker]] object.\n */\n public async setZoom(zoomPercentage: number): Promise {\n await this.cameraManager.setZoom(zoomPercentage);\n\n return this;\n }\n\n /**\n * @returns Whether the barcode picker has loaded the external Scandit Engine library and is ready to scan.\n */\n public isReady(): boolean {\n return this.isReadyToWork;\n }\n\n /**\n * Add the listener function to the listeners array for an event.\n *\n * No checks are made to see if the listener has already been added.\n * Multiple calls passing the same listener will result in the listener being added, and called, multiple times.\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function.\n * @param once
Default = false
\n * Whether the listener should just be triggered only once and then discarded.\n * @returns The updated [[BarcodePicker]] object.\n */\n // tslint:disable-next-line:bool-param-default\n public on(eventName: EventName, listener: ListenerFn, once?: boolean): BarcodePicker;\n /**\n * Add the listener function to the listeners array for the [[ready]] event, fired when the external\n * Scandit Engine library has been loaded and the barcode picker can thus start to scan barcodes.\n * If the library has already been loaded the listener is called immediately.\n *\n * No checks are made to see if the listener has already been added.\n * Multiple calls passing the same listener will result in the listener being added, and called, multiple times.\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function.\n * @returns The updated [[BarcodePicker]] object.\n */\n public on(eventName: \"ready\", listener: () => void): BarcodePicker;\n /**\n * Add the listener function to the listeners array for the [[submitFrame]] event, fired when a new frame is submitted\n * to the engine to be processed. As the frame is not processed yet, the [[ScanResult.barcodes]] property will\n * always be empty (no results yet).\n *\n * No checks are made to see if the listener has already been added.\n * Multiple calls passing the same listener will result in the listener being added, and called, multiple times.\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function, which will be invoked with a [[ScanResult]] object.\n * @param once
Default = false
\n * Whether the listener should just be triggered only once and then discarded.\n * @returns The updated [[BarcodePicker]] object.\n */\n public on(\n eventName: \"submitFrame\",\n listener: (scanResult: ScanResult) => void,\n // tslint:disable-next-line:bool-param-default\n once?: boolean\n ): BarcodePicker;\n /**\n * Add the listener function to the listeners array for the [[processFrame]] event, fired when a new frame is\n * processed. This event is fired on every frame, independently from the number of recognized barcodes (can be none).\n * The returned barcodes are affected by [[ScanSettings]]'s *codeDuplicateFilter* option.\n *\n * No checks are made to see if the listener has already been added.\n * Multiple calls passing the same listener will result in the listener being added, and called, multiple times.\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function, which will be invoked with a [[ScanResult]] object.\n * @param once
Default = false
\n * Whether the listener should just be triggered only once and then discarded.\n * @returns The updated [[BarcodePicker]] object.\n */\n public on(\n // tslint:disable-next-line:unified-signatures\n eventName: \"processFrame\",\n listener: (scanResult: ScanResult) => void,\n // tslint:disable-next-line:bool-param-default\n once?: boolean\n ): BarcodePicker;\n /**\n * Add the listener function to the listeners array for the [[scan]] event, fired when new barcodes\n * are recognized in the image frame. The returned barcodes are affected by [[ScanSettings]]'s *codeDuplicateFilter*\n * option.\n *\n * No checks are made to see if the listener has already been added.\n * Multiple calls passing the same listener will result in the listener being added, and called, multiple times.\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function, which will be invoked with a [[ScanResult]] object.\n * @param once
Default = false
\n * Whether the listener should just be triggered only once and then discarded.\n * @returns The updated [[BarcodePicker]] object.\n */\n public on(\n // tslint:disable-next-line:unified-signatures\n eventName: \"scan\",\n listener: (scanResult: ScanResult) => void,\n // tslint:disable-next-line:bool-param-default\n once?: boolean\n ): BarcodePicker;\n /**\n * Add the listener function to the listeners array for the [[scanError]] event, fired when an error occurs\n * during scanning initialization and execution. The barcode picker will be automatically paused when this happens.\n *\n * No checks are made to see if the listener has already been added.\n * Multiple calls passing the same listener will result in the listener being added, and called, multiple times.\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function, which will be invoked with an `ScanditEngineError` object.\n * @param once
Default = false
\n * Whether the listener should just be triggered only once and then discarded.\n * @returns The updated [[BarcodePicker]] object.\n */\n // tslint:disable-next-line:bool-param-default\n public on(eventName: \"scanError\", listener: (error: Error) => void, once?: boolean): BarcodePicker;\n public on(eventName: EventName, listener: ListenerFn, once: boolean = false): BarcodePicker {\n if (eventName === \"ready\") {\n if (this.isReadyToWork) {\n listener();\n } else {\n this.eventEmitter.once(eventName, listener, this);\n }\n } else {\n if (once === true) {\n this.eventEmitter.once(eventName, listener, this);\n } else {\n this.eventEmitter.on(eventName, listener, this);\n }\n }\n\n return this;\n }\n\n /**\n * Remove the specified listener from the given event's listener array.\n *\n * @param eventName The name of the event from which to remove the listener.\n * @param listener The listener function to be removed.\n * @returns The updated [[BarcodePicker]] object.\n */\n public removeListener(eventName: EventName, listener: ListenerFn): BarcodePicker {\n this.eventEmitter.removeListener(eventName, listener);\n\n return this;\n }\n\n /**\n * Remove all listeners from the given event's listener array.\n *\n * @param eventName The name of the event from which to remove all listeners.\n * @returns The updated [[BarcodePicker]] object.\n */\n public removeAllListeners(eventName: EventName): BarcodePicker {\n this.eventEmitter.removeAllListeners(eventName);\n\n return this;\n }\n\n /**\n * *See the [[on]] method.*\n *\n * @param eventName The name of the event to listen to.\n * @param listener The listener function.\n * @param once
Default = false
\n * Whether the listener should just be triggered only once and then discarded.\n * @returns The updated [[BarcodePicker]] object.\n */\n // tslint:disable-next-line:bool-param-default\n public addListener(eventName: EventName, listener: ListenerFn, once?: boolean): BarcodePicker {\n return this.on(eventName, listener, once);\n }\n\n /**\n * Set the GUI style for the picker.\n *\n * In Single Image Mode this method has no effect.\n *\n * When the GUI style is set to *laser* or *viewfinder*, the GUI will flash on barcode recognition.\n * Note that the GUI will flash if there's at least a barcode not rejected via [[ScanResult.rejectCode]].\n *\n * @param guiStyle The new GUI style to be applied.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setGuiStyle(guiStyle: BarcodePicker.GuiStyle): BarcodePicker {\n this.gui.setGuiStyle(guiStyle);\n\n return this;\n }\n\n /**\n * Set the fit type for the video element of the picker.\n *\n * If the \"cover\" type is selected the maximum available search area for barcode detection is (continuously) adjusted\n * automatically according to the visible area of the picker.\n *\n * In Single Image Mode this method has no effect.\n *\n * @param objectFit The new fit type to be applied.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setVideoFit(objectFit: BarcodePicker.ObjectFit): BarcodePicker {\n this.gui.setVideoFit(objectFit);\n\n return this;\n }\n\n /**\n * Access the currently set or default camera, requesting user permissions if needed.\n * This method is meant to be used after the picker has been initialized with disabled camera access\n * (*accessCamera*=false) or after [[pauseScanning]] has been called with the pause camera stream option.\n * Calling this doesn't do anything if the camera is already being accessed.\n *\n * Depending on device features and user permissions for camera access, any of the following errors\n * could be the rejected result of the returned promise:\n * - `AbortError`\n * - `NoCameraAvailableError`\n * - `NotAllowedError`\n * - `NotFoundError`\n * - `NotReadableError`\n * - `SecurityError`\n *\n * In Single Image Mode this method has no effect.\n *\n * @returns A promise resolving to the updated [[BarcodePicker]] object when the camera is accessed.\n */\n public async accessCamera(): Promise {\n if (!this.cameraAccess || this.cameraManager.activeCamera == null) {\n await this.cameraManager.setupCameras();\n this.cameraAccess = true;\n }\n\n return this;\n }\n\n /**\n * Create a new parser object.\n *\n * @param dataFormat The format of the input data for the parser.\n * @returns The newly created parser.\n */\n public createParserForFormat(dataFormat: Parser.DataFormat): Parser {\n return this.scanner.createParserForFormat(dataFormat);\n }\n\n /**\n * Reassign the barcode picker to a different HTML element.\n *\n * All the barcode picker elements inside the current origin element will be moved to the new given one.\n *\n * If an invalid element is given, a `NoOriginElementError` error is thrown.\n *\n * @param originElement The HTMLElement into which all the necessary elements for the picker will be moved.\n * @returns The updated [[BarcodePicker]] object.\n */\n public reassignOriginElement(originElement: HTMLElement): BarcodePicker {\n if (!BrowserHelper.isValidHTMLElement(originElement)) {\n throw new CustomError({\n name: \"NoOriginElementError\",\n message: \"A valid origin HTML element must be given\",\n });\n }\n\n this.gui.reassignOriginElement(originElement);\n\n return this;\n }\n\n /**\n * Set the target frames per second to be processed by the scanning engine.\n *\n * The final speed is limited by the camera framerate (usually 30 FPS) and the frame processing time of the device.\n * By setting this to lower numbers devices can save power by performing less work during scanning operations,\n * depending on device speed (faster devices can \"sleep\" for longer periods).\n *\n * In Single Image Mode this method has no effect.\n *\n * @param targetScanningFPS The target frames per second to be processed.\n * Must be a number bigger than 0, by default set to 30.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setTargetScanningFPS(targetScanningFPS: number): BarcodePicker {\n if (targetScanningFPS <= 0) {\n targetScanningFPS = 30;\n }\n this.targetScanningFPS = targetScanningFPS;\n\n return this;\n }\n\n /**\n * @returns The internally used initialized (and possibly configured) [[Scanner]] object instance.\n */\n public getScanner(): Scanner {\n return this.scanner;\n }\n\n /**\n * Clear the internal scanner session.\n *\n * This removes all recognized barcodes from the scanner session and allows them to be scanned again in case a custom\n * *codeDuplicateFilter* option was set in the [[ScanSettings]].\n *\n * @returns The updated [[BarcodePicker]] object.\n */\n public clearSession(): BarcodePicker {\n this.scanner.clearSession();\n\n return this;\n }\n\n /**\n * Set the area of the laser displayed when the GUI style is set to *laser* (the laser will match the width and be\n * vertically centered).\n * Note that this functionality affects UI only and doesn't change the actual *searchArea* option set via\n * [[ScanSettings]]. If no area is passed, the default automatic size behaviour is set, where the laser will match\n * the current area of the image in which barcodes are searched, controlled via the *searchArea* option in\n * [[ScanSettings]].\n *\n * @param area The new search area, by default the area will match [[ScanSettings]]'s *searchArea* option.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setLaserArea(area?: SearchArea): BarcodePicker {\n this.gui.setLaserArea(area);\n\n return this;\n }\n\n /**\n * Set the area of the viewfinder displayed when the GUI style is set to *viewfinder*.\n * Note that this functionality affects UI only and doesn't change the actual search area set via [[ScanSettings]].\n * If no area is passed, the default automatic size behaviour is set, where the viewfinder will match the current area\n * of the image in which barcodes are searched, controlled via the *searchArea* option in [[ScanSettings]].\n *\n * @param area The new search area, by default the area will match the [[ScanSettings]]'s *searchArea*.\n * @returns The updated [[BarcodePicker]] object.\n */\n public setViewfinderArea(area?: SearchArea): BarcodePicker {\n this.gui.setViewfinderArea(area);\n\n return this;\n }\n\n private triggerFatalError(error: Error): void {\n this.fatalError = error;\n console.error(error);\n }\n\n private handleScanResult(scanResult: ScanResult): void {\n scanResult = new ScanResult(scanResult.barcodes, this.externalImageData, scanResult.imageSettings);\n\n this.eventEmitter.emit(\"processFrame\", scanResult);\n\n if (scanResult.barcodes.length !== 0) {\n // This will get executed only after the other existing listeners for \"processFrame\" and \"scan\" are executed\n this.eventEmitter.once(\"scan\", () => {\n if (\n scanResult.barcodes.some((barcode) => {\n return !scanResult.rejectedCodes.has(barcode);\n })\n ) {\n this.gui.flashGUI();\n if (this.playSoundOnScan) {\n this.beepSound.play();\n }\n if (this.vibrateOnScan) {\n this.vibrateFunction?.call(navigator, 300);\n }\n }\n });\n this.eventEmitter.emit(\"scan\", scanResult);\n }\n }\n\n private scheduleVideoProcessing(timeout: number = 0): void {\n window.setTimeout(async () => {\n await this.videoProcessing();\n }, timeout); // Leave some breathing room for other operations\n }\n\n private async scheduleNextVideoProcessing(processingStartTime: number): Promise {\n if (this.targetScanningFPS < 60) {\n if (this.averageProcessingTime == null) {\n this.averageProcessingTime = performance.now() - processingStartTime;\n } else {\n this.averageProcessingTime = this.averageProcessingTime * 0.9 + (performance.now() - processingStartTime) * 0.1;\n }\n const nextProcessingCallDelay: number = Math.max(0, 1000 / this.targetScanningFPS - this.averageProcessingTime);\n if (Math.round(nextProcessingCallDelay) <= 16) {\n await this.videoProcessing();\n } else {\n this.scheduleVideoProcessing(nextProcessingCallDelay);\n }\n } else {\n await this.videoProcessing();\n }\n }\n\n private async processVideoFrame(highQualitySingleFrameMode: boolean): Promise {\n this.internalImageData = this.gui.getImageData(this.internalImageData);\n\n // This could happen in unexpected situations and should be temporary\n // istanbul ignore if\n if (this.internalImageData == null) {\n return;\n }\n\n if (\n this.externalImageData == null ||\n this.externalImageData.byteLength === 0 ||\n this.externalImageData.byteLength !== this.internalImageData.byteLength\n ) {\n this.externalImageData = new Uint8Array(this.internalImageData);\n } else {\n this.externalImageData.set(this.internalImageData);\n }\n\n if (!this.scanningPaused) {\n if (this.eventEmitter.listenerCount(\"submitFrame\") > 0) {\n this.eventEmitter.emit(\n \"submitFrame\",\n new ScanResult([], this.externalImageData, this.scanner.getImageSettings())\n );\n }\n\n try {\n const scanResult: ScanResult = await this.scanner.processImage(\n this.internalImageData,\n highQualitySingleFrameMode\n );\n this.internalImageData = scanResult.imageData;\n // Paused status could have changed in the meantime\n if (!this.scanningPaused) {\n this.handleScanResult(scanResult);\n }\n } catch (error) {\n this.internalImageData = undefined;\n if (error.name === \"ImageSettingsDataMismatch\") {\n // This could happen in unexpected situations and should be temporary\n return;\n }\n this.pauseScanning();\n this.eventEmitter.emit(\"scanError\", error);\n }\n }\n }\n\n private async videoProcessing(): Promise {\n if (this.destroyed) {\n return;\n }\n\n if (\n this.cameraManager.activeCamera?.currentResolution == null ||\n this.fatalError != null ||\n this.scanningPaused ||\n !this.scanner.isReady() ||\n this.scanner.isBusyProcessing() ||\n this.latestVideoTimeProcessed === this.gui.getVideoCurrentTime()\n ) {\n this.scheduleVideoProcessing();\n\n return;\n }\n\n if (this.latestVideoTimeProcessed == null) {\n // Show active GUI if needed, as now it's the moment the scanner is ready and used for the first time\n await this.resumeScanning();\n }\n\n const processingStartTime: number = performance.now();\n this.latestVideoTimeProcessed = this.gui.getVideoCurrentTime();\n\n await this.processVideoFrame(false);\n await this.scheduleNextVideoProcessing(processingStartTime);\n }\n\n private handleScannerReady(): void {\n this.isReadyToWork = true;\n this.eventEmitter.emit(\"ready\");\n }\n}\n\n// istanbul ignore next\nexport namespace BarcodePicker {\n /**\n * Fired when the external Scandit Engine library has been loaded and the barcode picker can thus start to scan\n * barcodes.\n *\n * @asMemberOf BarcodePicker\n * @event\n */\n // @ts-ignore\n declare function ready(): void;\n /**\n * Fired when a new frame is submitted to the engine to be processed. As the frame is not processed yet, the\n * [[ScanResult.barcodes]] property will always be empty (no results yet).\n *\n * @asMemberOf BarcodePicker\n * @event\n * @param scanResult The result of the scanning operation on the image.\n */\n // @ts-ignore\n declare function submitFrame(scanResult: ScanResult): void;\n /**\n * Fired when a new frame is processed by the engine. This event is fired on every frame, independently from the\n * number of recognized barcodes (can be none). The returned barcodes are affected by [[ScanSettings]]'s\n * *codeDuplicateFilter* option.\n *\n * @asMemberOf BarcodePicker\n * @event\n * @param scanResult The result of the scanning operation on the image.\n */\n // @ts-ignore\n declare function processFrame(scanResult: ScanResult): void;\n /**\n * Fired when new barcodes are recognized in the image frame. The returned barcodes are affected by [[ScanSettings]]'s\n * *codeDuplicateFilter* option.\n *\n * @asMemberOf BarcodePicker\n * @event\n * @param scanResult The result of the scanning operation on the image.\n */\n // @ts-ignore\n declare function scan(scanResult: ScanResult): void;\n /**\n * Fired when an error occurs during scanning initialization and execution. The barcode picker will be automatically\n * paused when this happens.\n *\n * @asMemberOf BarcodePicker\n * @event\n * @param error The ScanditEngineError that was triggered.\n */\n // @ts-ignore\n declare function scanError(error: Error): void;\n\n /**\n * GUI style to be used by a barcode picker, used to hint barcode placement in the frame.\n */\n export enum GuiStyle {\n /**\n * No GUI is shown to indicate where the barcode should be placed.\n * Be aware that the Scandit logo continues to be displayed as showing it is part of the license agreement.\n */\n NONE = \"none\",\n /**\n * A laser line is shown.\n */\n LASER = \"laser\",\n /**\n * A rectangular viewfinder with rounded corners is shown.\n */\n VIEWFINDER = \"viewfinder\",\n }\n\n /**\n * Fit type used to control the resizing (scale) of the barcode picker to fit in its container *originElement*.\n */\n export enum ObjectFit {\n /**\n * Scale to maintain aspect ratio while fitting within the *originElement*'s content box.\n * Aspect ratio is preserved, so the barcode picker will be \"letterboxed\" if its aspect ratio\n * does not match the aspect ratio of the box.\n */\n CONTAIN = \"contain\",\n /**\n * Scale to maintain aspect ratio while filling the *originElement*'s entire content box.\n * Aspect ratio is preserved, so the barcode picker will be clipped to fit if its aspect ratio\n * does not match the aspect ratio of the box.\n */\n COVER = \"cover\",\n }\n}\n","var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };\nvar isHidden = function (target) {\n if (isSVG(target)) {\n var _a = target.getBBox(), width = _a.width, height = _a.height;\n return !width && !height;\n }\n var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\n return !(offsetWidth || offsetHeight || target.getClientRects().length);\n};\nvar isElement = function (obj) {\n var _a, _b;\n var scope = (_b = (_a = obj) === null || _a === void 0 ? void 0 : _a.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView;\n return !!(scope && obj instanceof scope.Element);\n};\nvar isReplacedElement = function (target) {\n switch (target.tagName) {\n case 'INPUT':\n if (target.type !== 'image') {\n break;\n }\n case 'VIDEO':\n case 'AUDIO':\n case 'EMBED':\n case 'OBJECT':\n case 'CANVAS':\n case 'IFRAME':\n case 'IMG':\n return true;\n }\n return false;\n};\nexport { isSVG, isHidden, isElement, isReplacedElement };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n if (inlineSize === void 0) { inlineSize = 0; }\n if (blockSize === void 0) { blockSize = 0; }\n if (switchSizes === void 0) { switchSizes = false; }\n return Object.freeze({\n inlineSize: (switchSizes ? blockSize : inlineSize) || 0,\n blockSize: (switchSizes ? inlineSize : blockSize) || 0\n });\n};\nvar zeroBoxes = Object.freeze({\n devicePixelContentBoxSize: size(),\n borderBoxSize: size(),\n contentBoxSize: size(),\n contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n if (forceRecalculation === void 0) { forceRecalculation = false; }\n if (cache.has(target) && !forceRecalculation) {\n return cache.get(target);\n }\n if (isHidden(target)) {\n cache.set(target, zeroBoxes);\n return zeroBoxes;\n }\n var cs = getComputedStyle(target);\n var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n var removePadding = !IE && cs.boxSizing === 'border-box';\n var switchSizes = verticalRegexp.test(cs.writingMode || '');\n var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n var horizontalPadding = paddingLeft + paddingRight;\n var verticalPadding = paddingTop + paddingBottom;\n var horizontalBorderArea = borderLeft + borderRight;\n var verticalBorderArea = borderTop + borderBottom;\n var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n var boxes = Object.freeze({\n devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n });\n cache.set(target, boxes);\n return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n switch (observedBox) {\n case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n return devicePixelContentBoxSize;\n case ResizeObserverBoxOptions.BORDER_BOX:\n return borderBoxSize;\n default:\n return contentBoxSize;\n }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { calculateBoxSizes } from './algorithms/calculateBoxSize';\nvar ResizeObserverEntry = (function () {\n function ResizeObserverEntry(target) {\n var boxes = calculateBoxSizes(target);\n this.target = target;\n this.contentRect = boxes.contentRect;\n this.borderBoxSize = [boxes.borderBoxSize];\n this.contentBoxSize = [boxes.contentBoxSize];\n this.devicePixelContentBoxSize = [boxes.devicePixelContentBoxSize];\n }\n return ResizeObserverEntry;\n}());\nexport { ResizeObserverEntry };\n","import { isHidden } from '../utils/element';\nvar calculateDepthForNode = function (node) {\n if (isHidden(node)) {\n return Infinity;\n }\n var depth = 0;\n var parent = node.parentNode;\n while (parent) {\n depth += 1;\n parent = parent.parentNode;\n }\n return depth;\n};\nexport { calculateDepthForNode };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { ResizeObserverEntry } from '../ResizeObserverEntry';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nimport { calculateBoxSize } from './calculateBoxSize';\nvar broadcastActiveObservations = function () {\n var shallowestDepth = Infinity;\n var callbacks = [];\n resizeObservers.forEach(function processObserver(ro) {\n if (ro.activeTargets.length === 0) {\n return;\n }\n var entries = [];\n ro.activeTargets.forEach(function processTarget(ot) {\n var entry = new ResizeObserverEntry(ot.target);\n var targetDepth = calculateDepthForNode(ot.target);\n entries.push(entry);\n ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);\n if (targetDepth < shallowestDepth) {\n shallowestDepth = targetDepth;\n }\n });\n callbacks.push(function resizeObserverCallback() {\n ro.callback.call(ro.observer, entries, ro.observer);\n });\n ro.activeTargets.splice(0, ro.activeTargets.length);\n });\n for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {\n var callback = callbacks_1[_i];\n callback();\n }\n return shallowestDepth;\n};\nexport { broadcastActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nvar gatherActiveObservationsAtDepth = function (depth) {\n resizeObservers.forEach(function processObserver(ro) {\n ro.activeTargets.splice(0, ro.activeTargets.length);\n ro.skippedTargets.splice(0, ro.skippedTargets.length);\n ro.observationTargets.forEach(function processTarget(ot) {\n if (ot.isActive()) {\n if (calculateDepthForNode(ot.target) > depth) {\n ro.activeTargets.push(ot);\n }\n else {\n ro.skippedTargets.push(ot);\n }\n }\n });\n });\n};\nexport { gatherActiveObservationsAtDepth };\n","import { process } from './process';\nimport { global } from './global';\nimport { queueResizeObserver } from './queueResizeObserver';\nvar watching = 0;\nvar isWatching = function () { return !!watching; };\nvar CATCH_PERIOD = 250;\nvar observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };\nvar events = [\n 'resize',\n 'load',\n 'transitionend',\n 'animationend',\n 'animationstart',\n 'animationiteration',\n 'keyup',\n 'keydown',\n 'mouseup',\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'blur',\n 'focus'\n];\nvar time = function (timeout) {\n if (timeout === void 0) { timeout = 0; }\n return Date.now() + timeout;\n};\nvar scheduled = false;\nvar Scheduler = (function () {\n function Scheduler() {\n var _this = this;\n this.stopped = true;\n this.listener = function () { return _this.schedule(); };\n }\n Scheduler.prototype.run = function (timeout) {\n var _this = this;\n if (timeout === void 0) { timeout = CATCH_PERIOD; }\n if (scheduled) {\n return;\n }\n scheduled = true;\n var until = time(timeout);\n queueResizeObserver(function () {\n var elementsHaveResized = false;\n try {\n elementsHaveResized = process();\n }\n finally {\n scheduled = false;\n timeout = until - time();\n if (!isWatching()) {\n return;\n }\n if (elementsHaveResized) {\n _this.run(1000);\n }\n else if (timeout > 0) {\n _this.run(timeout);\n }\n else {\n _this.start();\n }\n }\n });\n };\n Scheduler.prototype.schedule = function () {\n this.stop();\n this.run();\n };\n Scheduler.prototype.observe = function () {\n var _this = this;\n var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };\n document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);\n };\n Scheduler.prototype.start = function () {\n var _this = this;\n if (this.stopped) {\n this.stopped = false;\n this.observer = new MutationObserver(this.listener);\n this.observe();\n events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });\n }\n };\n Scheduler.prototype.stop = function () {\n var _this = this;\n if (!this.stopped) {\n this.observer && this.observer.disconnect();\n events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });\n this.stopped = true;\n }\n };\n return Scheduler;\n}());\nvar scheduler = new Scheduler();\nvar updateCount = function (n) {\n !watching && n > 0 && scheduler.start();\n watching += n;\n !watching && scheduler.stop();\n};\nexport { scheduler, updateCount };\n","import { queueMicroTask } from './queueMicroTask';\nvar queueResizeObserver = function (cb) {\n queueMicroTask(function ResizeObserver() {\n requestAnimationFrame(cb);\n });\n};\nexport { queueResizeObserver };\n","import { hasActiveObservations } from '../algorithms/hasActiveObservations';\nimport { hasSkippedObservations } from '../algorithms/hasSkippedObservations';\nimport { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';\nimport { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';\nimport { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';\nvar process = function () {\n var depth = 0;\n gatherActiveObservationsAtDepth(depth);\n while (hasActiveObservations()) {\n depth = broadcastActiveObservations();\n gatherActiveObservationsAtDepth(depth);\n }\n if (hasSkippedObservations()) {\n deliverResizeLoopError();\n }\n return depth > 0;\n};\nexport { process };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasActiveObservations = function () {\n return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });\n};\nexport { hasActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasSkippedObservations = function () {\n return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });\n};\nexport { hasSkippedObservations };\n","import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';\nimport { calculateBoxSize } from './algorithms/calculateBoxSize';\nimport { isSVG, isReplacedElement } from './utils/element';\nvar skipNotifyOnElement = function (target) {\n return !isSVG(target)\n && !isReplacedElement(target)\n && getComputedStyle(target).display === 'inline';\n};\nvar ResizeObservation = (function () {\n function ResizeObservation(target, observedBox) {\n this.target = target;\n this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;\n this.lastReportedSize = {\n inlineSize: 0,\n blockSize: 0\n };\n }\n ResizeObservation.prototype.isActive = function () {\n var size = calculateBoxSize(this.target, this.observedBox, true);\n if (skipNotifyOnElement(this.target)) {\n this.lastReportedSize = size;\n }\n if (this.lastReportedSize.inlineSize !== size.inlineSize\n || this.lastReportedSize.blockSize !== size.blockSize) {\n return true;\n }\n return false;\n };\n return ResizeObservation;\n}());\nexport { ResizeObservation };\n","var ResizeObserverDetail = (function () {\n function ResizeObserverDetail(resizeObserver, callback) {\n this.activeTargets = [];\n this.skippedTargets = [];\n this.observationTargets = [];\n this.observer = resizeObserver;\n this.callback = callback;\n }\n return ResizeObserverDetail;\n}());\nexport { ResizeObserverDetail };\n","import { scheduler, updateCount } from './utils/scheduler';\nimport { ResizeObservation } from './ResizeObservation';\nimport { ResizeObserverDetail } from './ResizeObserverDetail';\nimport { resizeObservers } from './utils/resizeObservers';\nvar observerMap = new WeakMap();\nvar getObservationIndex = function (observationTargets, target) {\n for (var i = 0; i < observationTargets.length; i += 1) {\n if (observationTargets[i].target === target) {\n return i;\n }\n }\n return -1;\n};\nvar ResizeObserverController = (function () {\n function ResizeObserverController() {\n }\n ResizeObserverController.connect = function (resizeObserver, callback) {\n var detail = new ResizeObserverDetail(resizeObserver, callback);\n observerMap.set(resizeObserver, detail);\n };\n ResizeObserverController.observe = function (resizeObserver, target, options) {\n var detail = observerMap.get(resizeObserver);\n var firstObservation = detail.observationTargets.length === 0;\n if (getObservationIndex(detail.observationTargets, target) < 0) {\n firstObservation && resizeObservers.push(detail);\n detail.observationTargets.push(new ResizeObservation(target, options && options.box));\n updateCount(1);\n scheduler.schedule();\n }\n };\n ResizeObserverController.unobserve = function (resizeObserver, target) {\n var detail = observerMap.get(resizeObserver);\n var index = getObservationIndex(detail.observationTargets, target);\n var lastObservation = detail.observationTargets.length === 1;\n if (index >= 0) {\n lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);\n detail.observationTargets.splice(index, 1);\n updateCount(-1);\n }\n };\n ResizeObserverController.disconnect = function (resizeObserver) {\n var _this = this;\n var detail = observerMap.get(resizeObserver);\n detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });\n detail.activeTargets.splice(0, detail.activeTargets.length);\n };\n return ResizeObserverController;\n}());\nexport { ResizeObserverController };\n","import { ResizeObserverController } from './ResizeObserverController';\nimport { isElement } from './utils/element';\nvar ResizeObserver = (function () {\n function ResizeObserver(callback) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (typeof callback !== 'function') {\n throw new TypeError(\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\");\n }\n ResizeObserverController.connect(this, callback);\n }\n ResizeObserver.prototype.observe = function (target, options) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.observe(this, target, options);\n };\n ResizeObserver.prototype.unobserve = function (target) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.unobserve(this, target);\n };\n ResizeObserver.prototype.disconnect = function () {\n ResizeObserverController.disconnect(this);\n };\n ResizeObserver.toString = function () {\n return 'function ResizeObserver () { [polyfill code] }';\n };\n return ResizeObserver;\n}());\nexport { ResizeObserver };\n","import { ResizeObserver as ResizeObserverPolyfill } from \"@juggle/resize-observer\";\n\n/**\n * @hidden\n */\n// tslint:disable-next-line: variable-name no-any\nconst ResizeObserver: typeof ResizeObserverPolyfill = (window).ResizeObserver ?? ResizeObserverPolyfill;\n\nimport {\n laserActiveImage,\n laserPausedImage,\n scanditLogoImage,\n switchCameraImage,\n toggleTorchImage,\n} from \"../assets/base64assets\";\nimport { BrowserHelper } from \"../browserHelper\";\nimport { Camera } from \"../camera\";\nimport { CameraAccess } from \"../cameraAccess\";\nimport { ImageSettings } from \"../imageSettings\";\nimport { Scanner } from \"../scanner\";\nimport { ScanSettings } from \"../scanSettings\";\nimport { SearchArea } from \"../searchArea\";\nimport { SingleImageModePlatformSettings, SingleImageModeSettings } from \"../singleImageModeSettings\";\nimport { BarcodePicker } from \"./barcodePicker\";\nimport { CameraManager } from \"./cameraManager\";\n\nexport class GUI {\n public static readonly grandParentElementClassName: string = \"scandit scandit-container\";\n public static readonly parentElementClassName: string = \"scandit scandit-barcode-picker\";\n public static readonly hiddenClassName: string = \"scandit-hidden\";\n public static readonly hiddenOpacityClassName: string = \"scandit-hidden-opacity\";\n public static readonly videoElementClassName: string = \"scandit-video\";\n public static readonly scanditLogoImageElementClassName: string = \"scandit-logo\";\n public static readonly laserContainerElementClassName: string = \"scandit-laser\";\n public static readonly viewfinderElementClassName: string = \"scandit-viewfinder\";\n public static readonly cameraSwitcherElementClassName: string = \"scandit-camera-switcher\";\n public static readonly torchTogglerElementClassName: string = \"scandit-torch-toggle\";\n public static readonly cameraUploadElementClassName: string = \"scandit-camera-upload\";\n public static readonly flashColorClassName: string = \"scandit-flash-color\";\n public static readonly flashWhiteClassName: string = \"scandit-flash-white\";\n public static readonly flashInsetClassName: string = \"scandit-flash-inset\";\n public static readonly opacityPulseClassName: string = \"scandit-opacity-pulse\";\n public static readonly mirroredClassName: string = \"mirrored\";\n public static readonly pausedClassName: string = \"paused\";\n\n public readonly videoElement: HTMLVideoElement;\n public readonly cameraSwitcherElement: HTMLImageElement;\n public readonly torchTogglerElement: HTMLImageElement;\n\n private readonly scanner: Scanner;\n private readonly singleImageModeEnabled: boolean;\n private readonly singleImageModeSettings: SingleImageModePlatformSettings;\n private readonly grandParentElement: HTMLDivElement;\n private readonly parentElement: HTMLDivElement;\n private readonly laserContainerElement: HTMLDivElement;\n private readonly laserActiveImageElement: HTMLImageElement;\n private readonly laserPausedImageElement: HTMLImageElement;\n private readonly viewfinderElement: HTMLDivElement;\n private readonly cameraUploadElement: HTMLDivElement;\n private readonly cameraUploadLabelElement: HTMLLabelElement;\n private readonly cameraUploadInputElement: HTMLInputElement;\n private readonly cameraUploadProgressElement: HTMLDivElement;\n private readonly visibilityListener: EventListenerOrEventListenerObject;\n private readonly videoResizeListener: EventListenerOrEventListenerObject;\n private readonly newScanSettingsListener: (scanSettings: ScanSettings) => void;\n private readonly contextCreatedShowLogoListener: (licenseKeyFeatures: object) => void;\n private readonly contextCreatedActivateGUIListener: () => void;\n private readonly resizeObserver: ResizeObserverPolyfill;\n private readonly cameraUploadCallback: () => Promise;\n private readonly mirrorImageOverrides: Map;\n\n private contextWebGL?: WebGLRenderingContext;\n private context2d?: CanvasRenderingContext2D;\n private cameraManager?: CameraManager;\n private originElement: HTMLElement;\n private scanningPaused: boolean;\n private visible: boolean;\n private guiStyle: BarcodePicker.GuiStyle;\n private videoFit: BarcodePicker.ObjectFit;\n private customLaserArea?: SearchArea;\n private customViewfinderArea?: SearchArea;\n private cameraUploadInProgress: boolean;\n private cameraSwitchInProgress: boolean;\n private engineContextCreated: boolean;\n\n public constructor(options: {\n scanner: Scanner;\n originElement: HTMLElement;\n singleImageModeEnabled: boolean;\n singleImageModeSettings: SingleImageModePlatformSettings;\n scanningPaused: boolean;\n visible: boolean;\n guiStyle: BarcodePicker.GuiStyle;\n videoFit: BarcodePicker.ObjectFit;\n hideLogo: boolean;\n cameraType: Camera.Type;\n laserArea?: SearchArea;\n viewfinderArea?: SearchArea;\n cameraUploadCallback(): Promise;\n }) {\n this.scanner = options.scanner;\n this.originElement = options.originElement;\n this.singleImageModeEnabled = options.singleImageModeEnabled;\n this.singleImageModeSettings = options.singleImageModeSettings;\n this.scanningPaused = options.scanningPaused;\n this.cameraUploadCallback = options.cameraUploadCallback;\n this.mirrorImageOverrides = new Map();\n this.cameraUploadInProgress = false;\n this.cameraSwitchInProgress = false;\n this.engineContextCreated = false;\n\n this.grandParentElement = document.createElement(\"div\");\n this.grandParentElement.className = GUI.grandParentElementClassName;\n this.originElement.appendChild(this.grandParentElement);\n this.parentElement = document.createElement(\"div\");\n this.parentElement.className = GUI.parentElementClassName;\n this.grandParentElement.appendChild(this.parentElement);\n\n this.videoElement = document.createElement(\"video\");\n this.cameraSwitcherElement = document.createElement(\"img\");\n this.torchTogglerElement = document.createElement(\"img\");\n this.laserContainerElement = document.createElement(\"div\");\n this.laserActiveImageElement = document.createElement(\"img\");\n this.laserPausedImageElement = document.createElement(\"img\");\n this.viewfinderElement = document.createElement(\"div\");\n\n const canvas: HTMLCanvasElement = document.createElement(\"canvas\");\n\n if (options.singleImageModeEnabled) {\n this.context2d = canvas.getContext(\"2d\");\n\n this.cameraUploadElement = document.createElement(\"div\");\n this.cameraUploadLabelElement = document.createElement(\"label\");\n this.cameraUploadInputElement = document.createElement(\"input\");\n this.cameraUploadProgressElement = document.createElement(\"div\");\n\n this.setupCameraUploadGuiAssets(options.cameraType);\n\n this.guiStyle = BarcodePicker.GuiStyle.NONE;\n } else {\n this.setupContext(canvas);\n this.setupVideoElement();\n this.setupCameraSwitcher();\n this.setupTorchToggler();\n this.setupFullGuiAssets();\n this.setGuiStyle(options.guiStyle);\n this.setVideoFit(options.videoFit);\n this.setLaserArea(options.laserArea);\n this.setViewfinderArea(options.viewfinderArea);\n\n this.visibilityListener = this.checkAndRecoverPlayback.bind(this);\n document.addEventListener(\"visibilitychange\", this.visibilityListener);\n\n this.newScanSettingsListener = this.handleNewScanSettings.bind(this);\n this.scanner.on(\"newScanSettings\", this.newScanSettingsListener);\n this.handleNewScanSettings();\n\n this.videoResizeListener = this.handleVideoResize.bind(this);\n this.videoElement.addEventListener(\"resize\", this.videoResizeListener);\n }\n\n if (options.hideLogo) {\n this.contextCreatedShowLogoListener = this.showScanditLogo.bind(this, options.hideLogo);\n this.scanner.on(\"contextCreated\", this.contextCreatedShowLogoListener);\n } else {\n this.showScanditLogo(options.hideLogo);\n }\n this.contextCreatedActivateGUIListener = this.activateGUI.bind(this);\n this.scanner.on(\"contextCreated\", this.contextCreatedActivateGUIListener);\n\n this.resize();\n this.resizeObserver = new ResizeObserver(\n /* istanbul ignore next */ () => {\n this.resize();\n }\n );\n this.resizeObserver.observe(this.originElement);\n\n this.setVisible(options.visible);\n }\n\n public destroy(): void {\n if (this.visibilityListener != null) {\n document.removeEventListener(\"visibilitychange\", this.visibilityListener);\n }\n if (this.newScanSettingsListener != null) {\n this.scanner.removeListener(\"newScanSettings\", this.newScanSettingsListener);\n }\n if (this.videoResizeListener != null) {\n this.videoElement.removeEventListener(\"resize\", this.videoResizeListener);\n }\n if (this.contextCreatedShowLogoListener != null) {\n this.scanner.removeListener(\"contextCreated\", this.contextCreatedShowLogoListener);\n }\n if (this.contextCreatedActivateGUIListener != null) {\n this.scanner.removeListener(\"contextCreated\", this.contextCreatedActivateGUIListener);\n }\n this.resizeObserver.disconnect();\n this.grandParentElement.remove();\n this.originElement.classList.remove(GUI.hiddenClassName);\n }\n\n public setCameraManager(cameraManager: CameraManager): void {\n this.cameraManager = cameraManager;\n }\n\n public pauseScanning(): void {\n this.scanningPaused = true;\n this.laserActiveImageElement.classList.add(GUI.hiddenOpacityClassName);\n this.laserPausedImageElement.classList.remove(GUI.hiddenOpacityClassName);\n this.viewfinderElement.classList.add(GUI.pausedClassName);\n }\n\n public resumeScanning(): void {\n this.scanningPaused = false;\n if (this.engineContextCreated) {\n this.laserPausedImageElement.classList.add(GUI.hiddenOpacityClassName);\n this.laserActiveImageElement.classList.remove(GUI.hiddenOpacityClassName);\n this.viewfinderElement.classList.remove(GUI.pausedClassName);\n }\n }\n\n public isVisible(): boolean {\n return this.visible;\n }\n\n public setVisible(visible: boolean): void {\n const browserName: string | undefined = BrowserHelper.userAgentInfo.getBrowser().name;\n if (browserName != null && browserName.includes(\"Safari\") && this.visible === false && visible) {\n // Safari behaves weirdly when displaying the video element again after being hidden:\n // it undetectably reuses video frames \"buffered\" from the video just before it was hidden.\n // We do this to avoid reusing old data\n this.videoElement.pause();\n this.videoElement.currentTime = 0;\n this.videoElement.load();\n this.playVideo();\n }\n\n this.visible = visible;\n\n if (visible) {\n this.originElement.classList.remove(GUI.hiddenClassName);\n if (this.guiStyle === BarcodePicker.GuiStyle.LASER) {\n this.laserActiveImageElement.classList.remove(GUI.flashColorClassName);\n } else if (this.guiStyle === BarcodePicker.GuiStyle.VIEWFINDER) {\n this.viewfinderElement.classList.remove(GUI.flashWhiteClassName);\n }\n } else {\n this.originElement.classList.add(GUI.hiddenClassName);\n }\n }\n\n public isMirrorImageEnabled(): boolean {\n if (this.cameraManager?.selectedCamera != null && this.cameraManager?.activeCamera != null) {\n const mirrorImageOverride: boolean | undefined = this.mirrorImageOverrides.get(\n this.cameraManager.activeCamera.deviceId + this.cameraManager.activeCamera.label\n );\n\n return mirrorImageOverride ?? this.cameraManager.activeCamera.cameraType === Camera.Type.FRONT;\n } else {\n return false;\n }\n }\n\n public setMirrorImageEnabled(enabled: boolean, override: boolean): void {\n if (this.cameraManager?.selectedCamera != null) {\n if (enabled) {\n this.videoElement.classList.add(GUI.mirroredClassName);\n } else {\n this.videoElement.classList.remove(GUI.mirroredClassName);\n }\n\n if (override) {\n this.mirrorImageOverrides.set(\n this.cameraManager.selectedCamera.deviceId + this.cameraManager.selectedCamera.label,\n enabled\n );\n }\n }\n }\n\n public setGuiStyle(guiStyle: BarcodePicker.GuiStyle): void {\n if (this.singleImageModeEnabled) {\n return;\n }\n\n switch (guiStyle) {\n case BarcodePicker.GuiStyle.LASER:\n this.guiStyle = guiStyle;\n this.laserContainerElement.classList.remove(GUI.hiddenClassName);\n this.viewfinderElement.classList.add(GUI.hiddenClassName);\n break;\n case BarcodePicker.GuiStyle.VIEWFINDER:\n this.guiStyle = guiStyle;\n this.laserContainerElement.classList.add(GUI.hiddenClassName);\n this.viewfinderElement.classList.remove(GUI.hiddenClassName);\n break;\n case BarcodePicker.GuiStyle.NONE:\n default:\n this.guiStyle = BarcodePicker.GuiStyle.NONE;\n this.laserContainerElement.classList.add(GUI.hiddenClassName);\n this.viewfinderElement.classList.add(GUI.hiddenClassName);\n break;\n }\n }\n\n public setLaserArea(area?: SearchArea): void {\n this.customLaserArea = area;\n if (area == null) {\n area = this.scanner.getScanSettings().getSearchArea();\n }\n const borderPercentage: number = 0.025;\n const usablePercentage: number = 1 - borderPercentage * 2;\n this.laserContainerElement.style.left = `${(borderPercentage + area.x * usablePercentage) * 100}%`;\n this.laserContainerElement.style.width = `${area.width * usablePercentage * 100}%`;\n this.laserContainerElement.style.top = `${(borderPercentage + area.y * usablePercentage) * 100}%`;\n this.laserContainerElement.style.height = `${area.height * usablePercentage * 100}%`;\n }\n\n public setViewfinderArea(area?: SearchArea): void {\n this.customViewfinderArea = area;\n if (area == null) {\n area = this.scanner.getScanSettings().getSearchArea();\n }\n const borderPercentage: number = 0.025;\n const usablePercentage: number = 1 - borderPercentage * 2;\n this.viewfinderElement.style.left = `${(borderPercentage + area.x * usablePercentage) * 100}%`;\n this.viewfinderElement.style.width = `${area.width * usablePercentage * 100}%`;\n this.viewfinderElement.style.top = `${(borderPercentage + area.y * usablePercentage) * 100}%`;\n this.viewfinderElement.style.height = `${area.height * usablePercentage * 100}%`;\n }\n\n public setVideoFit(objectFit: BarcodePicker.ObjectFit): void {\n if (this.singleImageModeEnabled) {\n return;\n }\n\n this.videoFit = objectFit;\n\n if (objectFit === BarcodePicker.ObjectFit.COVER) {\n this.videoElement.style.objectFit = \"cover\";\n this.videoElement.dataset.objectFit = \"cover\"; // used by \"objectFitPolyfill\" library\n } else {\n this.videoElement.style.objectFit = \"contain\";\n this.videoElement.dataset.objectFit = \"contain\"; // used by \"objectFitPolyfill\" library\n\n this.scanner.applyScanSettings(\n this.scanner.getScanSettings().setBaseSearchArea({ x: 0, y: 0, width: 1.0, height: 1.0 })\n );\n }\n\n this.resize();\n }\n\n public reassignOriginElement(originElement: HTMLElement): void {\n if (!this.visible) {\n this.originElement.classList.remove(GUI.hiddenClassName);\n originElement.classList.add(GUI.hiddenClassName);\n }\n\n originElement.appendChild(this.grandParentElement);\n this.checkAndRecoverPlayback();\n this.resize();\n this.resizeObserver.disconnect();\n this.resizeObserver.observe(originElement);\n\n this.originElement = originElement;\n }\n\n public flashGUI(): void {\n if (this.guiStyle === BarcodePicker.GuiStyle.LASER) {\n this.flashLaser();\n } else if (this.guiStyle === BarcodePicker.GuiStyle.VIEWFINDER) {\n this.flashViewfinder();\n }\n }\n\n public getImageData(imageData?: Uint8Array): Uint8Array | undefined {\n function isVideoAndContextStateValid(\n videoElement: HTMLVideoElement,\n context: WebGLRenderingContext | CanvasRenderingContext2D\n ): boolean {\n // This could happen in unexpected situations and should be temporary\n return (\n videoElement.readyState === 4 &&\n videoElement.videoWidth > 2 &&\n videoElement.videoHeight > 2 &&\n context.canvas.width > 2 &&\n context.canvas.height > 2\n );\n }\n\n if (this.singleImageModeEnabled && this.context2d != null) {\n return new Uint8Array(\n this.context2d.getImageData(0, 0, this.context2d.canvas.width, this.context2d.canvas.height).data.buffer\n );\n }\n // istanbul ignore else\n if (!this.singleImageModeEnabled) {\n if (this.contextWebGL != null) {\n if (\n !isVideoAndContextStateValid(this.videoElement, this.contextWebGL) ||\n this.contextWebGL.drawingBufferWidth <= 2 ||\n this.contextWebGL.drawingBufferHeight <= 2\n ) {\n return undefined;\n }\n\n const imageDataLength: number =\n this.contextWebGL.drawingBufferWidth * this.contextWebGL.drawingBufferHeight * 4;\n if (imageData == null || imageData.byteLength === 0 || imageData.byteLength !== imageDataLength) {\n imageData = new Uint8Array(imageDataLength);\n }\n this.contextWebGL.texImage2D(\n this.contextWebGL.TEXTURE_2D,\n 0,\n this.contextWebGL.RGBA,\n this.contextWebGL.RGBA,\n this.contextWebGL.UNSIGNED_BYTE,\n this.videoElement\n );\n this.contextWebGL.readPixels(\n 0,\n 0,\n this.contextWebGL.drawingBufferWidth,\n this.contextWebGL.drawingBufferHeight,\n this.contextWebGL.RGBA,\n this.contextWebGL.UNSIGNED_BYTE,\n imageData\n );\n\n return imageData;\n }\n // istanbul ignore else\n if (this.context2d != null) {\n if (!isVideoAndContextStateValid(this.videoElement, this.context2d)) {\n return undefined;\n }\n\n this.context2d.drawImage(this.videoElement, 0, 0);\n\n return new Uint8Array(\n this.context2d.getImageData(0, 0, this.context2d.canvas.width, this.context2d.canvas.height).data.buffer\n );\n }\n }\n\n // istanbul ignore next\n return undefined;\n }\n\n public getVideoCurrentTime(): number {\n return this.videoElement.currentTime;\n }\n\n public setCameraSwitcherVisible(visible: boolean): void {\n if (visible) {\n this.cameraSwitcherElement.classList.remove(GUI.hiddenClassName);\n } else {\n this.cameraSwitcherElement.classList.add(GUI.hiddenClassName);\n }\n }\n\n public setTorchTogglerVisible(visible: boolean): void {\n if (visible) {\n this.torchTogglerElement.classList.remove(GUI.hiddenClassName);\n } else {\n this.torchTogglerElement.classList.add(GUI.hiddenClassName);\n }\n }\n\n public playVideo(): void {\n const playPromise: Promise | undefined = this.videoElement.play();\n playPromise?.catch(\n /* istanbul ignore next */ () => {\n // Can sometimes cause an incorrect rejection (all is good, ignore).\n }\n );\n }\n\n private setCameraUploadGuiBusyScanning(busyScanning: boolean): void {\n if (busyScanning) {\n this.cameraUploadProgressElement.classList.remove(GUI.flashInsetClassName);\n this.cameraUploadElement.classList.add(GUI.opacityPulseClassName);\n } else {\n this.cameraUploadProgressElement.classList.add(GUI.flashInsetClassName);\n this.cameraUploadElement.classList.remove(GUI.opacityPulseClassName);\n }\n }\n\n private setupContext(canvas: HTMLCanvasElement): void {\n let context: WebGLRenderingContext | null = canvas.getContext(\"webgl\", { alpha: false, antialias: false });\n // istanbul ignore if\n if (context == null) {\n context = canvas.getContext(\"experimental-webgl\", { alpha: false, antialias: false });\n }\n if (context != null) {\n this.setupWebGL(context);\n canvas.addEventListener(\"webglcontextlost\", () => {\n // We recreate instead of waiting for restore via the webglcontextrestored event as restore might never happen\n console.warn(\"WebGL context has been lost, restoring...\");\n this.contextWebGL = undefined;\n this.setupContext(document.createElement(\"canvas\"));\n this.handleVideoResize();\n console.warn(\"WebGL context restored\");\n });\n } else {\n this.context2d = canvas.getContext(\"2d\");\n }\n }\n\n private setupWebGL(contextWebGL: WebGLRenderingContext): void {\n const texture: WebGLTexture = contextWebGL.createTexture();\n contextWebGL.bindTexture(contextWebGL.TEXTURE_2D, texture);\n const frameBuffer: WebGLFramebuffer = contextWebGL.createFramebuffer();\n contextWebGL.bindFramebuffer(contextWebGL.FRAMEBUFFER, frameBuffer);\n contextWebGL.framebufferTexture2D(\n contextWebGL.FRAMEBUFFER,\n contextWebGL.COLOR_ATTACHMENT0,\n contextWebGL.TEXTURE_2D,\n texture,\n 0\n );\n contextWebGL.texParameteri(contextWebGL.TEXTURE_2D, contextWebGL.TEXTURE_WRAP_S, contextWebGL.CLAMP_TO_EDGE);\n contextWebGL.texParameteri(contextWebGL.TEXTURE_2D, contextWebGL.TEXTURE_WRAP_T, contextWebGL.CLAMP_TO_EDGE);\n contextWebGL.texParameteri(contextWebGL.TEXTURE_2D, contextWebGL.TEXTURE_MIN_FILTER, contextWebGL.NEAREST);\n contextWebGL.texParameteri(contextWebGL.TEXTURE_2D, contextWebGL.TEXTURE_MAG_FILTER, contextWebGL.NEAREST);\n this.contextWebGL = contextWebGL;\n }\n\n private setupVideoElement(): void {\n this.videoElement.setAttribute(\"autoplay\", \"autoplay\");\n this.videoElement.setAttribute(\"playsinline\", \"true\");\n this.videoElement.setAttribute(\"muted\", \"muted\");\n this.videoElement.className = GUI.videoElementClassName;\n this.parentElement.appendChild(this.videoElement);\n }\n\n private setupCameraUploadGuiAssets(cameraType: Camera.Type): void {\n const deviceType: string | undefined = BrowserHelper.userAgentInfo.getDevice().type;\n const defaultSettings: SingleImageModePlatformSettings =\n deviceType === \"mobile\" || deviceType === \"tablet\"\n ? SingleImageModeSettings.defaultMobile\n : SingleImageModeSettings.defaultDesktop;\n\n this.cameraUploadElement.className = GUI.cameraUploadElementClassName;\n Object.assign(\n this.cameraUploadElement.style,\n defaultSettings.containerStyle,\n this.singleImageModeSettings.containerStyle\n );\n this.parentElement.appendChild(this.cameraUploadElement);\n\n const informationElement: HTMLElement =\n this.singleImageModeSettings.informationElement ?? defaultSettings.informationElement;\n Object.assign(\n informationElement.style,\n defaultSettings.informationStyle,\n this.singleImageModeSettings.informationStyle\n );\n this.cameraUploadElement.appendChild(informationElement);\n\n this.cameraUploadInputElement.type = \"file\";\n this.cameraUploadInputElement.accept = \"image/*\";\n this.cameraUploadInputElement.setAttribute(\"capture\", cameraType === Camera.Type.FRONT ? \"user\" : \"environment\");\n this.cameraUploadInputElement.addEventListener(\"change\", this.cameraUploadFile.bind(this));\n const cameraUploadInputCheckFunction: EventListenerOrEventListenerObject = (event: Event): void => {\n // istanbul ignore next\n if (this.scanningPaused || this.cameraUploadInProgress) {\n event.preventDefault();\n }\n };\n this.cameraUploadInputElement.addEventListener(\"click\", cameraUploadInputCheckFunction);\n this.cameraUploadInputElement.addEventListener(\"keydown\", cameraUploadInputCheckFunction);\n\n this.cameraUploadLabelElement.appendChild(this.cameraUploadInputElement);\n\n const cameraUploadButtonIconElement: HTMLElement | SVGElement =\n this.singleImageModeSettings.buttonElement ?? defaultSettings.buttonElement;\n [this.cameraUploadProgressElement.style, cameraUploadButtonIconElement.style].forEach((style) => {\n Object.assign(style, defaultSettings.buttonStyle, this.singleImageModeSettings.buttonStyle);\n });\n cameraUploadButtonIconElement.style.maxWidth = \"100px\";\n cameraUploadButtonIconElement.style.maxHeight = \"100px\";\n this.cameraUploadLabelElement.appendChild(cameraUploadButtonIconElement);\n\n this.cameraUploadProgressElement.classList.add(\"radial-progress\");\n this.cameraUploadLabelElement.appendChild(this.cameraUploadProgressElement);\n\n this.cameraUploadElement.appendChild(this.cameraUploadLabelElement);\n }\n\n private setupFullGuiAssets(): void {\n this.laserActiveImageElement.src = laserActiveImage;\n this.laserContainerElement.appendChild(this.laserActiveImageElement);\n\n this.laserPausedImageElement.src = laserPausedImage;\n this.laserContainerElement.appendChild(this.laserPausedImageElement);\n\n this.laserContainerElement.className = GUI.laserContainerElementClassName;\n this.parentElement.appendChild(this.laserContainerElement);\n\n this.viewfinderElement.className = GUI.viewfinderElementClassName;\n this.parentElement.appendChild(this.viewfinderElement);\n\n // Show inactive GUI, as for now the scanner isn't ready yet\n this.laserActiveImageElement.classList.add(GUI.hiddenOpacityClassName);\n this.laserPausedImageElement.classList.remove(GUI.hiddenOpacityClassName);\n this.viewfinderElement.classList.add(GUI.pausedClassName);\n }\n\n private flashLaser(): void {\n this.laserActiveImageElement.classList.remove(GUI.flashColorClassName);\n // tslint:disable-next-line:no-unused-expression\n this.laserActiveImageElement.offsetHeight; // NOSONAR // Trigger reflow to restart animation\n this.laserActiveImageElement.classList.add(GUI.flashColorClassName);\n }\n\n private flashViewfinder(): void {\n this.viewfinderElement.classList.remove(GUI.flashWhiteClassName);\n // tslint:disable-next-line:no-unused-expression\n this.viewfinderElement.offsetHeight; // NOSONAR // Trigger reflow to restart animation\n this.viewfinderElement.classList.add(GUI.flashWhiteClassName);\n }\n\n private resize(): void {\n this.parentElement.style.maxWidth = \"\";\n this.parentElement.style.maxHeight = \"\";\n\n const width: number = this.originElement.clientWidth;\n const height: number = this.originElement.clientHeight;\n\n if (width === 0 || height === 0) {\n return;\n }\n\n if (this.singleImageModeEnabled) {\n this.resizeCameraUpload(width, height);\n } else {\n this.resizeVideo(width, height);\n }\n }\n\n private resizeCameraUpload(width: number, height: number): void {\n this.cameraUploadLabelElement.style.transform = `scale(${Math.min(1, width / 300, height / 300)})`;\n }\n\n private resizeVideo(width: number, height: number): void {\n if (this.videoElement.videoWidth <= 2 || this.videoElement.videoHeight <= 2) {\n return;\n }\n\n const videoRatio: number = this.videoElement.videoWidth / this.videoElement.videoHeight;\n\n if (this.videoFit === BarcodePicker.ObjectFit.COVER) {\n let widthPercentage: number = 1;\n let heightPercentage: number = 1;\n\n if (videoRatio < width / height) {\n heightPercentage = Math.min(1, height / (width / videoRatio));\n } else {\n widthPercentage = Math.min(1, width / (height * videoRatio));\n }\n\n this.scanner.applyScanSettings(\n this.scanner.getScanSettings().setBaseSearchArea({\n x: (1 - widthPercentage) / 2,\n y: (1 - heightPercentage) / 2,\n width: widthPercentage,\n height: heightPercentage,\n })\n );\n\n return;\n }\n\n if (videoRatio > width / height) {\n height = width / videoRatio;\n } else {\n width = height * videoRatio;\n }\n\n this.parentElement.style.maxWidth = `${Math.ceil(width)}px`;\n this.parentElement.style.maxHeight = `${Math.ceil(height)}px`;\n\n window.objectFitPolyfill(this.videoElement);\n }\n\n private checkAndRecoverPlayback(): void {\n if (this.cameraManager?.activeCamera != null && this.videoElement?.srcObject != null) {\n if (!(this.videoElement.srcObject).active) {\n this.cameraManager.reinitializeCamera().catch(\n /* istanbul ignore next */ () => {\n // Ignored\n }\n );\n } else {\n this.playVideo();\n }\n }\n }\n\n private updateCameraUploadProgress(progressPercentageValue: string): void {\n this.cameraUploadProgressElement.setAttribute(\"data-progress\", progressPercentageValue);\n }\n\n private async cameraUploadImageLoad(image: HTMLImageElement): Promise {\n this.updateCameraUploadProgress(\"100\");\n\n let resizedImageWidth: number;\n let resizedImageHeight: number;\n const resizedImageSizeLimit: number = 1440;\n if (image.naturalWidth <= resizedImageSizeLimit && image.naturalHeight <= resizedImageSizeLimit) {\n resizedImageWidth = image.naturalWidth;\n resizedImageHeight = image.naturalHeight;\n } else {\n if (image.naturalWidth > image.naturalHeight) {\n resizedImageWidth = resizedImageSizeLimit;\n resizedImageHeight = Math.round((image.naturalHeight / image.naturalWidth) * resizedImageSizeLimit);\n } else {\n resizedImageWidth = Math.round((image.naturalWidth / image.naturalHeight) * resizedImageSizeLimit);\n resizedImageHeight = resizedImageSizeLimit;\n }\n }\n\n await this.cameraUploadFileProcess(image, resizedImageWidth, resizedImageHeight);\n }\n\n private async cameraUploadFileProcess(image: HTMLImageElement, width: number, height: number): Promise {\n // istanbul ignore else\n if (this.context2d != null) {\n this.context2d.canvas.width = width;\n this.context2d.canvas.height = height;\n\n this.context2d.drawImage(image, 0, 0, width, height);\n this.scanner.applyImageSettings({\n width,\n height,\n format: ImageSettings.Format.RGBA_8U,\n });\n }\n\n this.setCameraUploadGuiBusyScanning(true);\n await this.cameraUploadCallback();\n this.setCameraUploadGuiBusyScanning(false);\n this.cameraUploadInProgress = false;\n }\n\n private cameraUploadFile(): void {\n const files: FileList | null = this.cameraUploadInputElement.files;\n if (files != null && files.length !== 0) {\n this.cameraUploadInProgress = true;\n const image: HTMLImageElement = new Image();\n const fileReader: FileReader = new FileReader();\n fileReader.onload = () => {\n this.cameraUploadInputElement.value = \"\";\n // istanbul ignore else\n if (fileReader.result != null) {\n image.onload = this.cameraUploadImageLoad.bind(this, image);\n image.onprogress = (event2) => {\n // istanbul ignore else\n if (event2.lengthComputable) {\n const progress: number = Math.round((event2.loaded / event2.total) * 20) * 5;\n // istanbul ignore else\n if (progress <= 100) {\n this.updateCameraUploadProgress(progress.toString());\n }\n }\n };\n image.onerror = () => {\n this.cameraUploadInProgress = false;\n };\n image.src = fileReader.result;\n }\n };\n fileReader.onerror = () => {\n this.cameraUploadInProgress = false;\n };\n this.updateCameraUploadProgress(\"0\");\n fileReader.readAsDataURL(files[0]);\n }\n }\n\n private async cameraSwitcherListener(event: Event): Promise {\n if (!this.cameraSwitchInProgress && this.cameraManager != null) {\n const cameraManager: CameraManager = this.cameraManager;\n event.preventDefault();\n try {\n const cameras: Camera[] = await CameraAccess.getCameras();\n if (cameras.length <= 1) {\n this.setCameraSwitcherVisible(false);\n\n return;\n }\n this.cameraSwitchInProgress = true;\n const currentCameraIndex: number = cameras.findIndex((camera) => {\n return camera.deviceId === cameraManager.activeCamera?.deviceId ?? camera.deviceId;\n });\n let newCameraIndex: number = (currentCameraIndex + 1) % cameras.length;\n while (newCameraIndex !== currentCameraIndex) {\n try {\n await cameraManager.initializeCameraWithSettings(\n cameras[newCameraIndex],\n cameraManager.activeCameraSettings\n );\n } catch (error) {\n console.warn(\"Couldn't access camera\", cameras[newCameraIndex], error);\n newCameraIndex = (newCameraIndex + 1) % cameras.length;\n if (newCameraIndex === currentCameraIndex) {\n this.setCameraSwitcherVisible(false);\n await cameraManager.initializeCameraWithSettings(\n cameras[newCameraIndex],\n cameraManager.activeCameraSettings\n );\n }\n continue;\n }\n break;\n }\n this.cameraSwitchInProgress = false;\n } catch (error) {\n console.error(error);\n this.cameraSwitchInProgress = false;\n }\n }\n }\n\n private setupCameraSwitcher(): void {\n this.cameraSwitcherElement.src = switchCameraImage;\n this.cameraSwitcherElement.className = GUI.cameraSwitcherElementClassName;\n this.cameraSwitcherElement.classList.add(GUI.hiddenClassName);\n this.parentElement.appendChild(this.cameraSwitcherElement);\n [\"touchstart\", \"mousedown\"].forEach((eventName) => {\n this.cameraSwitcherElement.addEventListener(eventName, this.cameraSwitcherListener.bind(this));\n });\n }\n\n private setupTorchToggler(): void {\n this.torchTogglerElement.src = toggleTorchImage;\n this.torchTogglerElement.className = GUI.torchTogglerElementClassName;\n this.torchTogglerElement.classList.add(GUI.hiddenClassName);\n this.parentElement.appendChild(this.torchTogglerElement);\n [\"touchstart\", \"mousedown\"].forEach((eventName) => {\n this.torchTogglerElement.addEventListener(eventName, (event) => {\n if (this.cameraManager != null) {\n event.preventDefault();\n this.cameraManager.toggleTorch().catch(\n /* istanbul ignore next */ () => {\n // Ignored\n }\n );\n }\n });\n });\n }\n\n private showScanditLogo(hideLogo: boolean, licenseKeyFeatures?: { hiddenScanditLogoAllowed?: boolean }): void {\n if (hideLogo && licenseKeyFeatures?.hiddenScanditLogoAllowed === true) {\n return;\n }\n\n const scanditLogoImageElement: HTMLImageElement = document.createElement(\"img\");\n scanditLogoImageElement.src = scanditLogoImage;\n scanditLogoImageElement.className = GUI.scanditLogoImageElementClassName;\n this.parentElement.appendChild(scanditLogoImageElement);\n }\n\n private activateGUI(): void {\n this.engineContextCreated = true;\n if (!this.scanningPaused) {\n this.resumeScanning();\n }\n }\n\n private handleNewScanSettings(): void {\n if (this.customLaserArea == null) {\n this.setLaserArea();\n }\n if (this.customViewfinderArea == null) {\n this.setViewfinderArea();\n }\n }\n\n private handleVideoResize(): void {\n this.resize();\n\n if (this.videoElement.videoWidth <= 2 || this.videoElement.videoHeight <= 2) {\n return;\n }\n\n if (this.contextWebGL != null) {\n if (\n this.contextWebGL.canvas.width === this.videoElement.videoWidth &&\n this.contextWebGL.canvas.height === this.videoElement.videoHeight\n ) {\n return;\n }\n\n this.contextWebGL.canvas.width = this.videoElement.videoWidth;\n this.contextWebGL.canvas.height = this.videoElement.videoHeight;\n this.contextWebGL.viewport(0, 0, this.contextWebGL.drawingBufferWidth, this.contextWebGL.drawingBufferHeight);\n\n this.scanner.applyImageSettings({\n width: this.contextWebGL.drawingBufferWidth,\n height: this.contextWebGL.drawingBufferHeight,\n format: ImageSettings.Format.RGBA_8U,\n });\n } else if (this.context2d != null) {\n if (\n this.context2d.canvas.width === this.videoElement.videoWidth &&\n this.context2d.canvas.height === this.videoElement.videoHeight\n ) {\n return;\n }\n\n this.context2d.canvas.width = this.videoElement.videoWidth;\n this.context2d.canvas.height = this.videoElement.videoHeight;\n\n this.scanner.applyImageSettings({\n width: this.videoElement.videoWidth,\n height: this.videoElement.videoHeight,\n format: ImageSettings.Format.RGBA_8U,\n });\n }\n }\n}\n","import \"objectFitPolyfill\";\n\nimport { BlurryRecognitionPreloader } from \"./lib/blurryRecognitionPreloader\";\nimport { BrowserCompatibility } from \"./lib/browserCompatibility\";\nimport { BrowserHelper } from \"./lib/browserHelper\";\nimport { CustomError } from \"./lib/customError\";\nimport { EngineLoader } from \"./lib/engineLoader\";\nimport { UnsupportedBrowserError } from \"./lib/unsupportedBrowserError\";\n\nimport \"./styles/styles.scss\";\n\n/**\n * @hidden\n */\ndeclare global {\n interface Window {\n MediaStreamTrack?: {\n getSources?(callback: (devices: MediaDeviceInfo[]) => void): void;\n };\n Worker: Function;\n WebAssembly: object;\n OffscreenCanvas: Function;\n WebGLRenderingContext: Function;\n objectFitPolyfill(elements?: HTMLElement | HTMLElement[]): void;\n }\n\n interface Navigator {\n mozVibrate?: Navigator[\"vibrate\"];\n msVibrate?: Navigator[\"vibrate\"];\n webkitVibrate?: Navigator[\"vibrate\"];\n enumerateDevices?(): Promise;\n }\n}\n\nexport * from \"./lib/barcodePicker/barcodePicker\";\nexport * from \"./lib/barcode\";\nexport * from \"./lib/barcodeEncodingRange\";\nexport * from \"./lib/browserCompatibility\";\nexport * from \"./lib/browserHelper\";\nexport * from \"./lib/camera\";\nexport * from \"./lib/cameraAccess\";\nexport * from \"./lib/cameraSettings\";\nexport * from \"./lib/customError\";\nexport * from \"./lib/imageSettings\";\nexport * from \"./lib/point\";\nexport * from \"./lib/quadrilateral\";\nexport * from \"./lib/parser\";\nexport * from \"./lib/parserField\";\nexport * from \"./lib/parserResult\";\nexport * from \"./lib/scanResult\";\nexport * from \"./lib/scanner\";\nexport * from \"./lib/scanSettings\";\nexport * from \"./lib/singleImageModeSettings\";\nexport * from \"./lib/searchArea\";\nexport * from \"./lib/symbologySettings\";\n\nexport * from \"./lib/workers/engineWorker\";\n\n/**\n * @hidden\n */\nexport type Mutable = { -readonly [P in keyof T]: T[P] };\n\n/**\n * @hidden\n */\nexport let deviceId: string = BrowserHelper.getDeviceId();\n/**\n * @hidden\n */\nexport let userLicenseKey: string | undefined;\n/**\n * @hidden\n */\nexport let scanditEngineLocation: string;\n/**\n * @hidden\n */\nexport let blurryRecognitionPreloader: BlurryRecognitionPreloader;\n/**\n * @hidden\n */\nexport let engineLoader: EngineLoader;\n/**\n * @hidden\n *\n * Flag describing if configure() was called and if it could execute in its entirety.\n */\nexport let configurePhase: \"unconfigured\" | \"started\" | \"done\" = \"unconfigured\";\n\n/**\n * Initialize and configure the Scandit Barcode Scanner SDK library. This function must be called before instantiating\n * the main library components (`BarcodePicker` and `Scanner` objects) and returns a promise.\n *\n * Depending on parameters and browser features, any of the following errors could be the rejected result of the\n * returned promise:\n * - `NoLicenseKeyError`\n * - `UnsupportedBrowserError`\n *\n * The external external Scandit Engine library and data needed for blurry recognition are preloaded asynchronously\n * eagerly by default after library configuration to ensure the best performance. If needed this behaviour can be\n * changed via the *preloadEngine* and *preloadBlurryRecognition* options.\n *\n * Camera access requests are done lazily only when needed by a [[BarcodePicker]] (or [[Scanner]]) object. You can also\n * eagerly ask only for camera access permissions by calling the [[CameraAccess.getCameras]] function.\n *\n * Ideally, to make the scanning process faster, it is recommended depending on the use case to create in\n * advance a (hidden and paused) [[BarcodePicker]] or [[Scanner]] object, to later show and unpause it when needed.\n * Depending on the options this can also be used to correctly ask for camera access permissions whenever preferred.\n *\n * @param licenseKey The Scandit license key to be used by the library.\n * @param engineLocation
Default = \"/\"
\n * The location of the folder containing the external scandit-engine-sdk.min.js and\n * scandit-engine-sdk.wasm files (external Scandit Engine library).\n * By default they are retrieved from the root of the web application.\n * Can be a full URL to folder or an absolute folder path.\n * @param preloadBlurryRecognition
Default = true
\n * Whether to preload (load or generate if needed) data needed for blurry recognition as soon as possible via a separate\n * asynchronous WebWorker thread running the Scandit Engine library. Data for all symbologies is generated over time.\n *\n * If enabled, any [[BarcodePicker]] or [[Scanner]] object will be able to start processing video frames much faster, as\n * it won't need to generate blurry recognition data lazily only when needed. If necessary, depending on given\n * [[ScanSettings]] options and on readiness of the data, processing is also initially performed without blurry\n * recognition until this data becomes available, at which point the new data will be loaded and used.\n *\n * If disabled, [[BarcodePicker]] or [[Scanner]] objects will load or generate blurry recognition data lazily when\n * needed to process the first frame, depending on given [[ScanSettings]] options, and will thus require more time the\n * first time the library is actively used with the given active symbologies. As this needs to be done in the same\n * WebWorker, the processing of the frame will then be blocked until the needed data is loaded or generated.\n *\n * Note that in either case the data for blurry recognition will be cached for later successive uses of the library.\n *\n * Note that preloading does not trigger a device activation for licensing purposes.\n * @param preloadEngine
Default = true
\n * Whether to preload (download if needed, compile/instantiate WebAssembly code and initialize) the external Scandit\n * Engine library, used by [[BarcodePicker]] and [[Scanner]] objects to perform scan operations.\n *\n * If enabled, any [[BarcodePicker]] or [[Scanner]] object will be ready to start processing video frames much faster,\n * as the needed external Scandit Engine library will already be in a partially or fully initialized state thanks to it\n * being preloaded now.\n *\n * If disabled, [[BarcodePicker]] and [[Scanner]] objects will load the external Scandit Engine library on creation\n * (if it wasn't already loaded before by a previously created object), and will thus require more time to be\n * initialized and ready.\n *\n * Note that in either case the loaded external Scandit Engine library will be reused whenever possible for later\n * successive uses of the library.\n *\n * Note that preloading does not trigger a device activation for licensing purposes.\n *\n * @returns A promise resolving when the library has been configured (preloading is done independently asynchronously).\n */\nexport async function configure(\n licenseKey: string,\n {\n engineLocation = \"/\",\n preloadBlurryRecognition = true,\n preloadEngine = true,\n }: {\n engineLocation?: string;\n preloadBlurryRecognition?: boolean;\n preloadEngine?: boolean;\n } = {}\n): Promise {\n console.log(\"Scandit Web SDK version: %VERSION%\");\n configurePhase = \"started\";\n\n const browserCompatibility: BrowserCompatibility = BrowserHelper.checkBrowserCompatibility();\n if (!browserCompatibility.fullSupport && !browserCompatibility.scannerSupport) {\n configurePhase = \"unconfigured\";\n\n return Promise.reject(new UnsupportedBrowserError(browserCompatibility));\n }\n\n if (licenseKey == null || licenseKey.trim().length < 64) {\n configurePhase = \"unconfigured\";\n\n return Promise.reject(new CustomError({ name: \"NoLicenseKeyError\", message: \"No license key provided\" }));\n }\n userLicenseKey = licenseKey;\n\n engineLocation += engineLocation.slice(-1) === \"/\" ? \"\" : \"/\";\n if (/^https?:\\/\\//.test(engineLocation)) {\n scanditEngineLocation = `${engineLocation}`;\n } else {\n engineLocation = engineLocation\n .split(\"/\")\n .filter((s) => {\n return s.length > 0;\n })\n .join(\"/\");\n if (engineLocation === \"\") {\n engineLocation = \"/\";\n } else {\n engineLocation = `/${engineLocation}/`;\n }\n if (location.protocol === \"file:\" || location.origin === \"null\") {\n scanditEngineLocation = `${location.href.split(\"/\").slice(0, -1).join(\"/\")}${engineLocation}`;\n } else {\n scanditEngineLocation = `${location.origin}${engineLocation}`;\n }\n }\n\n blurryRecognitionPreloader = await BlurryRecognitionPreloader.create(preloadBlurryRecognition);\n blurryRecognitionPreloader.prepareBlurryTables();\n engineLoader = new EngineLoader(preloadEngine);\n\n configurePhase = \"done\";\n\n return Promise.resolve();\n}\n"],"names":["runtime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","method","arg","Error","value","undefined","done","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","makeInvokeMethod","fn","obj","call","err","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","result","__await","then","unwrapped","error","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","doneResult","constructor","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","toString","keys","object","key","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","Function","ceil","Math","floor","it","global","window","__g","core","version","__e","that","aFunction","a","b","c","apply","arguments","isObject","exec","e","require$$0","defineProperty","get","document","is","createElement","require$$1","require$$2","S","val","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","bitmap","enumerable","configurable","writable","f","createDesc","$export","source","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","target","has","ctx","C","virtual","R","hide","U","propertyIsEnumerable","cof","split","IObject","defined","min","toInteger","max","store","mode","copyright","id","px","random","concat","shared","uid","arrayIndexOf","$this","el","fromIndex","toIObject","toLength","index","toAbsoluteIndex","IE_PROTO","names","$keys","enumBugKeys","defineProperties","Properties","getKeys","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","write","lt","close","dPs","USE_SYMBOL","def","TAG","tag","stat","Constructor","NAME","descriptor","setToStringTag","ObjectProto","toObject","ITERATOR","BUGGY","returnThis","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","Iterators","redefine","$at","pos","s","String","l","charCodeAt","iterated","_t","_i","point","Array","_k","step","Arguments","TO_STRING_TAG","DOMIterables","Collection","defer","channel","port","ARG","T","tryGet","callee","forbiddenField","ret","ArrayProto","getIteratorMethod","classof","BREAK","RETURN","iterFn","getIterFn","isArrayIter","SPECIES","D","args","un","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","data","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","set","clear","macrotask","Observer","MutationObserver","WebKitMutationObserver","isNode","PromiseCapability","promise","$$resolve","$$reject","v","navigator","userAgent","x","promiseCapability","newPromiseCapability","safe","KEY","DESCRIPTORS","SAFE_CLOSING","riter","from","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","skipClosing","arr","task","microtask","head","last","notify","flush","parent","domain","exit","enter","standalone","toggle","node","createTextNode","observe","characterData","versions","v8","$Promise","empty","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","indexOf","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","_a","onrejectionhandled","$reject","_d","_w","$resolve","wrapper","executor","anInstance","require$$3","onFulfilled","onRejected","speciesConstructor","require$$6","r","capability","promiseResolve","require$$7","all","remaining","forOf","$index","alreadyCalled","race","finally","onFinally","isFunction","try","callbackfn","asyncGeneratorStep","gen","_next","_throw","_Promise","t","match","n","parseInt","o","d","clientWidth","clientHeight","dataset","objectFit","getAttribute","objectPosition","parentNode","getComputedStyle","getPropertyValue","position","overflow","height","className","max-width","max-height","min-width","min-height","top","right","bottom","left","margin-top","margin-right","margin-bottom","margin-left","width","marginTop","marginLeft","Event","querySelectorAll","nodeName","toLowerCase","readyState","objectFitPolyfill","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","TYPE","SIZE","getEntry","_f","k","getConstructor","IS_MAP","ADDER","_l","redefineAll","validate","p","delete","setStrong","$iterDefine","setSpecies","isArray","common","IS_WEAK","fails","each","IS_ADDER","size","add","strong","toJSON","COLLECTION","of","A","mapping","cb","mapFn","nextItem","Set","$defineProperty","arrayLike","aLen","mapfn","createProperty","$Object","desc","_defineProperties","props","_Object$defineProperty","protoProps","staticProps","arraySlice","factories","construct","len","join","bind","partArgs","bound","rConstruct","Reflect","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","instance","gOPD","getOwnPropertyDescriptor","pIE","check","test","buggy","_setPrototypeOf","_Object$setPrototypeOf","subClass","superClass","_Object$create","wksExt","getOwnPropertySymbols","hiddenKeys","getOwnPropertyNames","gOPN","windowNames","getWindowNames","$GOPD","$DP","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","wks","TO_PRIMITIVE","isEnum","SymbolRegistry","AllSymbols","OPSymbols","$GOPS","QObject","setter","findChild","setSymbolDesc","$fails","_create","protoDesc","sym","isSymbol","$defineProperties","getSymbols","gOPS","symbols","enumKeys","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","E","es6Symbols","j","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","require$$4","_typeof","_Symbol","_Symbol$iterator","ReferenceError","assertThisInitialized","exp","$getPrototypeOf","_getPrototypeOf","_Object$getPrototypeOf","prefix","Events","EE","once","addListener","emitter","evt","_events","_eventsCount","clearEvent","EventEmitter","eventNames","events","listeners","handlers","ee","listenerCount","a1","a2","a3","a4","a5","removeListener","on","removeAllListeners","off","prefixed","CompositeFlag","Symbology","Barcode","Map","decodedData","decodeURIComponent","escape","fromCharCode","rawData","symbology","Uint8Array","location","topLeft","y","topRight","bottomRight","bottomLeft","compositeFlag","isGs1DataCarrier","encodingArray","humanizedSymbologyNames","AZTEC","CODABAR","CODE11","CODE128","CODE25","CODE32","CODE39","CODE93","DATA_MATRIX","DOTCODE","EAN13","EAN8","FIVE_DIGIT_ADD_ON","GS1_DATABAR_EXPANDED","GS1_DATABAR_LIMITED","GS1_DATABAR","IATA_2_OF_5","INTERLEAVED_2_OF_5","KIX","LAPA4SC","MAXICODE","MICRO_PDF417","MICRO_QR","MSI_PLESSEY","PDF417","QR","RM4SCC","TWO_DIGIT_ADD_ON","UPCA","UPCE","jsonSymbologyNames","Feature","BrowserCompatibility","BrowserHelper","factory","extend","attributes","decode","replace","init","converter","api","path","defaults","expires","Date","toUTCString","encodeURIComponent","stringifiedAttributes","attributeName","cookie","json","jar","cookies","parts","read","parse","getJSON","remove","withConverter","MODEL","VENDOR","VERSION","MOBILE","TABLET","SMARTTV","util","regexes","extensions","mergedRegexes","str1","str2","lowerize","str","major","trim","mapper","rgx","ua","arrays","q","matches","regex","map","maps","browser","oldsafari","1.0","1.2","1.3","2.0","2.0.2","2.0.3","2.0.4","?","device","amazon","model","Fire Phone","sprint","Evo Shift 4G","vendor","HTC","Sprint","os","windows","ME","NT 3.11","NT 4.0","2000","XP","Vista","7","8","8.1","10","RT","cpu","engine","UAParser","uastring","getResult","rgxmap","getBrowser","getCPU","architecture","getDevice","getEngine","getOS","getUA","setUA","BROWSER","MAJOR","CPU","ARCHITECTURE","DEVICE","CONSOLE","WEARABLE","EMBEDDED","ENGINE","OS","$","jQuery","Zepto","parser","prop","scanQueue","parseQueue","gpuAccelerationAvailable","OffscreenCanvas","originalFSSyncfs","imageBufferPointer","imageBufferSize","preloading","writableDataPath","delayedRegistration","licenseKey","settings","imageSettings","blurryRecognitionAvailable","workSubmitted","loadingInProgress","fileSystemSynced","runtimeLoaded","wasmReady","scannerSettingsReady","scannerImageSettingsReady","contextAvailable","fsSyncPromise","fsSyncInProgress","fsSyncScheduled","createContext","newDelayedRegistration","newLicenseKey","completeCreateContext","hiddenScanditLogoAllowed","Module","_can_hide_logo","licenseKeyLength","lengthBytesUTF8","licenseKeyPointer","_malloc","stringToUTF8","writableDataPathLength","writableDataPathPointer","_create_context","_free","augmentErrorInformation","errorCode","hostname","href","URL","pathname","startsWith","origin","endsWith","errorMessage","includes","processScanWorkUnit","scanWorkUnit","highQualitySingleFrameMode","applySettings","resultData","imageData","byteLength","scanResult","HEAPU8","UTF8ToString","_scanner_scan","requestId","buffer","workOnScanQueue","applyImageSettings","shift","processParseWorkUnit","parseWorkUnit","dataFormat","dataString","options","dataStringLength","dataStringPointer","optionsLength","optionsPointer","resultPointer","_parser_parse_string","parseString","workOnParseQueue","clearSession","_scanner_session_clear","retryWithExponentialBackoff","backoffMs","maxBackoffMs","singleTryRejectionCallback","newBackoffMs","parsedSettings","settingsLength","settingsPointer","_scanner_settings_new_from_json","blurryRecognition","matrixScanEnabled","gpuAcceleration","debug","channels","format","_scanner_image_settings_new","verifiedWasmFetch","wasmURI","awaitFullResponse","fetch","response","clone","arrayBuffer","responseData","crypto","_crypto","subtle","_crypto$subtle","digest","hash","hashString","byteNumber","byteHex","warn","verifyResponseData","instantiateWebAssembly","importObject","successCallback","bytes","WebAssembly","instantiate","results","syncFSPromisified","populate","initialPopulation","resolveCallback","openDbSourceRequest","openDbTargetRequest","handleError","indexedDB","onupgradeneeded","createObjectStore","onsuccess","objectStoreNames","objects","sourceTransaction","transaction","onerror","cursorRequest","objectStore","openCursor","cursor","mergedObjectsCount","targetTransaction","targetObjectStore","oncomplete","countRequest","count","primaryKey","continue","performMerge","onblocked","syncFSMergePreloadedData","mergedObjects","syncFS","forceScheduling","loadLibrary","deviceId","libraryLocation","locationPath","preload","deviceModelName","reportLoadSuccess","start","callMain","cdnURI","jsURI","getLibraryLocationURIs","canvas","instantiateWasm","wasmJSVersion","instantiateStreaming","instantiateWebAssemblyStreaming","noInitialRun","preRun","FS","syncfs","callback","originalCallback","mkdir","code","mount","IDBFS","setupFS","onRuntimeInitialized","setSettings","newSettings","newBlurryRecognitionAvailable","blurryRecognitionRequiresUpdate","completeSetSettings","setImageSettings","newImageSettings","addScanWorkUnit","addParseWorkUnit","createBlurryTable","reportResult","symbologyLength","symbologyPointer","_create_blurry_table","engineWorkerFunction","engineInstance","objectHasPropertyWithType","propertyNames","propertyType","objectProperty","fullSupport","scannerSupport","missingFeatures","MEDIA_DEVICES","WEB_WORKERS","WEB_ASSEMBLY","BLOB","URL_OBJECT","OFFSCREEN_CANVAS","getContext","WEBGL","userAgentInfo","WEB_ASSEMBLY_ERROR_FREE","localStorage","getItem","Cookies","setItem","randomDeviceIdBytes","getRandomValues","_Array$from","HTMLElement","tagName","engineWorkerBlob","Blob","EngineLoader","preloadedEngineWorker","Worker","createObjectURL","load","preloadedEngineWorkerAvailable","engineWorker","terminate","scanditEngineLocation","userLicenseKey","BlurryRecognitionPreloader","availableBlurryRecognitionSymbologies","checkBlurryTablesAlreadyAvailable","alreadyAvailable","_this","queuedBlurryRecognitionSymbologies","readyBlurryRecognitionSymbologies","eventEmitter","engineWorkerOnMessage","eventName","scanSettings","newQueuedBlurryRecognitionSymbologies","getEnabledSymbologies","symbologyQueuePosition","unshift","splice","every","_this2","filter","isSymbologyEnabled","openDbRequest","handleErrorOrNew","fsObjectStoreName","storeKeysRequest","getAllKeys","blurryTableFiles","file","ev","createNextBlurryTableSymbology","browserName","worker","workerIndexedDBSupportTestFunction","message","deleteDatabase","_Reflect$construct","sham","Proxy","_construct","Parent","Class","isNativeReflectConstruct","CustomError","_wrapNativeSuper","_cache","_Map","UnsupportedBrowserError","browserCompatibility","Type","Camera","_counter","_html5AudioPool","html5PoolSize","_codecs","_howls","_muted","_volume","_canPlayEvent","_navigator","masterGain","noAudio","usingWebAudio","autoSuspend","autoUnlock","_setup","volume","parseFloat","_","gain","setValueAtTime","currentTime","_webAudio","_getSoundIds","u","_soundById","_node","mute","muted","unload","codecs","_autoSuspend","Audio","oncanplaythrough","_setupCodecs","canPlayType","mp3","mpeg","opus","ogg","oga","wav","aac","caf","m4a","m4b","mp4","weba","webm","dolby","flac","_unlockAudio","_audioUnlocked","_mobileUnloaded","sampleRate","_scratchBuffer","createBuffer","_unlocked","_releaseHtml5Audio","_autoResume","createBufferSource","connect","destination","noteOn","resume","onended","disconnect","removeEventListener","_emit","_obtainHtml5Audio","play","suspend","_sounds","_paused","_suspendTimer","clearTimeout","_resumeAfterSuspend","_autoplay","autoplay","_format","_html5","html5","_loop","loop","_pool","pool","_preload","_rate","rate","_sprite","sprite","_src","_xhr","xhr","headers","withCredentials","_duration","_state","_endTimers","_queue","_playLock","_onend","onend","_onfade","onfade","_onload","onload","_onloaderror","onloaderror","_onplayerror","onplayerror","_onpause","onpause","_onplay","onplay","_onstop","onstop","_onmute","onmute","_onvolume","onvolume","_onrate","onrate","_onseek","onseek","_onunlock","onunlock","_onresume","action","protocol","_ended","_id","_inactiveSound","_loadQueue","_seek","abs","_start","_stop","m","_refreshBuffer","_playStart","bufferSource","noteGrainOn","_clearTimer","h","playbackRate","paused","ejecta","isCocoonJS","g","pause","seek","_rateSeek","_stopFade","noteOff","_cleanBuffer","duration","_clearSound","_interval","fade","linearRampToValueAtTime","_startFadeInterval","_fadeTo","setInterval","round","clearInterval","cancelScheduledValues","loopStart","loopEnd","playing","_errorFn","_loadFn","ended","_drain","_panner","_parent","createGain","createGainNode","_errorListener","_loadListener","__default","atob","XMLHttpRequest","responseType","setRequestHeader","status","send","decodeAudioData","AudioContext","webkitAudioContext","platform","appVersion","HowlerGlobal","Howler","Howl","Sound","Format","ImageSettings","DataFormat","Parser","arr2","isIterable","_Array$isArray","arrayLikeToArray","arrayWithoutHoles","_isIterable","iterableToArray","minLen","unsupportedIterableToArray","nonIterableSpread","scanner","dataRaw","byte","ScanResult","barcodes","rejectedCodes","barcode","getIterator","$values","enabled","colorInvertedEnabled","activeSymbolCounts","SymbologySettings","defaultActiveSymbolCounts","defaultExtensions","checksums","defaultChecksums","minCount","maxCount","getNumberRange","extension","isValidExtension","_toConsumableArray","checksum","isValidChecksum","Extension","_Object$values","Checksum","to","STRIP_LEADING_FNC1","MOD_10","MOD_11","ScanSettings","enabledSymbologies","codeDuplicateFilter","maxNumberOfCodesPerFrame","searchArea","symbologySettings","enableSymbologies","baseSearchArea","properties","symbologies","toJSONName","combinedSearchArea","isFullSearchArea","_JSON$stringify","codeLocation1d","area","codeLocation2d","isEnabled","setSymbologiesEnabled","durationMilliseconds","limit","setEnabled","setMultipleSymbologiesEnabled","setSingleSymbologyEnabled","checkBrowserCompatibility","configurePhase","isReadyToWork","workerScanQueueLength","workerParseRequestId","workerScanRequestId","engineLoader","getEngineWorker","activeBlurryRecognitionSymbologies","applyScanSettings","blurryRecognitionPreloader","handleBlurryTablesUpdate","returnEngineWorker","updateBlurryRecognitionPriority","isBlurryRecognitionAvailable","toJSONString","some","HTMLImageElement","imageDataConversionContext","naturalWidth","naturalHeight","drawImage","getImageData","GRAY_8U","RGB_8U","RGBA_8U","workResultEvent","workErrorEvent","workResult","returnedImageData","createFromWASMResult","errorObject","licenseKeyFeatures","parseStringResultEvent","_this3","parseStringErrorEvent","parserResult","jsonString","fields","fieldsByName","parserField","Scanner","SingleImageModeSettings","getDefaultSingleImageModeSettings","text","base64image","informationElement","createRange","createContextualFragment","firstElementChild","buttonElement","containerStyle","backgroundColor","informationStyle","color","buttonStyle","borderColor","fill","UsageStrategy","ownKeys","getOwnPropertyDescriptors","getDesc","space","spaces","ltrim","RegExp","rtrim","exporter","ALIAS","FORCE","string","$parseInt","$trim","hex","ws","radix","ResolutionPreference","CameraSettings","MeteringMode","CameraAccess","getCamerasPromise","backCameraKeywords","cameraObjects","inaccessibleCameras","isBackCameraLabel","label","lowercaseLabel","keyword","mapNonStandardErrorName","extractAccessibleCamerasFromDevices","devices","cameras","videoDevice","videoDevices","cameraType","FRONT","BACK","camera","backCameraIndex","cameraResolutions","_parseInt","NaN","cameraResolution","lastIndexOf","getUserMediaVideoParams","resolutionFallbackLevel","userMediaVideoParams","resizeMode","ideal","enumerateDevices","mediaDevices","MediaStreamTrack","getSources","groupId","mediaStreamTrack","wantedCameraType","mediaTrackSettings","getSettings","mainCameraForType","activeCamera","find","_mediaTrackSettings","activeCameraIsBackFacing","adjustCameraTypes","facingMode","sort","camera1","camera2","localeCompare","_mainCameraForType","accessPermissionPromise","getUserMedia","video","audio","stream","getVideoTracks","track","getUserMediaParams","exact","getUserMediaDelayed","CameraManager","triggerFatalError","gui","postStreamInitialization","videoTrackUnmuteRecovery","triggerManualFocus","triggerZoomStart","triggerZoomMove","initialCameraType","cameraSwitcherEnabled","torchToggleEnabled","tapToFocusEnabled","pinchToZoomEnabled","getCameras","setCameraSwitcherVisible","mediaStream","mediaTrackCapabilities","torch","setTorchTogglerVisible","enableTapToFocusListeners","disableTapToFocusListeners","enablePinchToZoomListeners","disablePinchToZoomListeners","selectedCamera","cameraSettings","selectedCameraSettings","cameraInitializationPromise","accessInitialCamera","wantedCamera","adjustCamerasFromCameraStream","setSelectedCamera","updateActiveCameraCurrentResolution","accessAutoselectedCamera","initializeCameraWithSettings","currentResolution","cameraAccessTimeout","cameraMetadataCheckInterval","getCapabilitiesTimeout","manualFocusWaitTimeout","manualToAutofocusResumeTimeout","autofocusInterval","noCameraErrorParameters","activeCameraSettings","resolutionPreference","ULTRA_HD","FULL_HD","HD","initializeCameraAndCheckUpdatedSettings","torchEnabled","videoTracks","applyConstraints","advanced","setTorchEnabled","zoomPercentage","currentZoom","zoom","zoomRange","targetZoom","frontCameras","backCameras","sortAutoselectCameras","autoselectedCamera","initialCameraAccessPromise","primaryCamera","videoElement","videoWidth","videoHeight","setMirrorImageEnabled","isMirrorImageEnabled","storeStreamCapabilities","setupAutofocus","getCapabilitiesTimeoutMs","reinitializeCamera","_this4","triggerFocusMode","CONTINUOUS","manualToAutofocusResumeTimeoutMs","MANUAL","manualFocusWaitTimeoutMs","_this5","triggerAutoFocus","autofocusIntervalMs","SINGLE_SHOT","preventDefault","touches","pinchToZoomDistance","focusModeCapability","focusMode","triggerManualFocusForContinuous","triggerManualFocusForSingleShot","hypot","screenX","screen","screenY","getConstraints","pinchToZoomInitialZoom","currentConstraints","currentZoomConstraint","constraint","setZoom","getCapabilities","_this6","triggerManualFocusListener","triggerZoomStartListener","triggerZoomMoveListener","_this7","initializeCamera","_Object$keys","cameraSettingsProperty","_this8","newCamera","currentCamera","retryInitializeCameraIfNeeded","stopStream","accessCameraStream","getTracks","_this9","videoTrackUnmuteListener","postStreamInitializationListener","resolveInitializeCamera","srcObject","playVideo","handleCameraInitializationError","cameraNotReadableError","_this10","cameraAccessTimeoutMs","onresize","onloadeddata","cameraMetadataCheckStartTime","performance","cameraMetadataCheckTimeoutMs","dispatchEvent","cameraMetadataCheckIntervalMs","DummyCameraManager","_1","_2","_3","_4","$assign","assign","K","ResizeObserverBoxOptions","resizeObservers","msg","trigger","ObjectFit","GuiStyle","BarcodePicker","DOMRectReadOnly","freeze","fromRect","rectangle","isSVG","SVGElement","isHidden","getBBox","_b","offsetWidth","offsetHeight","getClientRects","isElement","scope","ownerDocument","defaultView","Element","cache","WeakMap","scrollRegexp","verticalRegexp","IE","parseDimension","pixel","inlineSize","blockSize","switchSizes","zeroBoxes","devicePixelContentBoxSize","borderBoxSize","contentBoxSize","contentRect","calculateBoxSizes","forceRecalculation","cs","svg","ownerSVGElement","removePadding","boxSizing","writingMode","canScrollVertically","overflowY","canScrollHorizontally","overflowX","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTop","borderTopWidth","borderRight","borderRightWidth","borderBottom","borderBottomWidth","horizontalPadding","verticalPadding","horizontalBorderArea","borderLeftWidth","verticalBorderArea","horizontalScrollbarThickness","verticalScrollbarThickness","widthReduction","heightReduction","contentWidth","contentHeight","borderBoxWidth","borderBoxHeight","boxes","devicePixelRatio","calculateBoxSize","observedBox","DEVICE_PIXEL_CONTENT_BOX","BORDER_BOX","ResizeObserverEntry","calculateDepthForNode","Infinity","depth","broadcastActiveObservations","shallowestDepth","callbacks","ro","activeTargets","ot","targetDepth","lastReportedSize","observer","callbacks_1","gatherActiveObservationsAtDepth","skippedTargets","observationTargets","isActive","watching","observerConfig","childList","subtree","time","timeout","scheduled","scheduler","Scheduler","stopped","schedule","until","elementsHaveResized","ErrorEvent","createEvent","initEvent","toggle_1","el_1","textContent","requestAnimationFrame","queueMicroTask","body","updateCount","ResizeObservation","CONTENT_BOX","isReplacedElement","ResizeObserverDetail","resizeObserver","observerMap","getObservationIndex","ResizeObserverController","detail","firstObservation","box","unobserve","lastObservation","ResizeObserver","ResizeObserverPolyfill","GUI","originElement","singleImageModeEnabled","singleImageModeSettings","scanningPaused","cameraUploadCallback","mirrorImageOverrides","cameraUploadInProgress","cameraSwitchInProgress","engineContextCreated","grandParentElement","grandParentElementClassName","parentElement","parentElementClassName","cameraSwitcherElement","torchTogglerElement","laserContainerElement","laserActiveImageElement","laserPausedImageElement","viewfinderElement","context2d","cameraUploadElement","cameraUploadLabelElement","cameraUploadInputElement","cameraUploadProgressElement","setupCameraUploadGuiAssets","guiStyle","NONE","setupContext","setupVideoElement","setupCameraSwitcher","setupTorchToggler","setupFullGuiAssets","setGuiStyle","setVideoFit","videoFit","setLaserArea","laserArea","setViewfinderArea","viewfinderArea","visibilityListener","checkAndRecoverPlayback","newScanSettingsListener","handleNewScanSettings","videoResizeListener","handleVideoResize","hideLogo","contextCreatedShowLogoListener","showScanditLogo","contextCreatedActivateGUIListener","activateGUI","resize","setVisible","visible","classList","hiddenClassName","cameraManager","hiddenOpacityClassName","pausedClassName","LASER","flashColorClassName","VIEWFINDER","flashWhiteClassName","mirrorImageOverride","override","mirroredClassName","customLaserArea","getScanSettings","getSearchArea","customViewfinderArea","COVER","setBaseSearchArea","flashLaser","flashViewfinder","isVideoAndContextStateValid","contextWebGL","drawingBufferWidth","drawingBufferHeight","imageDataLength","texImage2D","TEXTURE_2D","RGBA","UNSIGNED_BYTE","readPixels","playPromise","busyScanning","flashInsetClassName","opacityPulseClassName","alpha","antialias","setupWebGL","texture","createTexture","bindTexture","frameBuffer","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","setAttribute","videoElementClassName","deviceType","defaultSettings","defaultMobile","defaultDesktop","cameraUploadElementClassName","accept","cameraUploadFile","cameraUploadInputCheckFunction","cameraUploadButtonIconElement","maxWidth","maxHeight","laserContainerElementClassName","viewfinderElementClassName","resizeCameraUpload","resizeVideo","transform","videoRatio","widthPercentage","heightPercentage","active","progressPercentageValue","image","updateCameraUploadProgress","resizedImageWidth","resizedImageHeight","cameraUploadFileProcess","setCameraUploadGuiBusyScanning","files","Image","fileReader","FileReader","cameraUploadImageLoad","onprogress","event2","lengthComputable","progress","loaded","total","readAsDataURL","currentCameraIndex","findIndex","_cameraManager$active","newCameraIndex","cameraSwitcherElementClassName","cameraSwitcherListener","torchTogglerElementClassName","toggleTorch","scanditLogoImageElement","scanditLogoImageElementClassName","resumeScanning","viewport","playSoundOnScan","vibrateOnScan","targetScanningFPS","destroyed","beepSound","vibrateFunction","vibrate","webkitVibrate","mozVibrate","msVibrate","setPlaySoundOnScanEnabled","setVibrateOnScanEnabled","setTargetScanningFPS","scannerReadyEventListener","handleScannerReady","processVideoFrame","scheduleVideoProcessing","setCameraManager","destroyScanner","pauseScanning","destroy","pauseCamera","isReady","cameraAccess","setupCameras","setSelectedCameraSettings","applyCameraSettings","isVisible","isCameraSwitcherEnabled","setCameraSwitcherEnabled","isTorchToggleEnabled","setTorchToggleEnabled","isTapToFocusEnabled","setTapToFocusEnabled","isPinchToZoomEnabled","setPinchToZoomEnabled","createParserForFormat","isValidHTMLElement","reassignOriginElement","fatalError","externalImageData","flashGUI","videoProcessing","processingStartTime","averageProcessingTime","nextProcessingCallDelay","internalImageData","getImageSettings","processImage","handleScanResult","_context9","isBusyProcessing","latestVideoTimeProcessed","getVideoCurrentTime","scheduleNextVideoProcessing","CONTAIN","enableCameraSwitcher","enableTorchToggle","enableTapToFocus","enablePinchToZoom","accessCamera","isMobileDevice","singleImageModePlatformSettings","mobile","desktop","singleImageModeDisallowed","usageStrategy","NEVER","singleImageModeForced","ALWAYS","log","barcodePicker","setInteractionOptions","setInitialCameraType","alert","getDeviceId","engineLocation","preloadBlurryRecognition","preloadEngine","prepareBlurryTables"],"mappings":"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"}